#!/usr/bin/env python ''' $Id: test_KeqV.py,v 1.4 2003/11/27 08:12:41 zen Exp $ ''' __rcs_id__ = '$Id: test_KeqV.py,v 1.4 2003/11/27 08:12:41 zen Exp $' __version__ = '$Revision: 1.4 $'[11:-2] import unittest, sys sys.path.extend(('.', '..')) from KeqV import KeqV, ParseError class TestKeqV(unittest.TestCase): def test_basic(self): dm = KeqV('realm="foo",realm=bar') realms = dm.getList('realm') self.failUnlessEqual(realms, ['foo', 'bar']) def test_utf8(self): realm = u'\N{CENT SIGN}' self.failIfEqual(realm.encode('utf-8'), realm.encode('iso-8859-1')) message = 'realm="%s",charset=utf-8' % (realm,) dm = KeqV(message.encode('utf-8')) self.failUnlessEqual(dm.getValue('realm'), realm) def test_iso_8859_1(self): realm = u'\N{CENT SIGN}' self.failIfEqual(realm.encode('utf-8'), realm.encode('iso-8859-1')) message = 'realm="%s"' % (realm,) dm = KeqV(message.encode('iso-8859-1')) self.failUnlessEqual(dm.getValue('realm'), realm) self.assertRaises( ParseError, KeqV, realm.encode('utf-8') ) def test_mutable(self): dm = KeqV('realm="foo",realm=bar') dm.getList('realm').pop() realms = dm.getList('realm') self.failUnlessEqual(realms, [u'foo',]) def test_commavalue(self): dm = KeqV('realm="here, there & everywhere"') self.failUnlessEqual(len(dm), 1) realm = dm.getList('realm') self.failUnlessEqual(len(realm), 1) self.failUnlessEqual(realm[0], 'here, there & everywhere') def test_rfc2616(self): # Test less strict formats, such as those spewed by HTTP servers dm = KeqV( 'foo=bar; spam="e g\\"g;s,", ' 'another=header missing=semicolon, lonetoken; missingvalue=' ) self.failUnlessEqual(dm.getValue('foo'), u'bar') self.failUnlessEqual(dm.getValue('spam'), u'e g"g;s,') self.failUnlessEqual(dm.getValue('another'), u'header') self.failUnlessEqual(dm.getValue('missing'), u'semicolon') self.failUnlessEqual(dm.getValue('lonetoken'), None) self.failUnlessEqual(dm.getValue('missingvalue'), '') self.failUnlessEqual(KeqV('foo bar=baz').getValue('foo'), None) self.failUnlessEqual(KeqV('foo bar=baz').getValue('bar'), u'baz') def test_quoting(self): dm = KeqV('realm="\\"laser\\""') realm = dm.getValue('realm') self.failUnlessEqual(realm, '"laser"') def test_None(self): self.failUnlessEqual( KeqV('realm').getValue('realm'), None ) self.failUnlessEqual( KeqV('foo bar baz').getValue('foo'), None ) self.failUnlessEqual( KeqV('foo bar baz').getValue('bar'), None ) self.failUnlessEqual( KeqV('foo bar baz').getValue('baz'), None ) def test_empty(self): self.failUnlessEqual( KeqV('realm=').getValue('realm'), '' ) self.failUnlessEqual( KeqV('realm=""').getValue('realm'), '' ) self.failUnlessEqual( KeqV('realm=,bar').getValue('realm'), '' ) def test_ambiguous(self): self.failUnlessEqual( KeqV('foo= bar').getValue('foo'), u'bar' ) self.assertRaises( KeyError, KeqV('foo= bar').getValue, u'bar' ) def test_default(self): self.failUnlessRaises( KeyError, KeqV('foo').getValue, u'bar' ) self.failUnlessEqual(KeqV('foo').getValue(u'bar', u'baz'), u'baz') self.failUnlessEqual( KeqV('foo').getValue(u'bar', default=u'baz'), u'baz' ) def test_invalid(self): self.assertRaises(ParseError, KeqV, 'foo="') self.assertRaises(ParseError, KeqV, ',foo=bar') self.assertRaises(ParseError, KeqV, 'foo==bar') self.assertRaises(ParseError, KeqV, 'foo=bar=') self.assertRaises(ParseError, KeqV, ',') self.assertRaises(ParseError, KeqV, 'foo,,bar') self.assertRaises(ParseError, KeqV, 'foo==bar') if __name__ == '__main__': unittest.main() # vim: set filetype=python ts=4 sw=4 et si