Example #1
0
  def testValidDefaultValues(self):
    """Tests default values that are valid (to the parser)."""

    source = """\
        struct MyStruct {
          int16 a0 = 0;
          uint16 a1 = 0x0;
          uint16 a2 = 0x00;
          uint16 a3 = 0x01;
          uint16 a4 = 0xcd;
          int32 a5 = 12345;
          int64 a6 = -12345;
          int64 a7 = +12345;
          uint32 a8 = 0x12cd3;
          uint32 a9 = -0x12cD3;
          uint32 a10 = +0x12CD3;
          bool a11 = true;
          bool a12 = false;
          float a13 = 1.2345;
          float a14 = -1.2345;
          float a15 = +1.2345;
          float a16 = 123.;
          float a17 = .123;
          double a18 = 1.23E10;
          double a19 = 1.E-10;
          double a20 = .5E+10;
          double a21 = -1.23E10;
          double a22 = +.123E10;
        };
        """
    expected = ast.Mojom(
        None,
        ast.ImportList(),
        [ast.Struct(
            'MyStruct',
            None,
            ast.StructBody(
                [ast.StructField('a0', None, None, 'int16', '0'),
                 ast.StructField('a1', None, None, 'uint16', '0x0'),
                 ast.StructField('a2', None, None, 'uint16', '0x00'),
                 ast.StructField('a3', None, None, 'uint16', '0x01'),
                 ast.StructField('a4', None, None, 'uint16', '0xcd'),
                 ast.StructField('a5' , None, None, 'int32', '12345'),
                 ast.StructField('a6', None, None, 'int64', '-12345'),
                 ast.StructField('a7', None, None, 'int64', '+12345'),
                 ast.StructField('a8', None, None, 'uint32', '0x12cd3'),
                 ast.StructField('a9', None, None, 'uint32', '-0x12cD3'),
                 ast.StructField('a10', None, None, 'uint32', '+0x12CD3'),
                 ast.StructField('a11', None, None, 'bool', 'true'),
                 ast.StructField('a12', None, None, 'bool', 'false'),
                 ast.StructField('a13', None, None, 'float', '1.2345'),
                 ast.StructField('a14', None, None, 'float', '-1.2345'),
                 ast.StructField('a15', None, None, 'float', '+1.2345'),
                 ast.StructField('a16', None, None, 'float', '123.'),
                 ast.StructField('a17', None, None, 'float', '.123'),
                 ast.StructField('a18', None, None, 'double', '1.23E10'),
                 ast.StructField('a19', None, None, 'double', '1.E-10'),
                 ast.StructField('a20', None, None, 'double', '.5E+10'),
                 ast.StructField('a21', None, None, 'double', '-1.23E10'),
                 ast.StructField('a22', None, None, 'double', '+.123E10')]))])
    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
Example #2
0
 def p_struct_2(self, p):
   """struct : attribute_section STRUCT NAME SEMI"""
   p[0] = ast.Struct(p[3], p[1], None)
Example #3
0
  def testValidAttributes(self):
    """Tests parsing attributes (and attribute lists)."""

    # Note: We use structs because they have (optional) attribute lists.

    # Empty attribute list.
    source1 = "[] struct MyStruct {};"
    expected1 = ast.Mojom(
        None,
        ast.ImportList(),
        [ast.Struct('MyStruct', ast.AttributeList(), ast.StructBody())])
    self.assertEquals(parser.Parse(source1, "my_file.mojom"), expected1)

    # One-element attribute list, with name value.
    source2 = "[MyAttribute=MyName] struct MyStruct {};"
    expected2 = ast.Mojom(
        None,
        ast.ImportList(),
        [ast.Struct(
            'MyStruct',
            ast.AttributeList(ast.Attribute("MyAttribute", "MyName")),
            ast.StructBody())])
    self.assertEquals(parser.Parse(source2, "my_file.mojom"), expected2)

    # Two-element attribute list, with one string value and one integer value.
    source3 = "[MyAttribute1 = \"hello\", MyAttribute2 = 5] struct MyStruct {};"
    expected3 = ast.Mojom(
        None,
        ast.ImportList(),
        [ast.Struct(
            'MyStruct',
            ast.AttributeList([ast.Attribute("MyAttribute1", "hello"),
                               ast.Attribute("MyAttribute2", 5)]),
            ast.StructBody())])
    self.assertEquals(parser.Parse(source3, "my_file.mojom"), expected3)

    # Various places that attribute list is allowed.
    source4 = """\
        [Attr0=0] module my_module;

        [Attr1=1] import "my_import";

        [Attr2=2] struct MyStruct {
          [Attr3=3] int32 a;
        };
        [Attr4=4] union MyUnion {
          [Attr5=5] int32 a;
        };
        [Attr6=6] enum MyEnum {
          [Attr7=7] a
        };
        [Attr8=8] interface MyInterface {
          [Attr9=9] MyMethod([Attr10=10] int32 a) => ([Attr11=11] bool b);
        };
        [Attr12=12] const double kMyConst = 1.23;
        """
    expected4 = ast.Mojom(
        ast.Module(('IDENTIFIER', 'my_module'),
                   ast.AttributeList([ast.Attribute("Attr0", 0)])),
        ast.ImportList(ast.Import(
            ast.AttributeList([ast.Attribute("Attr1", 1)]),
            "my_import")),
        [ast.Struct(
             'MyStruct',
             ast.AttributeList(ast.Attribute("Attr2", 2)),
             ast.StructBody(
                 ast.StructField(
                     'a', ast.AttributeList([ast.Attribute("Attr3", 3)]),
                     None, 'int32', None))),
         ast.Union(
             'MyUnion',
             ast.AttributeList(ast.Attribute("Attr4", 4)),
             ast.UnionBody(
                 ast.UnionField(
                     'a', ast.AttributeList([ast.Attribute("Attr5", 5)]), None,
                     'int32'))),
         ast.Enum(
             'MyEnum',
             ast.AttributeList(ast.Attribute("Attr6", 6)),
             ast.EnumValueList(
                 ast.EnumValue(
                     'VALUE', ast.AttributeList([ast.Attribute("Attr7", 7)]),
                     None))),
         ast.Interface(
            'MyInterface',
            ast.AttributeList(ast.Attribute("Attr8", 8)),
            ast.InterfaceBody(
                ast.Method(
                    'MyMethod',
                    ast.AttributeList(ast.Attribute("Attr9", 9)),
                    None,
                    ast.ParameterList(
                        ast.Parameter(
                            'a',
                            ast.AttributeList([ast.Attribute("Attr10", 10)]),
                            None, 'int32')),
                    ast.ParameterList(
                        ast.Parameter(
                            'b',
                            ast.AttributeList([ast.Attribute("Attr11", 11)]),
                            None, 'bool'))))),
         ast.Const(
            'kMyConst',
            ast.AttributeList(ast.Attribute("Attr12", 12)),
            'double', '1.23')])
    self.assertEquals(parser.Parse(source4, "my_file.mojom"), expected4)
Example #4
0
 def p_struct_1(self, p):
   """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI"""
   p[0] = ast.Struct(p[3], p[1], p[5])