testreader.py :  » Installer » Zero-Install » zeroinstall-injector-0.47 » tests » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Installer » Zero Install 
Zero Install » zeroinstall injector 0.47 » tests » testreader.py
#!/usr/bin/env python
from basetest import BaseTest
import sys, tempfile, logging
import unittest

sys.path.insert(0, '..')

from zeroinstall.injector import model,gpg,reader
import data

foo_iface_uri = 'http://foo'
bar_iface_uri = 'http://localhost/bar'

logger = logging.getLogger()

class TestReader(BaseTest):
  def setUp(self):
    BaseTest.setUp(self)

    stream = tempfile.TemporaryFile()
    stream.write(data.thomas_key)
    stream.seek(0)
    gpg.import_key(stream)
  
  def write_with_version(self, version):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface last-modified="1110752708"
 uri="%s" %s
 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
</interface>""" % (foo_iface_uri, version))
    tmp.flush()
    return tmp
  
  def testNoVersion(self):
    tmp = self.write_with_version('')
    reader.check_readable(foo_iface_uri, tmp.name)
  
  def testNewEnough(self):
    tmp = self.write_with_version('min-injector-version="0.19"')
    reader.check_readable(foo_iface_uri, tmp.name)
  
  def testTooOld(self):
    tmp = self.write_with_version('min-injector-version="1000"')
    try:
      reader.check_readable(foo_iface_uri, tmp.name)
    except reader.InvalidInterface, ex:
      assert "1000" in str(ex)
  
  def testRequiresVersion(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface last-modified="1110752708"
 uri="%s"
 xmlns="http://zero-install.sourceforge.net/2004/injector/interface"
 xmlns:my='http://my/namespace'>
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <group>
   <requires interface='%s' my:foo='test'>
     <version not-before='2.3.4' before='3.4.5'/>
   </requires>
   <implementation id='sha1=123' version='1'/>
   <requires interface='%s2'/>
  </group>
</interface>""" % (foo_iface_uri, bar_iface_uri, bar_iface_uri))
    tmp.flush()
    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name)
    impl = iface.implementations['sha1=123']
    assert len(impl.dependencies) == 2
    dep = impl.dependencies[bar_iface_uri]
    assert len(dep.restrictions) == 1
    res = dep.restrictions[0]
    assert res.not_before == [[2, 3, 4], 0]
    assert res.before == [[3, 4, 5], 0]
    dep2 = impl.dependencies[bar_iface_uri + '2']
    assert len(dep2.restrictions) == 0
    str(dep)
    str(dep2)

    assert dep.metadata.get('http://my/namespace foo') == 'test'
    assert dep.metadata.get('http://my/namespace food', None) == None
  
  def testBindings(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <group>
   <requires interface='http://example.com/foo.xml'>
     <environment name='PATH' insert='bin'/>
     <environment name='PATH' insert='bin' mode='prepend'/>
     <environment name='PATH' insert='bin' default='/bin' mode='append'/>
     <environment name='PATH' insert='bin' mode='replace'/>
   </requires>
   <implementation id='sha1=123' version='1'>
     <environment name='SELF' insert='.' mode='replace'/>
   </implementation>
  </group>
</interface>""")
    tmp.flush()
    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name, local = True)
    impl = iface.implementations['sha1=123']

    assert len(impl.bindings) == 1
    self.assertEquals(model.EnvironmentBinding.REPLACE, impl.bindings[0].mode)

    assert len(impl.requires) == 1
    dep = impl.requires[0]

    assert len(dep.bindings) == 4
    for b in dep.bindings:
      self.assertEquals('PATH', b.name)
      self.assertEquals('bin', b.insert)
    self.assertEquals(model.EnvironmentBinding.PREPEND, dep.bindings[0].mode)
    self.assertEquals(model.EnvironmentBinding.PREPEND, dep.bindings[1].mode)
    self.assertEquals(model.EnvironmentBinding.APPEND, dep.bindings[2].mode)
    self.assertEquals(model.EnvironmentBinding.REPLACE, dep.bindings[3].mode)

    self.assertEquals(None, dep.bindings[1].default)
    self.assertEquals('/bin', dep.bindings[2].default)

  def testVersions(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface
 uri="%s"
 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <implementation id='sha1=123' version='1.0-rc3' version-modifier='-pre'/>
</interface>""" % foo_iface_uri)
    tmp.flush()
    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name)
    impl = iface.implementations['sha1=123']
    assert impl.version == [[1, 0], -1, [3], -2]
  
  def testAbsMain(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface last-modified="1110752708"
 uri="%s"
 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <group main='/bin/sh'>
   <implementation id='sha1=123' version='1'/>
  </group>
</interface>""" % foo_iface_uri)
    tmp.flush()
    iface = model.Interface(foo_iface_uri)
    try:
      reader.update(iface, tmp.name)
      assert False
    except reader.InvalidInterface, ex:
      assert 'main' in str(ex)
  
  def testAttrs(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface last-modified="1110752708"
 uri="%s"
 xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <group main='bin/sh' foo='foovalue' xmlns:bobpre='http://bob' bobpre:bob='bobvalue'>
   <implementation id='sha1=123' version='1' bobpre:bob='newbobvalue'/>
   <implementation id='sha1=124' version='2' main='next'/>
  </group>
</interface>""" % foo_iface_uri)
    tmp.flush()
    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name)

    assert len(iface.implementations) == 2

    assert iface.implementations['sha1=123'].metadata['foo'] == 'foovalue'
    assert iface.implementations['sha1=123'].metadata['main'] == 'bin/sh'
    assert iface.implementations['sha1=123'].metadata['http://bob bob'] == 'newbobvalue'

    assert iface.implementations['sha1=124'].metadata['http://bob bob'] == 'bobvalue'
    assert iface.implementations['sha1=124'].metadata['main'] == 'next'
  
  def testNative(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <package-implementation package='gimp'/>
  <package-implementation package='python-bittorrent' foo='bar' main='/usr/bin/pbt'/>
</interface>""")
    tmp.flush()

    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name, True)

    assert len(iface.implementations) == 2

    impl = iface.implementations['package:deb:python-bittorrent:3.4.2-10']
    assert impl.id == 'package:deb:python-bittorrent:3.4.2-10'
    assert impl.upstream_stability == model.packaged
    assert impl.user_stability == None
    assert impl.requires == []
    assert impl.main == '/usr/bin/pbt'
    assert impl.metadata['foo'] == 'bar'
    assert impl.feed == iface._main_feed
  
  def testLang(self):
    tmp = tempfile.NamedTemporaryFile(prefix = 'test-')
    tmp.write(
"""<?xml version="1.0" ?>
<interface xmlns="http://zero-install.sourceforge.net/2004/injector/interface">
  <name>Foo</name>
  <summary>Foo</summary>
  <description>Foo</description>
  <feed langs='fr en_GB' src='http://localhost/feed.xml'/>
  <group>
    <group langs='fr en_GB'>
      <implementation id='sha1=124' version='2' langs='fr'/>
      <implementation id='sha1=234' version='2'/>
    </group>
    <implementation id='sha1=345' version='2'/>
  </group>
</interface>""")
    tmp.flush()

    iface = model.Interface(foo_iface_uri)
    reader.update(iface, tmp.name, True)

    assert len(iface.implementations) == 3
    assert len(iface.feeds) == 1, iface.feeds

    self.assertEquals('fr en_GB', iface.feeds[0].langs)

    self.assertEquals('fr', iface.implementations['sha1=124'].langs)
    self.assertEquals('fr en_GB', iface.implementations['sha1=234'].langs)
    self.assertEquals(None, iface.implementations['sha1=345'].langs)
  
if __name__ == '__main__':
  unittest.main()
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.