When switching to GUI mode, don't even try to download the GUI interface; just run...
[zeroinstall.git] / tests / testlaunch.py
blob2f9ad52476a68090b0c431111d54935016d7a522
1 #!/usr/bin/env python2.3
2 import sys, tempfile, os, shutil, imp
3 from StringIO import StringIO
4 import unittest
6 foo_iface_uri = 'http://foo'
8 sys.path.insert(0, '..')
9 from zeroinstall.injector import trust, basedir, autopolicy, namespaces, model, iface_cache
11 class TestLaunch(unittest.TestCase):
12 def setUp(self):
13 self.config_home = tempfile.mktemp()
14 self.cache_home = tempfile.mktemp()
15 os.environ['XDG_CONFIG_HOME'] = self.config_home
16 os.environ['XDG_CACHE_HOME'] = self.cache_home
17 reload(basedir)
18 iface_cache.iface_cache.__init__()
20 os.mkdir(self.config_home, 0700)
21 os.mkdir(self.cache_home, 0700)
22 if os.environ.has_key('DISPLAY'):
23 del os.environ['DISPLAY']
25 def tearDown(self):
26 shutil.rmtree(self.config_home)
27 shutil.rmtree(self.cache_home)
29 def cache_iface(self, name, data):
30 cached_ifaces = basedir.save_cache_path('0install.net',
31 'interfaces')
33 f = file(os.path.join(cached_ifaces, model.escape(name)), 'w')
34 f.write(data)
35 f.close()
37 def run_0launch(self, args):
38 sys.argv = ['0launch'] + args
39 old_stdout = sys.stdout
40 old_stderr = sys.stderr
41 try:
42 sys.stdout = StringIO()
43 sys.stderr = StringIO()
44 ex = None
45 try:
46 imp.load_source('launch', '../0launch')
47 print "Finished"
48 except SystemExit:
49 pass
50 except Exception, ex:
51 pass
52 out = sys.stdout.getvalue()
53 err = sys.stderr.getvalue()
54 if ex is not None:
55 err += str(ex.__class__)
56 finally:
57 sys.stdout = old_stdout
58 sys.stderr = old_stderr
59 return (out, err)
61 def testHelp(self):
62 out, err = self.run_0launch([])
63 assert out.startswith("usage:")
64 assert not err
66 def testList(self):
67 out, err = self.run_0launch(['--list'])
68 assert not err
69 self.assertEquals("", out)
70 cached_ifaces = os.path.join(self.cache_home,
71 '0install.net', 'interfaces')
73 os.makedirs(cached_ifaces)
74 file(os.path.join(cached_ifaces, 'file%3a%2f%2ffoo'), 'w').close()
76 out, err = self.run_0launch(['--list'])
77 assert not err
78 self.assertEquals("file://foo\n", out)
80 out, err = self.run_0launch(['--list', 'foo'])
81 assert not err
82 self.assertEquals("file://foo\n", out)
84 out, err = self.run_0launch(['--list', 'bar'])
85 assert not err
86 self.assertEquals("", out)
88 out, err = self.run_0launch(['--list', 'one', 'two'])
89 assert not err
90 assert out.startswith("usage:")
92 def testVersion(self):
93 out, err = self.run_0launch(['--version'])
94 assert not err
95 assert out.startswith("0launch (zero-install)")
97 def testInvalid(self):
98 a = tempfile.NamedTemporaryFile()
99 out, err = self.run_0launch(['-q', a.name])
100 assert err
102 def testOK(self):
103 out, err = self.run_0launch(['--dry-run', 'http://foo'])
104 self.assertEquals("Would download 'http://foo'\n", out)
105 self.assertEquals("", err)
107 def testDisplay(self):
108 os.environ['DISPLAY'] = ':foo'
109 out, err = self.run_0launch(['--dry-run', 'http://foo'])
110 # Uses local copy of GUI
111 assert out.startswith("Would execute: ")
112 assert '0launch-gui' in out
113 self.assertEquals("", err)
115 def testRefreshDisplay(self):
116 os.environ['DISPLAY'] = ':foo'
117 out, err = self.run_0launch(['--dry-run', '--download-only',
118 '--refresh', 'http://foo'])
119 assert out.startswith("Would execute: ")
120 assert '0launch-gui' in out
121 self.assertEquals("", err)
123 def testNeedDownload(self):
124 policy = autopolicy.AutoPolicy(foo_iface_uri)
125 policy.save_config()
126 os.environ['DISPLAY'] = ':foo'
127 out, err = self.run_0launch(['--download-only', '--dry-run', 'Foo.xml'])
128 self.assertEquals("", err)
129 self.assertEquals("Finished\n", out)
131 def testHello(self):
132 out, err = self.run_0launch(['--dry-run', 'Foo.xml'])
133 self.assertEquals("", err)
134 assert out.startswith("Would execute: ")
136 out, err = self.run_0launch(['Foo.xml'])
137 # (Foo.xml tries to run a directory)
138 assert "Permission denied" in err
140 suite = unittest.makeSuite(TestLaunch)
141 if __name__ == '__main__':
142 sys.argv.append('-v')
143 unittest.main()