def test_parse(self):
        input_file = cStringIO.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                local:
                    hidden1;
                global:
                    foo;
                    bar; # baz
            };

            VERSION_2 { # wasd
                # Implicit global scope.
                    woodly;
                    doodly; # asdf
                local:
                    qwerty;
            } VERSION_1;
        """))
        parser = gsl.SymbolFileParser(input_file, {})
        versions = parser.parse()

        expected = [
            gsl.Version('VERSION_1', None, [], [
                gsl.Symbol('foo', []),
                gsl.Symbol('bar', ['baz']),
            ]),
            gsl.Version('VERSION_2', 'VERSION_1', ['wasd'], [
                gsl.Symbol('woodly', []),
                gsl.Symbol('doodly', ['asdf']),
            ]),
        ]

        self.assertEqual(expected, versions)
    def test_parse_version(self):
        input_file = cStringIO.StringIO(
            textwrap.dedent("""\
            VERSION_1 { # foo bar
                baz;
                qux; # woodly doodly
            };

            VERSION_2 {
            } VERSION_1; # asdf
        """))
        parser = gsl.SymbolFileParser(input_file, {})

        parser.next_line()
        version = parser.parse_version()
        self.assertEqual('VERSION_1', version.name)
        self.assertIsNone(version.base)
        self.assertEqual(['foo', 'bar'], version.tags)

        expected_symbols = [
            gsl.Symbol('baz', []),
            gsl.Symbol('qux', ['woodly', 'doodly']),
        ]
        self.assertEqual(expected_symbols, version.symbols)

        parser.next_line()
        version = parser.parse_version()
        self.assertEqual('VERSION_2', version.name)
        self.assertEqual('VERSION_1', version.base)
        self.assertEqual([], version.tags)
Exemple #3
0
    def test_multiple_definition(self):
        input_file = io.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo;
                    foo;
                    bar;
                    baz;
                    qux; # arm
                local:
                    *;
            };

            VERSION_2 {
                global:
                    bar;
                    qux; # arm64
            } VERSION_1;

            VERSION_PRIVATE {
                global:
                    baz;
            } VERSION_2;

        """))
        parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)

        with self.assertRaises(gsl.MultiplyDefinedSymbolError) as cm:
            parser.parse()
        self.assertEquals(['bar', 'foo'],
                          cm.exception.multiply_defined_symbols)
Exemple #4
0
 def test_parse_version_eof(self):
     input_file = cStringIO.StringIO(textwrap.dedent("""\
         VERSION_1 {
     """))
     parser = gsl.SymbolFileParser(input_file, {})
     parser.next_line()
     with self.assertRaises(gsl.ParseError):
         parser.parse_version()
Exemple #5
0
 def test_wildcard_symbol_local(self):
     input_file = cStringIO.StringIO(textwrap.dedent("""\
         VERSION_1 {
             local:
                 *;
         };
     """))
     parser = gsl.SymbolFileParser(input_file, {})
     parser.next_line()
     version = parser.parse_version()
     self.assertEqual([], version.symbols)
 def test_missing_semicolon(self):
     input_file = cStringIO.StringIO(
         textwrap.dedent("""\
         VERSION_1 {
             foo
         };
     """))
     parser = gsl.SymbolFileParser(input_file)
     parser.next_line()
     with self.assertRaises(gsl.ParseError):
         parser.parse_version()
 def test_wildcard_symbol_global(self):
     input_file = cStringIO.StringIO(
         textwrap.dedent("""\
         VERSION_1 {
             *;
         };
     """))
     parser = gsl.SymbolFileParser(input_file)
     parser.next_line()
     with self.assertRaises(gsl.ParseError):
         parser.parse_version()
 def test_unknown_scope_label(self):
     input_file = cStringIO.StringIO(
         textwrap.dedent("""\
         VERSION_1 {
             foo:
         }
     """))
     parser = gsl.SymbolFileParser(input_file)
     parser.next_line()
     with self.assertRaises(gsl.ParseError):
         parser.parse_version()
Exemple #9
0
    def test_parse_symbol(self):
        input_file = cStringIO.StringIO(textwrap.dedent("""\
            foo;
            bar; # baz qux
        """))
        parser = gsl.SymbolFileParser(input_file, {})

        parser.next_line()
        symbol = parser.parse_symbol()
        self.assertEqual('foo', symbol.name)
        self.assertEqual([], symbol.tags)

        parser.next_line()
        symbol = parser.parse_symbol()
        self.assertEqual('bar', symbol.name)
        self.assertEqual(['baz', 'qux'], symbol.tags)
    def test_integration(self):
        input_file = cStringIO.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo; # var
                    bar; # x86
                local:
                    *;
            };

            VERSION_2 { # arm
                baz; # introduced=9
                qux; # versioned=14
            } VERSION_1;

            VERSION_3 { # introduced=14
                woodly;
                doodly; # var
            } VERSION_2;
        """))
        parser = gsl.SymbolFileParser(input_file)
        versions = parser.parse()

        src_file = cStringIO.StringIO()
        version_file = cStringIO.StringIO()
        generator = gsl.Generator(src_file, version_file, 'arm', 9)
        generator.write(versions)

        expected_src = textwrap.dedent("""\
            int foo = 0;
            void baz() {}
            void qux() {}
        """)
        self.assertEqual(expected_src, src_file.getvalue())

        expected_version = textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo;
            };
            VERSION_2 {
                global:
                    baz;
            } VERSION_1;
        """)
        self.assertEqual(expected_version, version_file.getvalue())
Exemple #11
0
    def test_integration_future_api(self):
        api_map = {
            'O': 9000,
            'P': 9001,
            'Q': 9002,
        }

        input_file = io.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo; # introduced=O
                    bar; # introduced=P
                    baz; # introduced=Q
                local:
                    *;
            };
        """))
        parser = gsl.SymbolFileParser(input_file, api_map, 'arm', 9001, False,
                                      False)
        versions = parser.parse()

        src_file = io.StringIO()
        version_file = io.StringIO()
        generator = gsl.Generator(src_file, version_file, 'arm', 9001, False,
                                  False)
        generator.write(versions)

        expected_src = textwrap.dedent("""\
            void foo() {}
            void bar() {}
        """)
        self.assertEqual(expected_src, src_file.getvalue())

        expected_version = textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo;
                    bar;
            };
        """)
        self.assertEqual(expected_version, version_file.getvalue())
Exemple #12
0
    def test_next_line(self):
        input_file = cStringIO.StringIO(textwrap.dedent("""\
            foo

            bar
            # baz
            qux
        """))
        parser = gsl.SymbolFileParser(input_file, {})
        self.assertIsNone(parser.current_line)

        self.assertEqual('foo', parser.next_line().strip())
        self.assertEqual('foo', parser.current_line.strip())

        self.assertEqual('bar', parser.next_line().strip())
        self.assertEqual('bar', parser.current_line.strip())

        self.assertEqual('qux', parser.next_line().strip())
        self.assertEqual('qux', parser.current_line.strip())

        self.assertEqual('', parser.next_line())
        self.assertEqual('', parser.current_line)
Exemple #13
0
    def test_parse_vndk_apex_symbol(self):
        input_file = io.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                foo;
                bar; # vndk
                baz; # vndk apex
                qux; # apex
            };
        """))
        parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, True)

        parser.next_line()
        version = parser.parse_version()
        self.assertEqual('VERSION_1', version.name)
        self.assertIsNone(version.base)

        expected_symbols = [
            gsl.Symbol('foo', []),
            gsl.Symbol('bar', ['vndk']),
            gsl.Symbol('baz', ['vndk', 'apex']),
            gsl.Symbol('qux', ['apex']),
        ]
        self.assertEqual(expected_symbols, version.symbols)
    def test_integration(self):
        api_map = {
            'O': 9000,
            'P': 9001,
        }

        input_file = cStringIO.StringIO(
            textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo; # var
                    bar; # x86
                    fizz; # introduced=O
                    buzz; # introduced=P
                local:
                    *;
            };

            VERSION_2 { # arm
                baz; # introduced=9
                qux; # versioned=14
            } VERSION_1;

            VERSION_3 { # introduced=14
                woodly;
                doodly; # var
            } VERSION_2;

            VERSION_4 { # versioned=9
                wibble;
                wizzes; # vndk
            } VERSION_2;

            VERSION_5 { # versioned=14
                wobble;
            } VERSION_4;
        """))
        parser = gsl.SymbolFileParser(input_file, api_map)
        versions = parser.parse()

        src_file = cStringIO.StringIO()
        version_file = cStringIO.StringIO()
        generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
        generator.write(versions)

        expected_src = textwrap.dedent("""\
            int foo = 0;
            void baz() {}
            void qux() {}
            void wibble() {}
            void wobble() {}
        """)
        self.assertEqual(expected_src, src_file.getvalue())

        expected_version = textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo;
            };
            VERSION_2 {
                global:
                    baz;
            } VERSION_1;
            VERSION_4 {
                global:
                    wibble;
            } VERSION_2;
        """)
        self.assertEqual(expected_version, version_file.getvalue())
 def test_parse_fails_invalid_input(self):
     with self.assertRaises(gsl.ParseError):
         input_file = cStringIO.StringIO('foo')
         parser = gsl.SymbolFileParser(input_file, {})
         parser.parse()