Ctrl K
ComunidadGuías…

bldr/util/gocompiler/tinygo-policy_test.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package gocompiler

import (
	"errors"
	"testing"

	"github.com/aperturerobotics/util/enabled"
	bldr_platform "github.com/s4wave/spacewave/bldr/platform"
	bldr_platform_go "github.com/s4wave/spacewave/bldr/platform/go"
)

func TestResolveTinyGoEnabled(t *testing.T) {
	testCases := []struct {
		name           string
		platformID     string
		opt            enabled.Enabled
		defaultEnabled bool
		expected       bool
		expectError    bool
	}{
		{
			name:       "explicit browser go plugin",
			platformID: "web/js/wasm",
			opt:        enabled.Enabled_ENABLE,
			expected:   true,
		},
		{
			name:        "explicit js unsupported",
			platformID:  "js",
			opt:         enabled.Enabled_ENABLE,
			expectError: true,
		},
		{
			name:        "explicit native unsupported",
			platformID:  "desktop/linux/amd64",
			opt:         enabled.Enabled_ENABLE,
			expectError: true,
		},
		{
			name:       "default preserves standard go",
			platformID: "web/js/wasm",
			opt:        enabled.Enabled_DEFAULT,
			expected:   false,
		},
		{
			name:           "default stays disabled for browser",
			platformID:     "web/js/wasm",
			opt:            enabled.Enabled_DEFAULT,
			defaultEnabled: true,
			expected:       false,
		},
		{
			name:           "disable overrides default",
			platformID:     "web/js/wasm",
			opt:            enabled.Enabled_DISABLE,
			defaultEnabled: true,
			expected:       false,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			// Parse the platform for this TinyGo enablement case.
			plat, err := bldr_platform.ParsePlatform(tc.platformID)
			if err != nil {
				t.Fatalf("%s: unexpected error: %s", tc.platformID, err.Error())
			}

			// Resolve TinyGo enablement for the configured platform and policy.
			actual, err := ResolveTinyGoEnabled(plat, tc.opt, tc.defaultEnabled)

			// Verify TinyGo enablement or the unsupported platform error.
			if tc.expectError {
				if err == nil {
					t.Fatalf("%s: expected error but got none", tc.platformID)
				}
				if !errors.Is(err, bldr_platform_go.ErrTinyGoUnsupported) {
					t.Fatalf("%s: expected ErrTinyGoUnsupported, got %s", tc.platformID, err.Error())
				}
				return
			}
			if err != nil {
				t.Fatalf("%s: unexpected error: %s", tc.platformID, err.Error())
			}
			if actual != tc.expected {
				t.Fatalf("%s: expected %v got %v", tc.platformID, tc.expected, actual)
			}
		})
	}
}

func TestDefaultTinyGoEnabled(t *testing.T) {
	testCases := []struct {
		name       string
		platformID string
		isRelease  bool
		expected   bool
	}{
		{
			name:       "release browser wasm",
			platformID: "web/js/wasm",
			isRelease:  true,
			expected:   true,
		},
		{
			name:       "dev browser wasm",
			platformID: "web/js/wasm",
		},
		{
			name:       "release js fallback",
			platformID: "js",
			isRelease:  true,
		},
		{
			name:       "release native",
			platformID: "desktop/linux/amd64",
			isRelease:  true,
		},
		{
			name:       "release wasi",
			platformID: "web/wasi/wasm",
			isRelease:  true,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			plat, err := bldr_platform.ParsePlatform(tc.platformID)
			if err != nil {
				t.Fatalf("%s: unexpected error: %s", tc.platformID, err.Error())
			}
			if got := DefaultTinyGoEnabled(plat, tc.isRelease); got != tc.expected {
				t.Fatalf("%s: default TinyGo = %v, want %v", tc.platformID, got, tc.expected)
			}
		})
	}
}