Make 0alias work with binary files under Python 3
[zeroinstall.git] / tests / testalias.py
blobef62ff0300e8cbb1d75fa6b796d0fed1779a7637
1 #!/usr/bin/env python
2 from basetest import BaseTest, StringIO
3 import sys, tempfile, os
4 import unittest
6 sys.path.insert(0, '..')
8 from zeroinstall import alias
10 expected_script = """#!/bin/sh
11 exec 0launch 'http://example.com/foo.xml' "$@"
12 """
14 old_script = """#!/bin/sh
15 if [ "$*" = "--versions" ]; then
16 exec 0launch -gd 'http://example.com/foo.xml' "$@"
17 else
18 exec 0launch 'http://example.com/foo.xml' "$@"
20 """
22 expected_script_main = """#!/bin/sh
23 exec 0launch --main 'a'\\'''\\''\\test' 'http://example.com/foo.xml' "$@"
24 """
26 expected_script_command = """#!/bin/sh
27 exec 0launch --command 'a'\\'''\\''\\test' 'http://example.com/foo.xml' "$@"
28 """
30 old_script_main = """#!/bin/sh
31 if [ "$*" = "--versions" ]; then
32 exec 0launch -gd 'http://example.com/foo.xml' "$@"
33 else
34 exec 0launch --main 'a'\\'''\\''\\test' 'http://example.com/foo.xml' "$@"
36 """
38 class TestAlias(BaseTest):
39 def setUp(self):
40 BaseTest.setUp(self)
42 def testWrite(self):
43 buf = StringIO()
44 alias.write_script(buf, 'http://example.com/foo.xml', None)
45 self.assertEqual(expected_script, buf.getvalue())
47 buf = StringIO()
48 alias.write_script(buf, 'http://example.com/foo.xml', 'a\'\'\\test')
49 self.assertEqual(expected_script_main, buf.getvalue())
51 buf = StringIO()
52 alias.write_script(buf, 'http://example.com/foo.xml', command = 'a\'\'\\test')
53 self.assertEqual(expected_script_command, buf.getvalue())
55 def testParse(self):
56 tmp = tempfile.NamedTemporaryFile(mode = 'wt')
57 tmp.write(expected_script)
58 tmp.flush()
59 tmp.seek(0)
60 uri, main = alias.parse_script(tmp.name)
61 self.assertEqual('http://example.com/foo.xml', uri)
62 self.assertEqual(None, main)
64 tmp = tempfile.NamedTemporaryFile(mode = 'wt')
65 tmp.write(expected_script_main)
66 tmp.flush()
67 tmp.seek(0)
68 uri, main = alias.parse_script(tmp.name)
69 self.assertEqual('http://example.com/foo.xml', uri)
70 self.assertEqual('a\'\'\\test', main)
72 tmp = tempfile.NamedTemporaryFile(mode = 'wt')
73 tmp.write(expected_script_command)
74 tmp.flush()
75 tmp.seek(0)
76 info = alias.parse_script(tmp.name)
77 self.assertEqual('http://example.com/foo.xml', info.uri)
78 self.assertEqual('a\'\'\\test', info.command)
79 self.assertEqual(None, info.main)
81 def testParseOld(self):
82 with tempfile.NamedTemporaryFile(mode = 'wt') as tmp:
83 tmp.write(old_script)
84 tmp.flush()
85 tmp.seek(0)
86 uri, main = alias.parse_script(tmp.name)
87 self.assertEqual('http://example.com/foo.xml', uri)
88 self.assertEqual(None, main)
90 with tempfile.NamedTemporaryFile(mode = 'wt') as tmp:
91 tmp.write(old_script_main)
92 tmp.flush()
93 tmp.seek(0)
94 uri, main = alias.parse_script(tmp.name)
95 self.assertEqual('http://example.com/foo.xml', uri)
96 self.assertEqual('a\'\'\\test', main)
98 def testParseException(self):
99 tmp = tempfile.NamedTemporaryFile(mode = 'wb', delete = False)
100 tmp.write(bytes([240]))
101 tmp.close()
102 try:
103 alias.parse_script(tmp.name)
104 assert False
105 except alias.NotAnAliasScript:
106 pass
107 os.unlink(tmp.name)
109 tmp = tempfile.NamedTemporaryFile(mode = 'wt')
110 tmp.write('hi' + expected_script)
111 tmp.flush()
112 tmp.seek(0)
113 try:
114 alias.parse_script(tmp.name)
115 assert False
116 except alias.NotAnAliasScript:
117 pass
119 tmp = tempfile.NamedTemporaryFile(mode = 'wt')
120 tmp.write(expected_script_command.replace('command', 'bob'))
121 tmp.flush()
122 tmp.seek(0)
123 try:
124 alias.parse_script(tmp.name)
125 assert False
126 except alias.NotAnAliasScript as ex:
127 assert 'bob' in str(ex)
128 pass
130 if __name__ == '__main__':
131 unittest.main()