2 from basetest
import BaseTest
3 import sys
, io
, os
, shutil
6 sys
.path
.insert(0, '..')
7 from zeroinstall
.injector
import writer
, model
, reader
, qdom
8 from zeroinstall
.support
import basedir
10 test_feed
= qdom
.parse(io
.BytesIO(b
"""<interface xmlns='http://zero-install.sourceforge.net/2004/injector/interface'>
12 <summary>for testing</summary>
13 <implementation id='sha1=3ce644dc725f1d21cfcf02562c76f375944b266a' version='1'/>
17 mydir
= os
.path
.dirname(__file__
)
19 class TestWriter(BaseTest
):
21 iface
= model
.Interface('http://test/test')
22 main_feed
= model
.ZeroInstallFeed(test_feed
, local_path
= '/Hello')
23 self
.config
.iface_cache
._feeds
[iface
.uri
] = main_feed
24 iface
.stability_policy
= model
.developer
25 main_feed
.last_checked
= 100
26 iface
.extra_feeds
.append(model
.Feed('http://sys-feed', None, False))
27 iface
.extra_feeds
.append(model
.Feed('http://user-feed', 'Linux-*', True))
28 writer
.save_interface(iface
)
29 writer
.save_feed(main_feed
)
31 iface
= model
.Interface('http://test/test')
32 self
.assertEqual(None, iface
.stability_policy
)
33 main_feed
= model
.ZeroInstallFeed(test_feed
, local_path
= '/Hello')
34 self
.config
.iface_cache
._feeds
[iface
.uri
] = main_feed
35 reader
.update_user_overrides(iface
)
36 reader
.update_user_feed_overrides(main_feed
)
37 self
.assertEqual(model
.developer
, iface
.stability_policy
)
38 self
.assertEqual(100, main_feed
.last_checked
)
39 self
.assertEqual("[<Feed from http://user-feed>]", str(iface
.extra_feeds
))
41 feed
= iface
.extra_feeds
[0]
42 self
.assertEqual('http://user-feed', feed
.uri
)
43 self
.assertEqual('Linux', feed
.os
)
44 self
.assertEqual(None, feed
.machine
)
46 def testStoreNothing(self
):
47 iface
= model
.Interface('http://test/test')
48 writer
.save_interface(iface
)
50 iface
= model
.Interface('http://test/test')
51 self
.assertEqual(None, iface
.stability_policy
)
52 reader
.update_user_overrides(iface
)
54 feed
= self
.config
.iface_cache
.get_feed(iface
.uri
)
55 self
.assertEqual(None, feed
)
57 def testStoreStability(self
):
58 main_feed
= reader
.load_feed('Hello.xml', local
= True)
59 impl
= main_feed
.implementations
['sha1=3ce644dc725f1d21cfcf02562c76f375944b266a']
60 impl
.user_stability
= model
.developer
61 writer
.save_feed(main_feed
)
64 main_feed
= reader
.load_feed('Hello.xml', local
= True)
65 reader
.update_user_feed_overrides(main_feed
)
66 self
.assertEqual(1, len(main_feed
.implementations
))
68 impl
= main_feed
.implementations
['sha1=3ce644dc725f1d21cfcf02562c76f375944b266a']
69 self
.assertEqual(model
.developer
, impl
.user_stability
)
71 def testSitePackages(self
):
72 # The old system (0install < 1.9):
73 # - 0compile stores implementations to ~/.cache, and
74 # - adds to extra_feeds
75 # The new system (0install >= 1.9):
76 # - 0compile stores implementations to ~/.local/0install.net/site-packages, and
77 # - 0install finds them automatically
79 # For backwards compatibility, 0install >= 1.9:
80 # - writes discovered feeds to extra_feeds
81 # - skips such entries in extra_feeds when loading
83 meta_dir
= basedir
.save_data_path('0install.net', 'site-packages',
84 'http:##example.com#prog.xml', '1.0', '0install')
85 feed
= os
.path
.join(meta_dir
, 'feed.xml')
86 shutil
.copyfile(os
.path
.join(mydir
, 'Local.xml'), feed
)
88 # Check that we find the feed without us having to register it
89 iface
= self
.config
.iface_cache
.get_interface('http://example.com/prog.xml')
90 self
.assertEqual(1, len(iface
.extra_feeds
))
91 site_feed
, = iface
.extra_feeds
92 self
.assertEqual(True, site_feed
.site_package
)
94 # Check that we write it out, so that older 0installs can find it
95 writer
.save_interface(iface
)
97 config_file
= basedir
.load_first_config('0install.net', 'injector',
98 'interfaces', 'http:##example.com#prog.xml')
99 with
open(config_file
, 'rb') as s
:
103 for item
in doc
.childNodes
:
104 if item
.name
== 'feed':
106 self
.assertEqual('True', feed_node
.getAttribute('site-package'))
108 # Check we ignore this element
110 self
.assertEqual([], iface
.extra_feeds
)
111 reader
.update_user_overrides(iface
)
112 self
.assertEqual([], iface
.extra_feeds
)
114 # Check feeds are automatically removed again
115 reader
.update_from_cache(iface
)
116 self
.assertEqual(1, len(iface
.extra_feeds
))
117 shutil
.rmtree(basedir
.load_first_data('0install.net', 'site-packages',
118 'http:##example.com#prog.xml'))
120 reader
.update_from_cache(iface
)
121 self
.assertEqual(0, len(iface
.extra_feeds
))
123 if __name__
== '__main__':