diff options
Diffstat (limited to 'tests/units/activities.py')
-rwxr-xr-x | tests/units/activities.py | 151 |
1 files changed, 150 insertions, 1 deletions
diff --git a/tests/units/activities.py b/tests/units/activities.py index 9bd1152..707e05b 100755 --- a/tests/units/activities.py +++ b/tests/units/activities.py @@ -35,6 +35,135 @@ class ActivitiesTest(tests.Test): self.mounts.close() tests.Test.tearDown(self) + def test_Inotify_NoPermissions(self): + assert not exists('/foo/bar') + inotify = activities._Inotify(self.mounts.home_volume['context']) + inotify.setup(['/foo/bar']) + assert not exists('/foo/bar') + + def test_Inotify_Walkthrough(self): + self.touch('file') + os.makedirs('activity-1') + os.makedirs('activity-2/activity') + self.touch('activity-3/activity/activity.info') + self.touch('activity-4/activity/activity.info') + self.touch('activity-5/activity/activity.info') + + found = [] + lost = [] + + inotify = activities._Inotify(self.mounts.home_volume['context']) + inotify.found = found.append + inotify.lost = lost.append + inotify.setup(['.']) + self.job = coroutine.spawn(inotify.serve_forever) + coroutine.sleep(1) + + self.assertEqual( + sorted([ + tests.tmpdir + '/activity-3', + tests.tmpdir + '/activity-4', + tests.tmpdir + '/activity-5', + ]), + sorted(found)) + self.assertEqual([], lost) + del found[:] + + with file('activity-4/activity/activity.info', 'w') as f: + f.close() + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([], lost) + + with file('activity-2/activity/activity.info', 'w') as f: + f.close() + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/activity-2'], found) + self.assertEqual([], lost) + del found[:] + + os.makedirs('activity-6/activity') + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([], lost) + + with file('activity-6/activity/activity.info', 'w') as f: + f.close() + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/activity-6'], found) + self.assertEqual([], lost) + del found[:] + + os.unlink('activity-5/activity/activity.info') + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([tests.tmpdir + '/activity-5'], lost) + del lost[:] + + shutil.rmtree('activity-5') + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([], lost) + + shutil.rmtree('activity-4') + coroutine.sleep(.1) + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([tests.tmpdir + '/activity-4'], lost) + del lost[:] + + def test_Inotify_Moves(self): + self.touch('Activities/activity/activity/activity.info') + + found = [] + lost = [] + + inotify = activities._Inotify(self.mounts.home_volume['context']) + inotify.found = found.append + inotify.lost = lost.append + inotify.setup(['Activities']) + self.job = coroutine.spawn(inotify.serve_forever) + coroutine.sleep(.1) + + shutil.move('Activities/activity', '.') + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/Activities/activity'], found) + self.assertEqual([tests.tmpdir + '/Activities/activity'], lost) + del found[:] + del lost[:] + shutil.move('activity', 'Activities/') + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/Activities/activity'], found) + self.assertEqual([], lost) + del found[:] + del lost[:] + + shutil.move('Activities/activity/activity', 'Activities/activity/activity2') + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([tests.tmpdir + '/Activities/activity'], lost) + del found[:] + del lost[:] + shutil.move('Activities/activity/activity2', 'Activities/activity/activity') + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/Activities/activity'], found) + self.assertEqual([], lost) + del found[:] + del lost[:] + + shutil.move('Activities/activity/activity/activity.info', 'Activities/activity/activity/activity.info2') + coroutine.sleep(.1) + self.assertEqual([], found) + self.assertEqual([tests.tmpdir + '/Activities/activity'], lost) + del found[:] + del lost[:] + shutil.move('Activities/activity/activity/activity.info2', 'Activities/activity/activity/activity.info') + coroutine.sleep(.1) + self.assertEqual([tests.tmpdir + '/Activities/activity'], found) + self.assertEqual([], lost) + del found[:] + del lost[:] + def test_Checkin_Create(self): self.job = coroutine.spawn(activities.monitor, self.mounts.home_volume['context'], ['Activities']) @@ -47,13 +176,24 @@ class ActivitiesTest(tests.Test): os.makedirs('Activities/activity/activity') coroutine.sleep(1) + self.touch('Activities/activity/activity/icon.svg') + self.touch(('Activities/activity/activity/mimetypes.xml', [ + '<?xml version="1.0" encoding="UTF-8"?>', + '<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">', + '<mime-type type="application/x-foo-bar">', + '<comment xml:lang="en">foo-bar</comment>', + '<glob pattern="*.foo"/>', + '</mime-type>', + '</mime-info>', + ])) spec = ['[Activity]', 'name = HelloWorld', 'activity_version = 1', 'bundle_id = org.sugarlabs.HelloWorld', 'exec = sugar-activity activity.HelloWorldActivity', - 'icon = activity-helloworld', + 'icon = icon', 'license = GPLv2+', + 'mime_types = foo/bar', ] with file('Activities/activity/activity/activity.info', 'w') as f: coroutine.sleep(1) @@ -68,6 +208,15 @@ class ActivitiesTest(tests.Test): self.assertEqual( {'guid': 'org.sugarlabs.HelloWorld', 'title': {'en': 'title'}, 'keep': False, 'keep_impl': 2}, self.mounts.home_volume['context'].get('org.sugarlabs.HelloWorld').properties(['guid', 'title', 'keep', 'keep_impl'])) + assert exists('share/icons/sugar/scalable/mimetypes/foo-bar.svg') + self.assertEqual( + tests.tmpdir + '/Activities/activity/activity/icon.svg', + os.readlink('share/icons/sugar/scalable/mimetypes/foo-bar.svg')) + assert exists('share/mime/packages/%s.xml' % hashed_path) + self.assertEqual( + tests.tmpdir + '/Activities/activity/activity/mimetypes.xml', + os.readlink('share/mime/packages/%s.xml' % hashed_path)) + assert exists('share/mime/application/x-foo-bar.xml') def test_Checkin_Copy(self): self.job = coroutine.spawn(activities.monitor, |