|
@@ -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)
|