diff --git a/qubesappmenus/tests.py b/qubesappmenus/tests.py index bc0d587..059dcc3 100644 --- a/qubesappmenus/tests.py +++ b/qubesappmenus/tests.py @@ -32,10 +32,13 @@ import xdg.DesktopEntry import qubes import qubes.tests import qubes.tests.extra +import qubes.vm.appvm +import qubes.vm.templatevm import qubesappmenus import qubesappmenus.receive import qubesimgconverter + class TestApp(object): labels = {1: qubes.Label(1, '0xcc0000', 'red')} @@ -211,6 +214,7 @@ class TC_00_Appmenus(qubes.tests.QubesTestCase): } self.assertEquals(expected_appmenus, appmenus) + class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase): def setUp(self): super(TC_10_AppmenusIntegration, self).setUp() @@ -231,26 +235,28 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase): whitelisted = [x.rstrip() for x in f.readlines()] return whitelisted - def test_000_created(self): - whitelist_path = os.path.join(self.vm.dir_path, + def test_000_created(self, vm=None): + if vm is None: + vm = self.vm + whitelist_path = os.path.join(vm.dir_path, qubesappmenus.AppmenusSubdirs.whitelist) whitelisted = self.get_whitelist(whitelist_path) - self.assertPathExists(self.appmenus.appmenus_dir(self.vm)) - appmenus = os.listdir(self.appmenus.appmenus_dir(self.vm)) - self.assertTrue(all(x.startswith(self.vm.name + '-') for x in appmenus)) - appmenus = [x[len(self.vm.name) + 1:] for x in appmenus] + self.assertPathExists(self.appmenus.appmenus_dir(vm)) + appmenus = os.listdir(self.appmenus.appmenus_dir(vm)) + self.assertTrue(all(x.startswith(vm.name + '-') for x in appmenus)) + appmenus = [x[len(vm.name) + 1:] for x in appmenus] self.assertIn('vm.directory', appmenus) appmenus.remove('vm.directory') self.assertIn('qubes-appmenu-select.desktop', appmenus) appmenus.remove('qubes-appmenu-select.desktop') self.assertEquals(set(whitelisted), set(appmenus)) - self.assertPathExists(self.appmenus.icons_dir(self.vm)) - appicons = os.listdir(self.appmenus.icons_dir(self.vm)) + self.assertPathExists(self.appmenus.icons_dir(vm)) + appicons = os.listdir(self.appmenus.icons_dir(vm)) whitelisted_icons = set() for appmenu in whitelisted: desktop = xdg.DesktopEntry.DesktopEntry( - os.path.join(self.appmenus.appmenus_dir(self.vm), - '-'.join((self.vm.name, appmenu)))) + os.path.join(self.appmenus.appmenus_dir(vm), + '-'.join((vm.name, appmenu)))) if desktop.getIcon(): whitelisted_icons.add(os.path.basename(desktop.getIcon())) self.assertEquals(set(whitelisted_icons), set(appicons)) @@ -289,6 +295,32 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase): xdg.BaseDirectory.xdg_data_home, subdir, '-'.join([self.vm.name, appmenu]))) + def test_003_created_template_empty(self): + tpl = self.app.add_new_vm(qubes.vm.templatevm.TemplateVM, + name=self.make_vm_name('tpl'), label='red') + tpl.create_on_disk() + self.assertPathExists(self.appmenus.templates_dir(tpl)) + self.assertPathExists(self.appmenus.template_icons_dir(tpl)) + + def test_004_created_template_from_other(self): + tpl = self.app.add_new_vm(qubes.vm.templatevm.TemplateVM, + name=self.make_vm_name('tpl'), label='red') + tpl.create_on_disk(source_template=self.app.default_template) + self.assertPathExists(self.appmenus.templates_dir(tpl)) + self.assertPathExists(self.appmenus.template_icons_dir(tpl)) + self.assertPathExists(os.path.join(tpl.dir_path, + qubesappmenus.AppmenusSubdirs.whitelist)) + + for appmenu in os.listdir(self.appmenus.templates_dir( + self.app.default_template)): + self.assertPathExists(os.path.join( + self.appmenus.templates_dir(tpl), appmenu)) + + for appicon in os.listdir(self.appmenus.template_icons_dir( + self.app.default_template)): + self.assertPathExists(os.path.join( + self.appmenus.template_icons_dir(tpl), appicon)) + def get_image_color(self, path, expected_color): """Return mean color of the image as (r, g, b) in float""" image = qubesimgconverter.Image.load_from_file(path) @@ -320,18 +352,29 @@ class TC_10_AppmenusIntegration(qubes.tests.extra.ExtraTestCase): self.fail( "Icon {} is not colored as {}".format(path, expected_color)) - def test_010_icon_color(self): - icons_dir = self.appmenus.icons_dir(self.vm) + def test_010_icon_color(self, vm=None): + if vm is None: + vm = self.vm + icons_dir = self.appmenus.icons_dir(vm) appicons = os.listdir(icons_dir) for icon in appicons: self.assertIconColor(os.path.join(icons_dir, icon), - self.vm.label.color) + vm.label.color) def test_011_icon_color_label_change(self): """Regression test for #1606""" self.vm.label = 'green' self.test_010_icon_color() + def test_020_clone(self): + vm2 = self.app.add_new_vm(qubes.vm.appvm.AppVM, + name=self.make_vm_name('vm2'), label='green') + + vm2.clone_properties(self.vm) + vm2.clone_disk_files(self.vm) + self.test_000_created(vm=vm2) + self.test_010_icon_color(vm=vm2) + def list_tests(): return (