summaryrefslogtreecommitdiff
path: root/scripts/construct_context_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/construct_context_test.py')
-rwxr-xr-xscripts/construct_context_test.py279
1 files changed, 233 insertions, 46 deletions
diff --git a/scripts/construct_context_test.py b/scripts/construct_context_test.py
index 2ff5ac54a..34a0e16db 100755
--- a/scripts/construct_context_test.py
+++ b/scripts/construct_context_test.py
@@ -24,62 +24,249 @@ import construct_context as cc
sys.dont_write_bytecode = True
-def construct_contexts(arglist):
- args = cc.parse_args(arglist)
- return cc.construct_contexts(args)
-
-
-contexts = [
- '--host-context-for-sdk',
- '28',
- 'PCL[out/zdir/z.jar]',
- '--target-context-for-sdk',
- '28',
- 'PCL[/system/z.jar]',
- '--host-context-for-sdk',
- '29',
- 'PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]',
- '--target-context-for-sdk',
- '29',
- 'PCL[/system/x.jar]#PCL[/product/y.jar]',
- '--host-context-for-sdk',
- 'any',
- 'PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]',
- '--target-context-for-sdk',
- 'any',
- 'PCL[/system/a.jar]#PCL[/product/b.jar]',
-]
-
-#pylint: disable=line-too-long
+CONTEXT_JSON = {
+ '28': [
+ {
+ 'Name': 'z',
+ 'Optional': False,
+ 'Host': 'out/zdir/z.jar',
+ 'Device': '/system/z.jar',
+ 'Subcontexts': [],
+ },
+ ],
+ '29': [
+ {
+ 'Name': 'x',
+ 'Optional': False,
+ 'Host': 'out/xdir/x.jar',
+ 'Device': '/system/x.jar',
+ 'Subcontexts': [],
+ },
+ {
+ 'Name': 'y',
+ 'Optional': False,
+ 'Host': 'out/ydir/y.jar',
+ 'Device': '/product/y.jar',
+ 'Subcontexts': [],
+ },
+ ],
+ 'any': [
+ {
+ 'Name': 'a',
+ 'Optional': False,
+ 'Host': 'out/adir/a.jar',
+ 'Device': '/system/a.jar',
+ 'Subcontexts': [
+ { # Not installed optional, being the only child.
+ 'Name': 'a1',
+ 'Optional': True,
+ 'Host': 'out/a1dir/a1.jar',
+ 'Device': '/product/a1.jar',
+ 'Subcontexts': [],
+ },
+ ],
+ },
+ {
+ 'Name': 'b',
+ 'Optional': True,
+ 'Host': 'out/bdir/b.jar',
+ 'Device': '/product/b.jar',
+ 'Subcontexts': [
+ { # Not installed but required.
+ 'Name': 'b1',
+ 'Optional': False,
+ 'Host': 'out/b1dir/b1.jar',
+ 'Device': '/product/b1.jar',
+ 'Subcontexts': [],
+ },
+ { # Installed optional.
+ 'Name': 'b2',
+ 'Optional': True,
+ 'Host': 'out/b2dir/b2.jar',
+ 'Device': '/product/b2.jar',
+ 'Subcontexts': [],
+ },
+ { # Not installed optional.
+ 'Name': 'b3',
+ 'Optional': True,
+ 'Host': 'out/b3dir/b3.jar',
+ 'Device': '/product/b3.jar',
+ 'Subcontexts': [],
+ },
+ { # Installed optional with one more level of nested deps.
+ 'Name': 'b4',
+ 'Optional': True,
+ 'Host': 'out/b4dir/b4.jar',
+ 'Device': '/product/b4.jar',
+ 'Subcontexts': [
+ {
+ 'Name': 'b41',
+ 'Optional': True,
+ 'Host': 'out/b41dir/b41.jar',
+ 'Device': '/product/b41.jar',
+ 'Subcontexts': [],
+ },
+ {
+ 'Name': 'b42',
+ 'Optional': True,
+ 'Host': 'out/b42dir/b42.jar',
+ 'Device': '/product/b42.jar',
+ 'Subcontexts': [],
+ },
+ ],
+ },
+ ],
+ },
+ { # Not installed optional, at the top-level.
+ 'Name': 'c',
+ 'Optional': True,
+ 'Host': 'out/cdir/c.jar',
+ 'Device': '/product/c.jar',
+ 'Subcontexts': [],
+ },
+ ],
+}
+
+
+PRODUCT_PACKAGES = ['a', 'b', 'b2', 'b4', 'b41', 'b42', 'x', 'y', 'z']
+
+
+def construct_context_args(target_sdk):
+ return cc.construct_context_args(target_sdk, CONTEXT_JSON, PRODUCT_PACKAGES)
+
+
class ConstructContextTest(unittest.TestCase):
+ def test_construct_context_27(self):
+ actual = construct_context_args('27')
+ # The order matters.
+ expected = (
+ 'class_loader_context_arg='
+ '--class-loader-context=PCL[]{'
+ 'PCL[out/xdir/x.jar]#'
+ 'PCL[out/ydir/y.jar]#'
+ 'PCL[out/zdir/z.jar]#'
+ 'PCL[out/adir/a.jar]#'
+ 'PCL[out/bdir/b.jar]{'
+ 'PCL[out/b1dir/b1.jar]#'
+ 'PCL[out/b2dir/b2.jar]#'
+ 'PCL[out/b4dir/b4.jar]{'
+ 'PCL[out/b41dir/b41.jar]#'
+ 'PCL[out/b42dir/b42.jar]'
+ '}'
+ '}'
+ '}'
+ ' ; '
+ 'stored_class_loader_context_arg='
+ '--stored-class-loader-context=PCL[]{'
+ 'PCL[/system/x.jar]#'
+ 'PCL[/product/y.jar]#'
+ 'PCL[/system/z.jar]#'
+ 'PCL[/system/a.jar]#'
+ 'PCL[/product/b.jar]{'
+ 'PCL[/product/b1.jar]#'
+ 'PCL[/product/b2.jar]#'
+ 'PCL[/product/b4.jar]{'
+ 'PCL[/product/b41.jar]#'
+ 'PCL[/product/b42.jar]'
+ '}'
+ '}'
+ '}')
+ self.assertEqual(actual, expected)
def test_construct_context_28(self):
- args = ['--target-sdk-version', '28'] + contexts
- result = construct_contexts(args)
- expect = (
- 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/xdir/x.jar]#PCL[out/ydir/y.jar]#PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}'
+ actual = construct_context_args('28')
+ expected = (
+ 'class_loader_context_arg='
+ '--class-loader-context=PCL[]{'
+ 'PCL[out/xdir/x.jar]#'
+ 'PCL[out/ydir/y.jar]#'
+ 'PCL[out/adir/a.jar]#'
+ 'PCL[out/bdir/b.jar]{'
+ 'PCL[out/b1dir/b1.jar]#'
+ 'PCL[out/b2dir/b2.jar]#'
+ 'PCL[out/b4dir/b4.jar]{'
+ 'PCL[out/b41dir/b41.jar]#'
+ 'PCL[out/b42dir/b42.jar]'
+ '}'
+ '}'
+ '}'
' ; '
- 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/x.jar]#PCL[/product/y.jar]#PCL[/system/a.jar]#PCL[/product/b.jar]}')
- self.assertEqual(result, expect)
+ 'stored_class_loader_context_arg='
+ '--stored-class-loader-context=PCL[]{'
+ 'PCL[/system/x.jar]#'
+ 'PCL[/product/y.jar]#'
+ 'PCL[/system/a.jar]#'
+ 'PCL[/product/b.jar]{'
+ 'PCL[/product/b1.jar]#'
+ 'PCL[/product/b2.jar]#'
+ 'PCL[/product/b4.jar]{'
+ 'PCL[/product/b41.jar]#'
+ 'PCL[/product/b42.jar]'
+ '}'
+ '}'
+ '}')
+ self.assertEqual(actual, expected)
def test_construct_context_29(self):
- args = ['--target-sdk-version', '29'] + contexts
- result = construct_contexts(args)
- expect = (
- 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}'
+ actual = construct_context_args('29')
+ expected = (
+ 'class_loader_context_arg='
+ '--class-loader-context=PCL[]{'
+ 'PCL[out/adir/a.jar]#'
+ 'PCL[out/bdir/b.jar]{'
+ 'PCL[out/b1dir/b1.jar]#'
+ 'PCL[out/b2dir/b2.jar]#'
+ 'PCL[out/b4dir/b4.jar]{'
+ 'PCL[out/b41dir/b41.jar]#'
+ 'PCL[out/b42dir/b42.jar]'
+ '}'
+ '}'
+ '}'
' ; '
- 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}')
- self.assertEqual(result, expect)
+ 'stored_class_loader_context_arg='
+ '--stored-class-loader-context=PCL[]{'
+ 'PCL[/system/a.jar]#'
+ 'PCL[/product/b.jar]{'
+ 'PCL[/product/b1.jar]#'
+ 'PCL[/product/b2.jar]#'
+ 'PCL[/product/b4.jar]{'
+ 'PCL[/product/b41.jar]#'
+ 'PCL[/product/b42.jar]'
+ '}'
+ '}'
+ '}')
+ self.assertEqual(actual, expected)
def test_construct_context_S(self):
- args = ['--target-sdk-version', 'S'] + contexts
- result = construct_contexts(args)
- expect = (
- 'class_loader_context_arg=--class-loader-context=PCL[]{PCL[out/adir/a.jar]#PCL[out/bdir/b.jar]}'
+ actual = construct_context_args('S')
+ expected = (
+ 'class_loader_context_arg='
+ '--class-loader-context=PCL[]{'
+ 'PCL[out/adir/a.jar]#'
+ 'PCL[out/bdir/b.jar]{'
+ 'PCL[out/b1dir/b1.jar]#'
+ 'PCL[out/b2dir/b2.jar]#'
+ 'PCL[out/b4dir/b4.jar]{'
+ 'PCL[out/b41dir/b41.jar]#'
+ 'PCL[out/b42dir/b42.jar]'
+ '}'
+ '}'
+ '}'
' ; '
- 'stored_class_loader_context_arg=--stored-class-loader-context=PCL[]{PCL[/system/a.jar]#PCL[/product/b.jar]}')
- self.assertEqual(result, expect)
-#pylint: enable=line-too-long
+ 'stored_class_loader_context_arg='
+ '--stored-class-loader-context=PCL[]{'
+ 'PCL[/system/a.jar]#'
+ 'PCL[/product/b.jar]{'
+ 'PCL[/product/b1.jar]#'
+ 'PCL[/product/b2.jar]#'
+ 'PCL[/product/b4.jar]{'
+ 'PCL[/product/b41.jar]#'
+ 'PCL[/product/b42.jar]'
+ '}'
+ '}'
+ '}')
+ self.assertEqual(actual, expected)
+
if __name__ == '__main__':
unittest.main(verbosity=2)