1 #!/usr/bin/env python2.3
2 import sys
, tempfile
, os
, shutil
4 from StringIO
import StringIO
6 sys
.path
.insert(0, '..')
7 from zeroinstall
.injector
import model
, qdom
9 class TestModel(unittest
.TestCase
):
11 assert model
.network_offline
in model
.network_levels
12 assert model
.network_minimal
in model
.network_levels
13 assert model
.network_full
in model
.network_levels
15 def testStabilities(self
):
16 assert 'insecure' in model
.stability_levels
17 assert 'buggy' in model
.stability_levels
18 assert 'developer' in model
.stability_levels
19 assert 'testing' in model
.stability_levels
20 assert 'stable' in model
.stability_levels
21 assert 'preferred' in model
.stability_levels
25 self
.assertEquals("", model
.escape(""))
26 self
.assertEquals("hello", model
.escape("hello"))
27 self
.assertEquals("%20", model
.escape(" "))
28 self
.assertEquals("file%3a%2f%2ffoo%7ebar",
29 model
.escape("file://foo~bar"))
30 self
.assertEquals("file%3a%2f%2ffoo%25bar",
31 model
.escape("file://foo%bar"))
33 def testUnescape(self
):
34 self
.assertEquals("", model
.unescape(""))
35 self
.assertEquals("hello", model
.unescape("hello"))
36 self
.assertEquals(" ", model
.unescape("%20"))
37 self
.assertEquals("file://foo~bar",
38 model
.unescape("file%3a%2f%2ffoo%7ebar"))
39 self
.assertEquals("file://foo%bar",
40 model
.unescape("file%3a%2f%2ffoo%25bar"))
42 def testBadInterface(self
):
44 model
.Interface('foo')
46 except model
.SafeException
:
49 def testInterface(self
):
50 i
= model
.Interface('http://foo')
51 self
.assertEquals('(foo)', i
.get_name())
54 def testMetadata(self
):
55 i
= model
.Interface('http://foo')
56 e
= qdom
.parse(StringIO('<ns:b xmlns:ns="a" foo="bar"/>'))
58 assert i
.get_metadata('a', 'b') == [e
]
59 assert i
.get_metadata('b', 'b') == []
60 assert i
.get_metadata('a', 'a') == []
61 assert e
.getAttribute('foo') == 'bar'
63 def testStabPolicy(self
):
64 i
= model
.Interface('http://foo')
65 self
.assertEquals(None, i
.stability_policy
)
66 i
.set_stability_policy(model
.buggy
)
67 self
.assertEquals(model
.buggy
, i
.stability_policy
)
69 def testGetImpl(self
):
70 i
= model
.Interface('http://foo')
77 assert isinstance(a
, model
.Implementation
)
80 i
= model
.Interface('http://foo')
81 a
= model
.Implementation(i
, 'foo')
83 assert a
.size
== a
.version
== a
.user_stability
== None
84 assert a
.arch
== a
.upstream_stability
== None
85 assert a
.dependencies
== {}
86 assert a
.download_sources
== []
87 assert a
.get_stability() is model
.testing
88 a
.upstream_stability
= model
.stable
89 assert a
.get_stability() is model
.stable
90 a
.user_stability
= model
.buggy
91 assert a
.get_stability() is model
.buggy
93 self
.assertEquals('1.2.3', a
.get_version())
94 assert str(a
) == 'foo'
96 b
= model
.Implementation(i
, 'foo')
100 def testDownloadSource(self
):
101 i
= model
.Interface('http://foo')
102 a
= model
.Implementation(i
, 'foo')
103 a
.add_download_source('ftp://foo', 1024, None)
104 a
.add_download_source('ftp://foo.tgz', 1025, 'foo')
105 assert a
.download_sources
[0].url
== 'ftp://foo'
106 assert a
.download_sources
[0].size
== 1024
107 assert a
.download_sources
[0].extract
== None
108 assert a
.interface
is i
110 def testEnvBind(self
):
111 a
= model
.EnvironmentBinding('PYTHONPATH', 'path')
112 assert a
.name
== 'PYTHONPATH'
113 assert a
.insert
== 'path'
117 b
= model
.Dependency('http://foo')
118 assert not b
.restrictions
119 assert not b
.bindings
123 f
= model
.Feed('http://feed', arch
= None, user_override
= False)
124 assert f
.uri
== 'http://feed'
126 assert f
.machine
== None
127 assert f
.arch
== None
128 assert f
.user_override
== False
130 f
= model
.Feed('http://feed', arch
= 'Linux-*', user_override
= True)
131 assert f
.uri
== 'http://feed'
132 assert f
.os
== 'Linux'
133 assert f
.machine
== None
134 assert f
.arch
== 'Linux-*'
135 assert f
.user_override
== True
137 f
= model
.Feed('http://feed', arch
= '*-i386', user_override
= True)
138 assert f
.uri
== 'http://feed'
140 assert f
.machine
== 'i386'
141 assert f
.arch
== '*-i386'
142 assert f
.user_override
== True
143 assert str(f
).startswith('<Feed from')
146 f
= model
.Feed('http://feed', arch
= 'i386', user_override
= True)
148 except model
.SafeException
, ex
:
149 assert 'Malformed arch' in str(ex
)
151 def testCanonical(self
):
152 self
.assertEquals('http://foo',
153 model
.canonical_iface_uri('http://foo'))
155 model
.canonical_iface_uri('bad-name')
157 except model
.SafeException
, ex
:
158 assert 'Bad interface name' in str(ex
)
160 suite
= unittest
.makeSuite(TestModel
)
161 if __name__
== '__main__':
162 sys
.argv
.append('-v')