aboutsummaryrefslogtreecommitdiffstats
path: root/cc/test_gen_stub_libs.py
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2017-03-28 16:04:25 -0700
committerDan Albert <danalbert@google.com>2017-04-28 16:11:13 -0700
commit3f6fb2db5f66bcec032ec0a72c241a162089461d (patch)
tree3c413b11f9f5c8ae5c92910ce6ea94b0a3c1e457 /cc/test_gen_stub_libs.py
parent49927d29d50132b80d1f237682f7ffe44a8a5b74 (diff)
downloadandroid_build_soong-3f6fb2db5f66bcec032ec0a72c241a162089461d.tar.gz
android_build_soong-3f6fb2db5f66bcec032ec0a72c241a162089461d.tar.bz2
android_build_soong-3f6fb2db5f66bcec032ec0a72c241a162089461d.zip
Add support for named versions in NDK map files.
Test: nose2 Test: make checkbuild Bug: None Change-Id: Ic32cfb3e0db767f695b617c787733a6ef75030aa
Diffstat (limited to 'cc/test_gen_stub_libs.py')
-rwxr-xr-xcc/test_gen_stub_libs.py125
1 files changed, 114 insertions, 11 deletions
diff --git a/cc/test_gen_stub_libs.py b/cc/test_gen_stub_libs.py
index 8611ef3c..4df6cf8c 100755
--- a/cc/test_gen_stub_libs.py
+++ b/cc/test_gen_stub_libs.py
@@ -25,6 +25,15 @@ import gen_stub_libs as gsl
# pylint: disable=missing-docstring
+class DecodeApiLevelTest(unittest.TestCase):
+ def test_decode_api_level(self):
+ self.assertEqual(9, gsl.decode_api_level('9', {}))
+ self.assertEqual(9000, gsl.decode_api_level('O', {'O': 9000}))
+
+ with self.assertRaises(KeyError):
+ gsl.decode_api_level('O', {})
+
+
class TagsTest(unittest.TestCase):
def test_get_tags_no_tags(self):
self.assertEqual([], gsl.get_tags(''))
@@ -34,12 +43,59 @@ class TagsTest(unittest.TestCase):
self.assertEqual(['foo', 'bar'], gsl.get_tags('# foo bar'))
self.assertEqual(['bar', 'baz'], gsl.get_tags('foo # bar baz'))
+ def test_split_tag(self):
+ self.assertTupleEqual(('foo', 'bar'), gsl.split_tag('foo=bar'))
+ self.assertTupleEqual(('foo', 'bar=baz'), gsl.split_tag('foo=bar=baz'))
+ with self.assertRaises(ValueError):
+ gsl.split_tag('foo')
+
def test_get_tag_value(self):
self.assertEqual('bar', gsl.get_tag_value('foo=bar'))
self.assertEqual('bar=baz', gsl.get_tag_value('foo=bar=baz'))
with self.assertRaises(ValueError):
gsl.get_tag_value('foo')
+ def test_is_api_level_tag(self):
+ self.assertTrue(gsl.is_api_level_tag('introduced=24'))
+ self.assertTrue(gsl.is_api_level_tag('introduced-arm=24'))
+ self.assertTrue(gsl.is_api_level_tag('versioned=24'))
+
+ # Shouldn't try to process things that aren't a key/value tag.
+ self.assertFalse(gsl.is_api_level_tag('arm'))
+ self.assertFalse(gsl.is_api_level_tag('introduced'))
+ self.assertFalse(gsl.is_api_level_tag('versioned'))
+
+ # We don't support arch specific `versioned` tags.
+ self.assertFalse(gsl.is_api_level_tag('versioned-arm=24'))
+
+ def test_decode_api_level_tags(self):
+ api_map = {
+ 'O': 9000,
+ 'P': 9001,
+ }
+
+ tags = [
+ 'introduced=9',
+ 'introduced-arm=14',
+ 'versioned=16',
+ 'arm',
+ 'introduced=O',
+ 'introduced=P',
+ ]
+ expected_tags = [
+ 'introduced=9',
+ 'introduced-arm=14',
+ 'versioned=16',
+ 'arm',
+ 'introduced=9000',
+ 'introduced=9001',
+ ]
+ self.assertListEqual(
+ expected_tags, gsl.decode_api_level_tags(tags, api_map))
+
+ with self.assertRaises(gsl.ParseError):
+ gsl.decode_api_level_tags(['introduced=O'], {})
+
class PrivateVersionTest(unittest.TestCase):
def test_version_is_private(self):
@@ -151,7 +207,7 @@ class SymbolFileParseTest(unittest.TestCase):
# baz
qux
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
self.assertIsNone(parser.current_line)
self.assertEqual('foo', parser.next_line().strip())
@@ -176,7 +232,7 @@ class SymbolFileParseTest(unittest.TestCase):
VERSION_2 {
} VERSION_1; # asdf
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
version = parser.parse_version()
@@ -200,7 +256,7 @@ class SymbolFileParseTest(unittest.TestCase):
input_file = cStringIO.StringIO(textwrap.dedent("""\
VERSION_1 {
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
with self.assertRaises(gsl.ParseError):
parser.parse_version()
@@ -211,7 +267,7 @@ class SymbolFileParseTest(unittest.TestCase):
foo:
}
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
with self.assertRaises(gsl.ParseError):
parser.parse_version()
@@ -221,7 +277,7 @@ class SymbolFileParseTest(unittest.TestCase):
foo;
bar; # baz qux
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
symbol = parser.parse_symbol()
@@ -239,7 +295,7 @@ class SymbolFileParseTest(unittest.TestCase):
*;
};
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
with self.assertRaises(gsl.ParseError):
parser.parse_version()
@@ -251,7 +307,7 @@ class SymbolFileParseTest(unittest.TestCase):
*;
};
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
version = parser.parse_version()
self.assertEqual([], version.symbols)
@@ -262,7 +318,7 @@ class SymbolFileParseTest(unittest.TestCase):
foo
};
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.next_line()
with self.assertRaises(gsl.ParseError):
parser.parse_version()
@@ -270,7 +326,7 @@ class SymbolFileParseTest(unittest.TestCase):
def test_parse_fails_invalid_input(self):
with self.assertRaises(gsl.ParseError):
input_file = cStringIO.StringIO('foo')
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
parser.parse()
def test_parse(self):
@@ -291,7 +347,7 @@ class SymbolFileParseTest(unittest.TestCase):
qwerty;
} VERSION_1;
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, {})
versions = parser.parse()
expected = [
@@ -408,11 +464,18 @@ class GeneratorTest(unittest.TestCase):
class IntegrationTest(unittest.TestCase):
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:
*;
};
@@ -436,7 +499,7 @@ class IntegrationTest(unittest.TestCase):
wobble;
} VERSION_4;
"""))
- parser = gsl.SymbolFileParser(input_file)
+ parser = gsl.SymbolFileParser(input_file, api_map)
versions = parser.parse()
src_file = cStringIO.StringIO()
@@ -469,6 +532,46 @@ class IntegrationTest(unittest.TestCase):
""")
self.assertEqual(expected_version, version_file.getvalue())
+ def test_integration_future_api(self):
+ api_map = {
+ 'O': 9000,
+ 'P': 9001,
+ 'Q': 9002,
+ }
+
+ input_file = cStringIO.StringIO(textwrap.dedent("""\
+ VERSION_1 {
+ global:
+ foo; # introduced=O
+ bar; # introduced=P
+ baz; # introduced=Q
+ local:
+ *;
+ };
+ """))
+ 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', 9001, 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())
+
def main():
suite = unittest.TestLoader().loadTestsFromName(__name__)