Ejemplo n.º 1
0
    def test_parse(self) -> None:
        input_file = io.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 = symbolfile.SymbolFileParser(input_file, {}, Arch('arm'), 16,
                                             False, False)
        versions = parser.parse()

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

        self.assertEqual(expected, versions)
Ejemplo n.º 2
0
    def test_omit_symbol(self) -> None:
        # Thorough testing of the cases involved here is handled by
        # SymbolPresenceTest.
        src_file = io.StringIO()
        version_file = io.StringIO()
        generator = ndkstubgen.Generator(src_file, version_file, Arch('arm'),
                                         9, False, False)

        version = symbolfile.Version('VERSION_1', None, [], [
            symbolfile.Symbol('foo', [Tag('x86')]),
        ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())

        version = symbolfile.Version('VERSION_1', None, [], [
            symbolfile.Symbol('foo', [Tag('introduced=14')]),
        ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())

        version = symbolfile.Version('VERSION_1', None, [], [
            symbolfile.Symbol('foo', [Tag('llndk')]),
        ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())

        version = symbolfile.Version('VERSION_1', None, [], [
            symbolfile.Symbol('foo', [Tag('apex')]),
        ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())
Ejemplo n.º 3
0
    def test_omit_version(self) -> None:
        # Thorough testing of the cases involved here is handled by
        # OmitVersionTest, PrivateVersionTest, and SymbolPresenceTest.
        src_file = io.StringIO()
        version_file = io.StringIO()
        symbol_list_file = io.StringIO()
        generator = ndkstubgen.Generator(src_file,
                                         version_file, symbol_list_file,
                                         Arch('arm'), 9, False, False)

        version = symbolfile.Version('VERSION_PRIVATE', None, Tags(), [
            symbolfile.Symbol('foo', Tags()),
        ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())

        version = symbolfile.Version('VERSION', None, Tags.from_strs(['x86']),
                                     [
                                         symbolfile.Symbol('foo', Tags()),
                                     ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())

        version = symbolfile.Version('VERSION', None,
                                     Tags.from_strs(['introduced=14']), [
                                         symbolfile.Symbol('foo', Tags()),
                                     ])
        generator.write_version(version)
        self.assertEqual('', src_file.getvalue())
        self.assertEqual('', version_file.getvalue())
Ejemplo n.º 4
0
    def test_write(self) -> None:
        src_file = io.StringIO()
        version_file = io.StringIO()
        symbol_list_file = io.StringIO()
        generator = ndkstubgen.Generator(src_file,
                                         version_file, symbol_list_file,
                                         Arch('arm'), 9, False, False)

        versions = [
            symbolfile.Version('VERSION_1', None, Tags(), [
                symbolfile.Symbol('foo', Tags()),
                symbolfile.Symbol('bar', Tags.from_strs(['var'])),
                symbolfile.Symbol('woodly', Tags.from_strs(['weak'])),
                symbolfile.Symbol('doodly', Tags.from_strs(['weak', 'var'])),
            ]),
            symbolfile.Version('VERSION_2', 'VERSION_1', Tags(), [
                symbolfile.Symbol('baz', Tags()),
            ]),
            symbolfile.Version('VERSION_3', 'VERSION_1', Tags(), [
                symbolfile.Symbol('qux', Tags.from_strs(['versioned=14'])),
            ]),
        ]

        generator.write(versions)
        expected_src = textwrap.dedent("""\
            void foo() {}
            int bar = 0;
            __attribute__((weak)) void woodly() {}
            __attribute__((weak)) int doodly = 0;
            void baz() {}
            void qux() {}
        """)
        self.assertEqual(expected_src, src_file.getvalue())

        expected_version = textwrap.dedent("""\
            VERSION_1 {
                global:
                    foo;
                    bar;
                    woodly;
                    doodly;
            };
            VERSION_2 {
                global:
                    baz;
            } VERSION_1;
        """)
        self.assertEqual(expected_version, version_file.getvalue())

        expected_allowlist = textwrap.dedent("""\
            [abi_symbol_list]
            foo
            bar
            woodly
            doodly
            baz
            qux
        """)
        self.assertEqual(expected_allowlist, symbol_list_file.getvalue())
Ejemplo n.º 5
0
    def test_omit_api(self) -> None:
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [], []), Arch('arm'), 9, False,
                False))
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [Tag('introduced=9')], []),
                Arch('arm'), 9, False, False))

        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [Tag('introduced=14')], []),
                Arch('arm'), 9, False, False))
Ejemplo n.º 6
0
    def test_omit_arch(self) -> None:
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [], []), Arch('arm'), 9, False,
                False))
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [Tag('arm')], []), Arch('arm'),
                9, False, False))

        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [Tag('x86')], []), Arch('arm'),
                9, False, False))
    def test_omit_arch(self) -> None:
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, Tags(), []), Arch('arm'), 9,
                False, False))
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, Tags.from_strs(['arm']), []),
                Arch('arm'), 9, False, False))

        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, Tags.from_strs(['x86']), []),
                Arch('arm'), 9, False, False))
Ejemplo n.º 8
0
    def test_omit_private(self) -> None:
        self.assertFalse(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [], []), Arch('arm'), 9, False,
                False))

        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo_PRIVATE', None, [], []), Arch('arm'),
                9, False, False))
        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo_PLATFORM', None, [], []), Arch('arm'),
                9, False, False))

        self.assertTrue(
            symbolfile.should_omit_version(
                symbolfile.Version('foo', None, [Tag('platform-only')], []),
                Arch('arm'), 9, False, False))