1 #!/usr/bin/env python2.4
2 import sys
, logging
, os
, tempfile
3 from zeroinstall
.injector
.namespaces
import XMLNS_IFACE
4 from zeroinstall
.injector
.reader
import InvalidInterface
5 from zeroinstall
.injector
import model
, reader
7 from xml
.dom
import minidom
9 sys
.path
.insert(0, '..')
13 header
= """<?xml version="1.0" ?>
14 <interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface"
15 uri='http://test/hello.xml'>
17 <summary>for testing</summary>
18 <description>This is for testing.</description>
25 dom
= minidom
.parseString(xml
)
26 uri
= dom
.documentElement
.getAttribute('uri')
29 tmp
= tempfile
.NamedTemporaryFile(prefix
= 'test-')
33 iface
= model
.Interface(uri
)
34 reader
.update(iface
, tmp
.name
, local
= True)
39 local_file
= os
.path
.join(os
.path
.dirname(__file__
), 'local.xml')
40 local_file_req
= os
.path
.join(os
.path
.dirname(__file__
), 'local-req.xml')
46 class TestValidator(unittest
.TestCase
):
48 master
= parse(create
.create_from_local(local_file
))
49 assert master
.uri
== 'http://test/hello.xml', master
50 assert len(master
.implementations
) == 1
52 def testMergeFirst(self
):
53 master
= parse(merge
.merge(header
+ footer
, local_file
))
54 assert master
.uri
== 'http://test/hello.xml', master
55 assert len(master
.implementations
) == 1
57 def testMergeSecond(self
):
58 master
= parse(merge
.merge(header
+ "<implementation id='sha1=123' version='1'/>" + footer
, local_file
))
59 assert master
.uri
== 'http://test/hello.xml', master
60 assert len(master
.implementations
) == 2
62 def testMergeGroup(self
):
63 master
= parse(tap(merge
.merge(header
+ "<group><implementation id='sha1=123' version='1'/></group>" + footer
, local_file
)))
64 assert master
.uri
== 'http://test/hello.xml', master
65 assert len(master
.implementations
) == 2
66 assert master
.implementations
['sha1=002'].requires
== []
68 def testMergeLocalReq(self
):
69 master
= parse(tap(merge
.merge(header
+ "<group x='x'><implementation id='sha1=123' version='1'/></group>" + footer
, local_file_req
)))
70 assert master
.uri
== 'http://test/hello.xml', master
71 assert len(master
.implementations
) == 2
72 deps
= master
.implementations
['sha1=003'].requires
74 #assert deps[0].interface == 'http://foo', deps[0]
76 def testLocalContext(self
):
77 def get_context(xml_frag
):
78 doc
= minidom
.parseString(header
+ xml_frag
+ footer
)
79 impls
= list(doc
.getElementsByTagNameNS(XMLNS_IFACE
, 'implementation'))
80 assert len(impls
) == 1
81 return merge
.Context(impls
[0])
83 ctx
= get_context("<implementation id='sha1=001' version='1'/>")
84 assert ctx
.attribs
[(None, 'id')] == 'sha1=001'
85 assert ctx
.attribs
[(None, 'version')] == '1'
87 ctx
= get_context("<group t='t' x='1' y:z='2' xmlns:y='foo'><implementation id='sha1=001' version='1' t='r'/></group>")
88 assert ctx
.attribs
[(None, 'id')] == 'sha1=001'
89 assert ctx
.attribs
[(None, 'version')] == '1'
90 assert ctx
.attribs
[(None, 't')] == 'r'
91 assert ctx
.attribs
[(None, 'x')] == '1'
92 assert ctx
.attribs
[('foo', 'z')] == '2'
94 suite
= unittest
.makeSuite(TestValidator
)
95 if __name__
== '__main__':