Mercurial > p > roundup > code
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_hyperdbvals.py Tue Nov 11 00:35:14 2003 +0000 @@ -0,0 +1,129 @@ +# +# 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: test_hyperdbvals.py,v 1.1 2003-11-11 00:35:14 richard Exp $ + +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('string', ' a string '), 'a string') + def testNumber(self): + self.assertEqual(self._test('number', ' 10 '), 10) + self.assertEqual(self._test('number', ' 1.5 '), 1.5) + def testBoolean(self): + 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', ' 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): + 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): + 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('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
