Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Unified Diff: mojo/go/tests/validation_type_test.go

Issue 1719873003: Mojom runtime type info: New implementation for Go. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebasing Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/go/tests/validation_type_test.go
diff --git a/mojo/go/tests/validation_type_test.go b/mojo/go/tests/validation_type_test.go
index 5e4c6a58d862d149f36ebc127758a482bb45d286..725ace66c180525e7ea0c3e4a107eae606df0dcb 100644
--- a/mojo/go/tests/validation_type_test.go
+++ b/mojo/go/tests/validation_type_test.go
@@ -5,12 +5,12 @@
package tests
import (
+ "fmt"
"reflect"
"testing"
"mojo/public/interfaces/bindings/mojom_types"
"mojo/public/interfaces/bindings/service_describer"
- "mojo/public/interfaces/bindings/tests/test_included_unions"
"mojo/public/interfaces/bindings/tests/test_unions"
test "mojo/public/interfaces/bindings/tests/validation_test_interfaces"
)
@@ -18,6 +18,15 @@ import (
var test_descriptor map[string]mojom_types.UserDefinedType
var test_unions_descriptor map[string]mojom_types.UserDefinedType
+// computeTypeKey encapsulates the algorithm for computing the type key
+// of a type given its fully-qualified name.
+//
+// This function must be kept in sync with the function ComputeTypeKey()
+// in mojom/mojom_descriptor.go in the Mojom parser source code.
+func computeTypeKey(fullyQualifiedName string) string {
+ return fmt.Sprintf("TYPE_KEY:%s", fullyQualifiedName)
+}
+
func init() {
test_descriptor = test.GetAllMojomTypeDefinitions()
test_unions_descriptor = test_unions.GetAllMojomTypeDefinitions()
@@ -25,9 +34,9 @@ func init() {
// Perform a sanity check where we examine an MojomEnum's contents for correctness.
func TestEnumType(t *testing.T) {
- enumID := test.ID_validation_test_interfaces_BasicEnum__
shortName := "BasicEnum"
fullIdentifier := "mojo.test.BasicEnum"
+ enumID := computeTypeKey(fullIdentifier)
labelMap := map[string]int32{
"A": 0,
"B": 1,
@@ -96,12 +105,12 @@ func TestEnumType(t *testing.T) {
// Perform a sanity check where we examine a MojomStruct's contents for correctness.
func TestStructType(t *testing.T) {
- structID := test.ID_validation_test_interfaces_StructE__
shortName := "StructE"
fullIdentifier := "mojo.test.StructE"
+ structID := computeTypeKey(fullIdentifier)
fields := map[int]string{
- 0: "StructD",
- 1: "DataPipeConsumer",
+ 0: "struct_d",
+ 1: "data_pipe_consumer",
}
// Extract *UserDefinedType from the validation test's Descriptor using structID.
@@ -143,8 +152,14 @@ func TestStructType(t *testing.T) {
for i, field := range ms.Fields {
expectedFieldShortName := fields[i]
// Check that the ShortName is correct.
- if field.DeclData == nil || field.DeclData.ShortName == nil || *field.DeclData.ShortName != expectedFieldShortName {
- t.Fatalf("StructField for %s at ordinal %d did not have ShortName %s", structID, i, expectedFieldShortName)
+ if field.DeclData == nil {
+ t.Fatalf("StructField for %s at ordinal %d had nil DeclData", structID, i)
+ }
+ if field.DeclData.ShortName == nil {
+ t.Fatalf("StructField for %s at ordinal %d had nil DeclData.ShortName", structID, i)
+ }
+ if *field.DeclData.ShortName != expectedFieldShortName {
+ t.Fatalf("StructField for %s at ordinal %d had ShortName %s, expecting %s", structID, i, *field.DeclData.ShortName, expectedFieldShortName)
}
// Special case each field since we know what's inside.
@@ -156,12 +171,13 @@ func TestStructType(t *testing.T) {
}
// TypeTypeReference.Value is a TypeReference
- expectedReferenceID := test.ID_validation_test_interfaces_StructD__
+ expectedReferenceID := "StructD"
if *ttr.Value.Identifier != expectedReferenceID {
t.Fatalf("TypeReference Identifier got %s, but expected %s", *ttr.Value.Identifier, expectedReferenceID)
}
- if *ttr.Value.TypeKey != expectedReferenceID {
- t.Fatalf("TypeReference TypeKey got %s, but expected %s", *ttr.Value.TypeKey, expectedReferenceID)
+ expectedTypeKey := computeTypeKey("mojo.test.StructD")
+ if *ttr.Value.TypeKey != expectedTypeKey {
+ t.Fatalf("TypeReference TypeKey got %s, but expected %s", *ttr.Value.TypeKey, expectedTypeKey)
}
case 1:
tht, ok := field.Type.(*mojom_types.TypeHandleType)
@@ -184,14 +200,14 @@ func TestStructType(t *testing.T) {
// Perform a sanity check where we examine a MojomUnion's contents for correctness.
func TestUnionType(t *testing.T) {
- unionID := test.ID_validation_test_interfaces_UnionB__
shortName := "UnionB"
fullIdentifier := "mojo.test.UnionB"
+ unionID := computeTypeKey(fullIdentifier)
fields := map[int]string{
- 0: "A",
- 1: "B",
- 2: "C",
- 3: "D",
+ 0: "a",
+ 1: "b",
+ 2: "c",
+ 3: "d",
}
// Extract *UserDefinedType from the validation test's Descriptor using unionID.
@@ -231,12 +247,14 @@ func TestUnionType(t *testing.T) {
// Go through each UnionField, checking DeclData and the Type of each field.
// Note that UnionField's rely on their Tag to determine their ordinal.
// It is NOT in definition order, like with MojomStruct's.
- for _, field := range mu.Fields {
- ordinal := field.Tag
+ for i, field := range mu.Fields {
+ //ordinal := field.Tag
+ // TODO(rudominer) Currently the field.Tag is not being set by the Mojom parser.
+ ordinal := i
expectedFieldShortName := fields[int(ordinal)]
// Check that the ShortName is correct.
if field.DeclData == nil || field.DeclData.ShortName == nil || *field.DeclData.ShortName != expectedFieldShortName {
- t.Fatalf("UnionField for %s at ordinal %d did not have ShortName %s", unionID, ordinal, expectedFieldShortName)
+ t.Fatalf("UnionField for %s at ordinal %d had ShortName %s, expecting %s", unionID, ordinal, *field.DeclData.ShortName, expectedFieldShortName)
}
// It turns out that regardless of field ordinal, this union has TypeSimpleType for the type.
@@ -269,11 +287,11 @@ func TestUnionType(t *testing.T) {
// Perform a sanity check for a struct that imports a union from another file.
// The descriptor should still handle it.
func TestStructWithImportType(t *testing.T) {
- structID := test_unions.ID_test_unions_IncludingStruct__
shortName := "IncludingStruct"
fullIdentifier := "mojo.test.IncludingStruct"
+ structID := computeTypeKey(fullIdentifier)
fields := map[int]string{
- 0: "A",
+ 0: "a",
}
// Extract *UserDefinedType from the validation test's Descriptor using structID.
@@ -310,13 +328,17 @@ func TestStructWithImportType(t *testing.T) {
t.Fatalf("MojomStruct for %s had %d fields, but expected %d", structID, got, expected)
}
+ includedUnionShortName := "IncludedUnion"
+ includedUnionFullIdentifier := "mojo.test.IncludedUnion"
+ includedUnionID := computeTypeKey(includedUnionFullIdentifier)
+
// Go through each StructField, checking DeclData and the Type of each field.
// Note that since ms.Fields is a slice, the "ordinal" is the index.
for i, field := range ms.Fields {
expectedFieldShortName := fields[i]
// Check that the ShortName is correct.
if field.DeclData == nil || field.DeclData.ShortName == nil || *field.DeclData.ShortName != expectedFieldShortName {
- t.Fatalf("StructField for %s at ordinal %d did not have ShortName %s", structID, i, expectedFieldShortName)
+ t.Fatalf("StructField for %s at ordinal %d had ShortName %s, expecting %s", structID, i, *field.DeclData.ShortName, expectedFieldShortName)
}
// Special case each field since we know what's inside.
@@ -326,14 +348,11 @@ func TestStructWithImportType(t *testing.T) {
if !ok {
t.Fatalf("StructField %s's field 0 didn't have Type *TypeTypeReference", structID)
}
-
- // TypeTypeReference.Value is a TypeReference, which must have reference equality to the imported unionID.
- unionIDRef := &test_included_unions.ID_test_included_unions_IncludedUnion__
- if ttr.Value.Identifier != unionIDRef {
- t.Fatalf("TypeReference Identifier got %s, but expected %s", *ttr.Value.Identifier, *unionIDRef)
+ if *ttr.Value.Identifier != includedUnionShortName {
+ t.Fatalf("TypeReference Identifier got %s, but expected %s", *ttr.Value.Identifier, includedUnionShortName)
}
- if ttr.Value.TypeKey != unionIDRef {
- t.Fatalf("TypeReference TypeKey got %s, but expected %s", *ttr.Value.TypeKey, *unionIDRef)
+ if *ttr.Value.TypeKey != includedUnionID {
+ t.Fatalf("TypeReference TypeKey got %s, but expected %s", *ttr.Value.TypeKey, includedUnionID)
}
default:
t.Fatalf("There should not be a field %d for MojomStruct %s", i, structID)
@@ -349,10 +368,9 @@ func TestInterfaceType(t *testing.T) {
// Method0(uint8 param0) => (uint8 param0);
// Method1(uint8 param0);
// };
-
- interfaceID := test.ID_validation_test_interfaces_BoundsCheckTestInterface__
shortName := "BoundsCheckTestInterface"
fullIdentifier := "mojo.test.BoundsCheckTestInterface"
+ interfaceID := computeTypeKey(fullIdentifier)
methodMap := map[uint32]string{
0: "Method0",
1: "Method1",
@@ -387,7 +405,7 @@ func checkServiceDescription(t *testing.T, sd service_describer.ServiceDescripti
// Check out the top level interface. This must pass checkMojomInterface.
mi, err := sd.GetTopLevelInterface()
if err != nil {
- t.Fatalf("Unexpected error %s", err)
+ t.Fatalf("Unexpected error for %s: %s", fullIdentifier, err)
}
checkMojomInterface(t, mi, interfaceID, shortName, fullIdentifier, methodMap)

Powered by Google App Engine
This is Rietveld 408576698