diff options
Diffstat (limited to 'scripts/construct_context_test.py')
-rwxr-xr-x | scripts/construct_context_test.py | 279 |
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) |