Files
sanderling/internal/hierarchy/selector_keys_test.go
T
pj 269574706d feat(spec): reject an unknown object-selector key in the web runtime
Same rule and the same message as the native side: a key no element can
carry throws instead of matching nothing. The accepted list is one list,
committed as a fixture both suites assert, so a spec cannot be accepted
by one runtime and rejected by the other.
2026-08-13 00:38:40 +05:30

40 lines
1.1 KiB
Go

package hierarchy
import (
"encoding/json"
"os"
"path/filepath"
"slices"
"testing"
)
// Both runtimes reject an object-selector key they do not know, so the two key
// lists have to be one list. Were they to drift, a spec would be accepted by
// the runtime that lists the key and fail the run on the one that does not, and
// the difference would only show on the platform nobody ran first.
// pkg/spec/test/selector-keys.test.ts asserts the SAME file from the web side.
func TestSelectorKeysMatchTheCrossRuntimeList(t *testing.T) {
path, err := filepath.Abs("../../pkg/spec/test/fixtures/selector-keys.json")
if err != nil {
t.Fatal(err)
}
body, err := os.ReadFile(path)
if err != nil {
t.Fatalf("read selector keys: %v", err)
}
var want []string
if err := json.Unmarshal(body, &want); err != nil {
t.Fatalf("decode selector keys: %v", err)
}
if got := SelectorKeys(); !slices.Equal(got, want) {
t.Errorf("native key list\n got=%v\nwant=%v", got, want)
}
}
func TestSelectorKeysAreSorted(t *testing.T) {
keys := SelectorKeys()
if !slices.IsSorted(keys) {
t.Errorf("keys must stay sorted so the two lists compare readably: %v", keys)
}
}