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