1 #!/usr/bin/env python2.3
2 from basetest
import BaseTest
3 import sys
, tempfile
, os
, shutil
, logging
4 from StringIO
import StringIO
6 from logging
import getLogger
, DEBUG
, INFO
8 sys
.path
.insert(0, '..')
10 from zeroinstall
import NeedDownload
11 from zeroinstall
.injector
import model
, basedir
, autopolicy
, gpg
, iface_cache
, namespaces
, reader
14 foo_iface_uri
= 'http://foo'
15 bar_iface_uri
= 'http://localhost/bar'
17 logger
= logging
.getLogger()
19 class TestReader(BaseTest
):
23 stream
= tempfile
.TemporaryFile()
24 stream
.write(data
.thomas_key
)
26 gpg
.import_key(stream
)
28 def write_with_version(self
, version
):
29 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
31 """<?xml version="1.0" ?>
32 <interface last-modified="1110752708"
34 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
36 <summary>Foo</summary>
37 <description>Foo</description>
38 </interface>""" % (foo_iface_uri
, version
))
42 def testNoVersion(self
):
43 tmp
= self
.write_with_version('')
44 reader
.check_readable(foo_iface_uri
, tmp
.name
)
46 def testNewEnough(self
):
47 tmp
= self
.write_with_version('min-injector-version="0.19"')
48 reader
.check_readable(foo_iface_uri
, tmp
.name
)
51 tmp
= self
.write_with_version('min-injector-version="1000"')
53 reader
.check_readable(foo_iface_uri
, tmp
.name
)
54 except reader
.InvalidInterface
, ex
:
55 assert "1000" in str(ex
)
57 def testRequiresVersion(self
):
58 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
60 """<?xml version="1.0" ?>
61 <interface last-modified="1110752708"
63 xmlns="http://zero-install.sourceforge.net/2004/injector/interface"
64 xmlns:my='http://my/namespace'>
66 <summary>Foo</summary>
67 <description>Foo</description>
69 <requires interface='%s' my:foo='test'>
70 <version not-before='2.3.4' before='3.4.5'/>
72 <requires interface='%s2'/>
73 <implementation id='sha1=123' version='1'/>
75 </interface>""" % (foo_iface_uri
, bar_iface_uri
, bar_iface_uri
))
77 iface
= model
.Interface(foo_iface_uri
)
78 reader
.update(iface
, tmp
.name
)
79 impl
= iface
.implementations
['sha1=123']
80 assert len(impl
.dependencies
) == 2
81 dep
= impl
.dependencies
[bar_iface_uri
]
82 assert len(dep
.restrictions
) == 1
83 res
= dep
.restrictions
[0]
84 assert res
.not_before
== [[2, 3, 4], 0]
85 assert res
.before
== [[3, 4, 5], 0]
86 dep2
= impl
.dependencies
[bar_iface_uri
+ '2']
87 assert len(dep2
.restrictions
) == 0
91 assert dep
.metadata
.get('http://my/namespace foo') == 'test'
92 assert dep
.metadata
.get('http://my/namespace food', None) == None
94 def testVersions(self
):
95 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
97 """<?xml version="1.0" ?>
100 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
102 <summary>Foo</summary>
103 <description>Foo</description>
104 <implementation id='sha1=123' version='1.0-rc3' version-modifier='-pre'/>
105 </interface>""" % foo_iface_uri
)
107 iface
= model
.Interface(foo_iface_uri
)
108 reader
.update(iface
, tmp
.name
)
109 impl
= iface
.implementations
['sha1=123']
110 assert impl
.version
== [[1, 0], -1, [3], -2]
112 def testAbsMain(self
):
113 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
115 """<?xml version="1.0" ?>
116 <interface last-modified="1110752708"
118 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
120 <summary>Foo</summary>
121 <description>Foo</description>
122 <group main='/bin/sh'>
123 <implementation id='sha1=123' version='1'/>
125 </interface>""" % foo_iface_uri
)
127 iface
= model
.Interface(foo_iface_uri
)
129 reader
.update(iface
, tmp
.name
)
131 except reader
.InvalidInterface
, ex
:
132 assert 'main' in str(ex
)
135 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
137 """<?xml version="1.0" ?>
138 <interface last-modified="1110752708"
140 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
142 <summary>Foo</summary>
143 <description>Foo</description>
144 <group main='bin/sh' foo='foovalue' xmlns:bobpre='http://bob' bobpre:bob='bobvalue'>
145 <implementation id='sha1=123' version='1' bobpre:bob='newbobvalue'/>
146 <implementation id='sha1=124' version='2' main='next'/>
148 </interface>""" % foo_iface_uri
)
150 iface
= model
.Interface(foo_iface_uri
)
151 reader
.update(iface
, tmp
.name
)
153 assert len(iface
.implementations
) == 2
155 assert iface
.get_impl('sha1=123').metadata
['foo'] == 'foovalue'
156 assert iface
.get_impl('sha1=123').metadata
['main'] == 'bin/sh'
157 assert iface
.get_impl('sha1=123').metadata
['http://bob bob'] == 'newbobvalue'
159 assert iface
.get_impl('sha1=124').metadata
['http://bob bob'] == 'bobvalue'
160 assert iface
.get_impl('sha1=124').metadata
['main'] == 'next'
162 suite
= unittest
.makeSuite(TestReader
)
163 if __name__
== '__main__':
164 sys
.argv
.append('-v')