1package vnext23import (4 "testing"5)67func TestSchemaUnionAcceptsIndependentExtensions(t *testing.T) {8 t.Parallel()910 core := StandardSchema()11 featureID := CoreID("type.feature")12 emergency := Field{13 ID: IDFromName("com.example.emergency", "feature.level"),14 Name: "emergencyLevel",15 Kind: KindInt64,16 }17 capacity := Field{18 ID: IDFromName("org.example.planning", "feature.capacity"),19 Name: "capacity",20 Kind: KindInt64,21 }2223 branchA := Schema{Types: []Type{{ID: featureID, Name: "Feature", Fields: []Field{emergency}}}}24 branchB := Schema{Types: []Type{{ID: featureID, Name: "Feature", Fields: []Field{capacity}}}}25 merged, err := UnionSchemas(core, branchA, branchB)26 if err != nil {27 t.Fatalf("union independent schemas: %v", err)28 }2930 feature, ok := merged.Type(featureID)31 if !ok {32 t.Fatal("merged schema lost Feature")33 }34 if _, ok := feature.Field(emergency.ID); !ok {35 t.Fatal("merged schema lost branch A field")36 }37 if _, ok := feature.Field(capacity.ID); !ok {38 t.Fatal("merged schema lost branch B field")39 }40}4142func TestSchemaUnionRejectsIdentityReuseWithAnotherWireKind(t *testing.T) {43 t.Parallel()4445 featureID := CoreID("type.feature")46 fieldID := IDFromName("com.example", "feature.rating")47 left := Schema{Types: []Type{{ID: featureID, Name: "Feature", Fields: []Field{{ID: fieldID, Name: "rating", Kind: KindInt64}}}}}48 right := Schema{Types: []Type{{ID: featureID, Name: "Feature", Fields: []Field{{ID: fieldID, Name: "rating", Kind: KindString}}}}}4950 if _, err := UnionSchemas(left, right); err == nil {51 t.Fatal("union accepted one field identity with incompatible wire kinds")52 }53}5455func TestCanonicalSchemaIgnoresDeclarationOrder(t *testing.T) {56 t.Parallel()5758 a := Field{ID: IDFromName("com.example", "a"), Name: "a", Kind: KindString}59 b := Field{ID: IDFromName("com.example", "b"), Name: "b", Kind: KindFloat64}60 typeID := IDFromName("com.example", "type")61 left := Schema{Types: []Type{{ID: typeID, Name: "Example", Fields: []Field{a, b}}}}62 right := Schema{Types: []Type{{ID: typeID, Name: "Example", Fields: []Field{b, a}}}}6364 leftHash, err := left.Hash()65 if err != nil {66 t.Fatalf("hash left schema: %v", err)67 }68 rightHash, err := right.Hash()69 if err != nil {70 t.Fatalf("hash right schema: %v", err)71 }72 if leftHash != rightHash {73 t.Fatalf("declaration order changed schema identity: %x != %x", leftHash, rightHash)74 }75}