| Index: mojom/mojom_tool/integration_tests/resolution_test.go
|
| diff --git a/mojom/mojom_tool/integration_tests/resolution_test.go b/mojom/mojom_tool/integration_tests/resolution_test.go
|
| index 5a6e46de298d1cc22f77adf43fcaf55857e69232..f1434e22eac07226dff573a8ccd95ee0755b9b72 100644
|
| --- a/mojom/mojom_tool/integration_tests/resolution_test.go
|
| +++ b/mojom/mojom_tool/integration_tests/resolution_test.go
|
| @@ -1084,313 +1084,3 @@ func TestSingleFileResolutionSuccess(t *testing.T) {
|
| }
|
| }
|
| }
|
| -
|
| -////////////////////////////////////////////////
|
| -/// TestFindReachableTypes
|
| -////////////////////////////////////////////////
|
| -
|
| -// typeGraphTestCase stores the data for one test case.
|
| -type typeGraphTestCase struct {
|
| - mojomContents string
|
| - typeToSearch string
|
| - expectedReachableTypes []string
|
| -}
|
| -
|
| -// typeGraphTest contains a series of test cases.
|
| -type typeGraphTest struct {
|
| - cases []typeGraphTestCase
|
| -}
|
| -
|
| -// addTestCase() should be invoked at the start of a case in TestFindReachableTypes.
|
| -func (test *typeGraphTest) addTestCase(contents, typeToSearch string, expectedReachableTypes []string) {
|
| - test.cases = append(test.cases, typeGraphTestCase{contents, typeToSearch, expectedReachableTypes})
|
| -}
|
| -
|
| -// TestFindReachableTypes() iterates through a series of test cases.
|
| -// For each case we expect for parsing and resolution to succeed. Then we
|
| -// invoke FindReachableTypes() on |typeToSearch| and compare the result
|
| -// to |expectedReachableTypes|.
|
| -func TestFindReachableTypes(t *testing.T) {
|
| - test := typeGraphTest{}
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Case
|
| - ////////////////////////////////////////////////////////////
|
| - {
|
| - contents := `
|
| - struct Struct1{
|
| - };
|
| -
|
| - struct Struct2{
|
| - Struct1 x;
|
| - };
|
| -
|
| - struct Struct3{
|
| - Struct2 x;
|
| - };
|
| -
|
| - struct Struct4{
|
| - Struct3 x;
|
| - };
|
| -
|
| - union Union1 {
|
| - Struct3 x;
|
| - Struct2 y;
|
| - };
|
| -
|
| - union Union2 {
|
| - Struct2 x;
|
| - };
|
| - `
|
| - test.addTestCase(contents,
|
| - "Struct4",
|
| - []string{"Struct1", "Struct2", "Struct3", "Struct4"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Union1",
|
| - []string{"Union1", "Struct1", "Struct2", "Struct3"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Union2",
|
| - []string{"Union2", "Struct1", "Struct2"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Case
|
| - ////////////////////////////////////////////////////////////
|
| - {
|
| - contents := `
|
| - struct Struct1{
|
| - Struct4 x;
|
| - };
|
| -
|
| - struct Struct2{
|
| - Struct1 x;
|
| - };
|
| -
|
| - struct Struct3{
|
| - Struct2 x;
|
| - };
|
| -
|
| - struct Struct4{
|
| - Struct3 x;
|
| - };
|
| -
|
| - union Union1 {
|
| - Struct2 x;
|
| - };
|
| - `
|
| -
|
| - test.addTestCase(contents,
|
| - "Union1",
|
| - []string{"Union1", "Struct1", "Struct2", "Struct3", "Struct4"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Cases
|
| - ////////////////////////////////////////////////////////////
|
| - {
|
| - contents := `
|
| -
|
| - enum Height {
|
| - SHORT, TALL
|
| - };
|
| -
|
| - struct Struct1{
|
| - enum Color {
|
| - RED, BLUE
|
| - };
|
| - };
|
| -
|
| - struct Struct2{
|
| - const Struct1.Color FAVORITE = RED;
|
| - };
|
| - `
|
| -
|
| - test.addTestCase(contents,
|
| - "Struct1",
|
| - []string{"Struct1", "Struct1.Color"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Struct2",
|
| - []string{"Struct2", "Struct1.Color"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Cases
|
| - ////////////////////////////////////////////////////////////
|
| - {
|
| - contents := `
|
| - enum Color {
|
| - RED, BLUE
|
| - };
|
| -
|
| - enum Height {
|
| - SHORT, TALL
|
| - };
|
| -
|
| - struct Struct1{};
|
| - struct Struct2{};
|
| -
|
| - interface Interface1 {
|
| - const Color FAVORITE_COLOR = RED;
|
| -
|
| - Foo(int32 x) => (string y);
|
| - };
|
| -
|
| - interface Interface2 {
|
| - Foo(int32 x) => (Struct1 y);
|
| - Bar(string x);
|
| - };
|
| - `
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface1",
|
| - []string{"Interface1", "Color"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface2",
|
| - []string{"Interface2", "Struct1"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Cases
|
| - ////////////////////////////////////////////////////////////
|
| -
|
| - {
|
| - contents := `
|
| - enum Color {
|
| - RED, BLUE
|
| - };
|
| -
|
| - enum Height {
|
| - SHORT, TALL
|
| - };
|
| -
|
| - struct Struct1{};
|
| - struct Struct2{};
|
| -
|
| - interface Interface1 {
|
| - const Color FAVORITE_COLOR = RED;
|
| -
|
| - Foo(map<Height, int8> x) => (string y);
|
| - };
|
| -
|
| - interface Interface2 {
|
| - Foo(int32 x) => (array<Struct1?> y);
|
| - };
|
| - `
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface1",
|
| - []string{"Interface1", "Color", "Height"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface2",
|
| - []string{"Interface2", "Struct1"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Test Cases
|
| - ////////////////////////////////////////////////////////////
|
| -
|
| - {
|
| - contents := `
|
| - enum Color {
|
| - RED, BLUE
|
| - };
|
| -
|
| - enum Height {
|
| - SHORT, TALL
|
| - };
|
| -
|
| - struct Struct1{};
|
| - struct Struct2{};
|
| -
|
| - interface Interface1 {
|
| - const Color FAVORITE_COLOR = RED;
|
| -
|
| - Foo(int32 x) => (string y);
|
| - Bar(map<string, Height> z) => ();
|
| - };
|
| -
|
| - interface Interface2 {
|
| - Foo(int32 x) => (map<Height, Struct1?> y);
|
| - };
|
| - `
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface1",
|
| - []string{"Interface1", "Color", "Height"},
|
| - )
|
| -
|
| - test.addTestCase(contents,
|
| - "Interface2",
|
| - []string{"Interface2", "Height", "Struct1"},
|
| - )
|
| - }
|
| -
|
| - ////////////////////////////////////////////////////////////
|
| - // Execute all of the test cases.
|
| - ////////////////////////////////////////////////////////////
|
| - for i, c := range test.cases {
|
| - // Parse and resolve the mojom input.
|
| - descriptor := mojom.NewMojomDescriptor()
|
| - fileName := fmt.Sprintf("file%d", i)
|
| - parser := parser.MakeParser(fileName, fileName, c.mojomContents, descriptor, nil)
|
| - parser.Parse()
|
| - if !parser.OK() {
|
| - t.Errorf("Parsing error for %s: %s", fileName, parser.GetError().Error())
|
| - continue
|
| - }
|
| - err := descriptor.Resolve()
|
| - if err != nil {
|
| - t.Errorf("Resolution failed for test case %d: %s", i, err.Error())
|
| - continue
|
| - }
|
| -
|
| - userDefinedType := descriptor.TypesByKey[mojom.ComputeTypeKey(c.typeToSearch)]
|
| - result := userDefinedType.FindReachableTypes()
|
| - if err := compareTypeSets(descriptor, c.expectedReachableTypes, result); err != nil {
|
| - t.Errorf("Case %d, unexpected typeset for %s: %s\n", i, c.typeToSearch, err.Error())
|
| - continue
|
| - }
|
| - }
|
| -}
|
| -
|
| -func compareTypeSets(descriptor *mojom.MojomDescriptor, expectedTypeNames, actualTypeKeys []string) error {
|
| - expectedSet := userDefinedTypeSet(descriptor, expectedTypeNames, false)
|
| - actualSet := userDefinedTypeSet(descriptor, actualTypeKeys, true)
|
| - return expectedSet.Compare(&actualSet)
|
| -}
|
| -
|
| -func userDefinedTypeSet(descriptor *mojom.MojomDescriptor, types []string, typesAreKeys bool) mojom.UserDefinedTypeSet {
|
| - typeSet := mojom.MakeUserDefinedTypeSet()
|
| - for _, t := range types {
|
| - if t == "" {
|
| - panic("Found empty type in types array.")
|
| - }
|
| - var typeKey string
|
| - if typesAreKeys {
|
| - typeKey = t
|
| - } else {
|
| - typeKey = mojom.ComputeTypeKey(t)
|
| - }
|
| - userDefinedType := descriptor.TypesByKey[typeKey]
|
| - if userDefinedType == nil {
|
| - panic(fmt.Sprintf("No type found for: %s", t))
|
| - }
|
| - typeSet.Add(userDefinedType)
|
| - }
|
| - return typeSet
|
| -}
|
|
|