APEX-specific symbols can be tagged as # apex
If a symbol is tagged as # apex, then it is exported when gen_stub_libs is invoked with --apex. Bug: 120638081 Test: python3 cc/test_gen_stub_libs.py Change-Id: I190bca35d1a4fb422b37d1be41a34de1ad64de6b
This commit is contained in:
@@ -165,92 +165,115 @@ class OmitVersionTest(unittest.TestCase):
|
||||
def test_omit_private(self):
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo_PRIVATE', None, [], []), 'arm', 9, False))
|
||||
gsl.Version('foo_PRIVATE', None, [], []), 'arm', 9, False, False))
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo_PLATFORM', None, [], []), 'arm', 9, False))
|
||||
gsl.Version('foo_PLATFORM', None, [], []), 'arm', 9, False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['platform-only'], []), 'arm', 9,
|
||||
False))
|
||||
False, False))
|
||||
|
||||
def test_omit_vndk(self):
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['vndk'], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, ['vndk'], []), 'arm', 9, False, False))
|
||||
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, True))
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, True, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['vndk'], []), 'arm', 9, True))
|
||||
gsl.Version('foo', None, ['vndk'], []), 'arm', 9, True, False))
|
||||
|
||||
def test_omit_apex(self):
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['apex'], []), 'arm', 9, False, False))
|
||||
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False, True))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['apex'], []), 'arm', 9, False, True))
|
||||
|
||||
def test_omit_arch(self):
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['arm'], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, ['arm'], []), 'arm', 9, False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['x86'], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, ['x86'], []), 'arm', 9, False, False))
|
||||
|
||||
def test_omit_api(self):
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False))
|
||||
gsl.Version('foo', None, [], []), 'arm', 9, False, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['introduced=9'], []), 'arm', 9,
|
||||
False))
|
||||
False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_version(
|
||||
gsl.Version('foo', None, ['introduced=14'], []), 'arm', 9,
|
||||
False))
|
||||
False, False))
|
||||
|
||||
|
||||
class OmitSymbolTest(unittest.TestCase):
|
||||
def test_omit_vndk(self):
|
||||
self.assertTrue(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['vndk']), 'arm', 9, False))
|
||||
gsl.Symbol('foo', ['vndk']), 'arm', 9, False, False))
|
||||
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, True))
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, True, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['vndk']), 'arm', 9, True))
|
||||
gsl.Symbol('foo', ['vndk']), 'arm', 9, True, False))
|
||||
|
||||
def test_omit_apex(self):
|
||||
self.assertTrue(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['apex']), 'arm', 9, False, False))
|
||||
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, False, True))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['apex']), 'arm', 9, False, True))
|
||||
|
||||
def test_omit_arch(self):
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, False))
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, False, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['arm']), 'arm', 9, False))
|
||||
gsl.Symbol('foo', ['arm']), 'arm', 9, False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['x86']), 'arm', 9, False))
|
||||
gsl.Symbol('foo', ['x86']), 'arm', 9, False, False))
|
||||
|
||||
def test_omit_api(self):
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, False))
|
||||
gsl.should_omit_symbol(gsl.Symbol('foo', []), 'arm', 9, False, False))
|
||||
self.assertFalse(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['introduced=9']), 'arm', 9, False))
|
||||
gsl.Symbol('foo', ['introduced=9']), 'arm', 9, False, False))
|
||||
|
||||
self.assertTrue(
|
||||
gsl.should_omit_symbol(
|
||||
gsl.Symbol('foo', ['introduced=14']), 'arm', 9, False))
|
||||
gsl.Symbol('foo', ['introduced=14']), 'arm', 9, False, False))
|
||||
|
||||
|
||||
class SymbolFileParseTest(unittest.TestCase):
|
||||
@@ -262,7 +285,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
# baz
|
||||
qux
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
self.assertIsNone(parser.current_line)
|
||||
|
||||
self.assertEqual('foo', parser.next_line().strip())
|
||||
@@ -287,7 +310,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
VERSION_2 {
|
||||
} VERSION_1; # asdf
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
|
||||
parser.next_line()
|
||||
version = parser.parse_version()
|
||||
@@ -311,7 +334,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
input_file = io.StringIO(textwrap.dedent("""\
|
||||
VERSION_1 {
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.next_line()
|
||||
with self.assertRaises(gsl.ParseError):
|
||||
parser.parse_version()
|
||||
@@ -322,7 +345,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
foo:
|
||||
}
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.next_line()
|
||||
with self.assertRaises(gsl.ParseError):
|
||||
parser.parse_version()
|
||||
@@ -332,7 +355,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
foo;
|
||||
bar; # baz qux
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
|
||||
parser.next_line()
|
||||
symbol = parser.parse_symbol()
|
||||
@@ -350,7 +373,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
*;
|
||||
};
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.next_line()
|
||||
with self.assertRaises(gsl.ParseError):
|
||||
parser.parse_version()
|
||||
@@ -362,7 +385,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
*;
|
||||
};
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.next_line()
|
||||
version = parser.parse_version()
|
||||
self.assertEqual([], version.symbols)
|
||||
@@ -373,7 +396,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
foo
|
||||
};
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.next_line()
|
||||
with self.assertRaises(gsl.ParseError):
|
||||
parser.parse_version()
|
||||
@@ -381,7 +404,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
def test_parse_fails_invalid_input(self):
|
||||
with self.assertRaises(gsl.ParseError):
|
||||
input_file = io.StringIO('foo')
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
parser.parse()
|
||||
|
||||
def test_parse(self):
|
||||
@@ -402,7 +425,7 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
qwerty;
|
||||
} VERSION_1;
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
versions = parser.parse()
|
||||
|
||||
expected = [
|
||||
@@ -418,6 +441,30 @@ class SymbolFileParseTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(expected, versions)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
class GeneratorTest(unittest.TestCase):
|
||||
def test_omit_version(self):
|
||||
@@ -425,7 +472,7 @@ class GeneratorTest(unittest.TestCase):
|
||||
# OmitVersionTest, PrivateVersionTest, and SymbolPresenceTest.
|
||||
src_file = io.StringIO()
|
||||
version_file = io.StringIO()
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False, False)
|
||||
|
||||
version = gsl.Version('VERSION_PRIVATE', None, [], [
|
||||
gsl.Symbol('foo', []),
|
||||
@@ -453,7 +500,7 @@ class GeneratorTest(unittest.TestCase):
|
||||
# SymbolPresenceTest.
|
||||
src_file = io.StringIO()
|
||||
version_file = io.StringIO()
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False, False)
|
||||
|
||||
version = gsl.Version('VERSION_1', None, [], [
|
||||
gsl.Symbol('foo', ['x86']),
|
||||
@@ -476,10 +523,17 @@ class GeneratorTest(unittest.TestCase):
|
||||
self.assertEqual('', src_file.getvalue())
|
||||
self.assertEqual('', version_file.getvalue())
|
||||
|
||||
version = gsl.Version('VERSION_1', None, [], [
|
||||
gsl.Symbol('foo', ['apex']),
|
||||
])
|
||||
generator.write_version(version)
|
||||
self.assertEqual('', src_file.getvalue())
|
||||
self.assertEqual('', version_file.getvalue())
|
||||
|
||||
def test_write(self):
|
||||
src_file = io.StringIO()
|
||||
version_file = io.StringIO()
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False, False)
|
||||
|
||||
versions = [
|
||||
gsl.Version('VERSION_1', None, [], [
|
||||
@@ -554,18 +608,19 @@ class IntegrationTest(unittest.TestCase):
|
||||
VERSION_4 { # versioned=9
|
||||
wibble;
|
||||
wizzes; # vndk
|
||||
waggle; # apex
|
||||
} VERSION_2;
|
||||
|
||||
VERSION_5 { # versioned=14
|
||||
wobble;
|
||||
} VERSION_4;
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, api_map, 'arm', 9, False)
|
||||
parser = gsl.SymbolFileParser(input_file, api_map, 'arm', 9, False, False)
|
||||
versions = parser.parse()
|
||||
|
||||
src_file = io.StringIO()
|
||||
version_file = io.StringIO()
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False)
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False, False)
|
||||
generator.write(versions)
|
||||
|
||||
expected_src = textwrap.dedent("""\
|
||||
@@ -610,12 +665,12 @@ class IntegrationTest(unittest.TestCase):
|
||||
*;
|
||||
};
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, api_map, 'arm', 9001, False)
|
||||
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)
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9001, False, False)
|
||||
generator.write(versions)
|
||||
|
||||
expected_src = textwrap.dedent("""\
|
||||
@@ -658,13 +713,84 @@ class IntegrationTest(unittest.TestCase):
|
||||
} VERSION_2;
|
||||
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False)
|
||||
parser = gsl.SymbolFileParser(input_file, {}, 'arm', 16, False, False)
|
||||
|
||||
with self.assertRaises(gsl.MultiplyDefinedSymbolError) as cm:
|
||||
parser.parse()
|
||||
self.assertEquals(['bar', 'foo'],
|
||||
cm.exception.multiply_defined_symbols)
|
||||
|
||||
def test_integration_with_apex(self):
|
||||
api_map = {
|
||||
'O': 9000,
|
||||
'P': 9001,
|
||||
}
|
||||
|
||||
input_file = io.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
|
||||
waggle; # apex
|
||||
} VERSION_2;
|
||||
|
||||
VERSION_5 { # versioned=14
|
||||
wobble;
|
||||
} VERSION_4;
|
||||
"""))
|
||||
parser = gsl.SymbolFileParser(input_file, api_map, 'arm', 9, False, True)
|
||||
versions = parser.parse()
|
||||
|
||||
src_file = io.StringIO()
|
||||
version_file = io.StringIO()
|
||||
generator = gsl.Generator(src_file, version_file, 'arm', 9, False, True)
|
||||
generator.write(versions)
|
||||
|
||||
expected_src = textwrap.dedent("""\
|
||||
int foo = 0;
|
||||
void baz() {}
|
||||
void qux() {}
|
||||
void wibble() {}
|
||||
void waggle() {}
|
||||
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;
|
||||
waggle;
|
||||
} VERSION_2;
|
||||
""")
|
||||
self.assertEqual(expected_version, version_file.getvalue())
|
||||
|
||||
def main():
|
||||
suite = unittest.TestLoader().loadTestsFromName(__name__)
|
||||
|
Reference in New Issue
Block a user