Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tests/units/activities.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/units/activities.py')
-rwxr-xr-xtests/units/activities.py151
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,