1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#
# Copyright (c) 2003 Richard Jones, richard@commonground.com.au
# This module is free software, and you may redistribute it and/or modify
# under the same terms as Python, so long as this copyright message and
# disclaimer are retained in their original form.
#
# This module is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# $Id$
import unittest, os, shutil, errno, sys, difflib, cgi, re, sha
from roundup import init, instance, password, hyperdb, date
class TestClass:
def getprops(self):
return {
'string': hyperdb.String(),
'number': hyperdb.Number(),
'boolean': hyperdb.Boolean(),
'password': hyperdb.Password(),
'date': hyperdb.Date(),
'interval': hyperdb.Interval(),
'link': hyperdb.Link('test'),
'link2': hyperdb.Link('test2'),
'multilink': hyperdb.Multilink('test'),
'multilink2': hyperdb.Multilink('test2'),
}
def getkey(self):
return 'string'
def lookup(self, value):
if value == 'valid':
return '1'
raise KeyError
def get(self, nodeid, propname):
assert propname.startswith('multilink')
assert nodeid is not None
return ['2', '3']
class TestClass2:
def properties(self):
return {
'string': hyperdb.String(),
}
def getkey(self):
return None
def labelprop(self, default_to_id=1):
return 'id'
class TestDatabase:
classes = {'test': TestClass(), 'test2': TestClass2()}
def getUserTimezone(self):
return 0
class RawToHyperdbTest(unittest.TestCase):
def _test(self, propname, value, itemid=None):
return hyperdb.rawToHyperdb(TestDatabase(), TestClass(), itemid,
propname, value)
def testString(self):
self.assertEqual(self._test('password', ''), None)
self.assertEqual(self._test('string', ' a string '), 'a string')
def testNumber(self):
self.assertEqual(self._test('password', ''), None)
self.assertEqual(self._test('number', ' 10 '), 10)
self.assertEqual(self._test('number', ' 1.5 '), 1.5)
def testBoolean(self):
self.assertEqual(self._test('password', ''), None)
for true in 'yes true on 1'.split():
self.assertEqual(self._test('boolean', ' %s '%true), 1)
for false in 'no false off 0'.split():
self.assertEqual(self._test('boolean', ' %s '%false), 0)
def testPassword(self):
self.assertEqual(self._test('password', ''), None)
self.assertEqual(self._test('password', ' a string '), 'a string')
val = self._test('password', ' a string ')
self.assert_(isinstance(val, password.Password))
val = self._test('password', '{plaintext}a string')
self.assert_(isinstance(val, password.Password))
val = self._test('password', '{crypt}a string')
self.assert_(isinstance(val, password.Password))
s = sha.sha('a string').hexdigest()
val = self._test('password', '{SHA}'+s)
self.assert_(isinstance(val, password.Password))
self.assertEqual(val, 'a string')
self.assertRaises(hyperdb.HyperdbValueError, self._test,
'password', '{fubar}a string')
def testDate(self):
self.assertEqual(self._test('password', ''), None)
val = self._test('date', ' 2003-01-01 ')
self.assert_(isinstance(val, date.Date))
val = self._test('date', ' 2003/01/01 ')
self.assert_(isinstance(val, date.Date))
val = self._test('date', ' 2003/1/1 ')
self.assert_(isinstance(val, date.Date))
val = self._test('date', ' 2003-1-1 ')
self.assert_(isinstance(val, date.Date))
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'date',
'fubar')
def testInterval(self):
self.assertEqual(self._test('password', ''), None)
val = self._test('interval', ' +1d ')
self.assert_(isinstance(val, date.Interval))
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'interval',
'fubar')
def testLink(self):
self.assertEqual(self._test('password', ''), None)
self.assertEqual(self._test('link', '1'), '1')
self.assertEqual(self._test('link', 'valid'), '1')
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'link',
'invalid')
def testMultilink(self):
self.assertEqual(self._test('multilink', '', '1'), [])
self.assertEqual(self._test('multilink', '1', '1'), ['1'])
self.assertEqual(self._test('multilink', 'valid', '1'), ['1'])
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'multilink',
'invalid', '1')
self.assertEqual(self._test('multilink', '+1', '1'), ['1', '2', '3'])
self.assertEqual(self._test('multilink', '+valid', '1'), ['1', '2',
'3'])
self.assertEqual(self._test('multilink', '+1,-2', '1'), ['1', '3'])
self.assertEqual(self._test('multilink', '+valid,-3', '1'), ['1', '2'])
self.assertEqual(self._test('multilink', '+1', None), ['1'])
self.assertEqual(self._test('multilink', '+valid', None), ['1'])
self.assertEqual(self._test('multilink', '', None), [])
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(RawToHyperdbTest))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
unittest.main(testRunner=runner)
# vim: set filetype=python ts=4 sw=4 et si
|