annotate test/test_hyperdbvals.py @ 7212:76a21cf791b9

Add config argument for one more call Also added Mock so it gets tested.
author John Rouillard <rouilj@ieee.org>
date Sat, 04 Mar 2023 11:51:45 -0500
parents f8893e1cde0d
children 978285986b2c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 # Copyright (c) 2003 Richard Jones, richard@commonground.com.au
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # under the same terms as Python, so long as this copyright message and
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # disclaimer are retained in their original form.
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 #
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # This module is distributed in the hope that it will be useful,
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 3677
diff changeset
11 import unittest, os, shutil, errno, sys, difflib, cgi, re
4982
9ba03348f923 Remove roundup/anypy/hashlib_.py
John Kristensen <john@jerrykan.com>
parents: 4877
diff changeset
12 from hashlib import sha1
7212
76a21cf791b9 Add config argument for one more call
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
13 from mock import Mock
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 from roundup import init, instance, password, hyperdb, date
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 class TestClass:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 def getprops(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 return {
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 'string': hyperdb.String(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 'number': hyperdb.Number(),
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
22 'integer': hyperdb.Integer(),
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 'boolean': hyperdb.Boolean(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 'password': hyperdb.Password(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 'date': hyperdb.Date(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 'interval': hyperdb.Interval(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 'link': hyperdb.Link('test'),
4877
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
28 'linkkeyonly': hyperdb.Link('test', try_id_parsing='no'),
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 'link2': hyperdb.Link('test2'),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 'multilink': hyperdb.Multilink('test'),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 'multilink2': hyperdb.Multilink('test2'),
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
32 'multilink3': hyperdb.Multilink('test', try_id_parsing='no'),
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 }
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 def getkey(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 return 'string'
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 def lookup(self, value):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 if value == 'valid':
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 return '1'
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
39 if value == '2valid':
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
40 return '2'
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 raise KeyError
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 def get(self, nodeid, propname):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 assert propname.startswith('multilink')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 assert nodeid is not None
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 return ['2', '3']
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 class TestClass2:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 def properties(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 return {
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 'string': hyperdb.String(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 }
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 def getkey(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 return None
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 def labelprop(self, default_to_id=1):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 return 'id'
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 class TestDatabase:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 classes = {'test': TestClass(), 'test2': TestClass2()}
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 def getUserTimezone(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 return 0
7212
76a21cf791b9 Add config argument for one more call
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
61 config = Mock(PASSWORD_PBKDF2_DEFAULT_ROUNDS = 1000)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 class RawToHyperdbTest(unittest.TestCase):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 def _test(self, propname, value, itemid=None):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 return hyperdb.rawToHyperdb(TestDatabase(), TestClass(), itemid,
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 propname, value)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 def testString(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
68 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 self.assertEqual(self._test('string', ' a string '), 'a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 def testNumber(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
71 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 self.assertEqual(self._test('number', ' 10 '), 10)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self.assertEqual(self._test('number', ' 1.5 '), 1.5)
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
74 self.assertEqual(self._test('number', ' -1022.5 '), -1022.5)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
75 def testInteger(self):
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
76 self.assertEqual(self._test('integer', ' 100 '), 100)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
77 self.assertEqual(self._test('integer', ' 0 '), 0)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
78 self.assertEqual(self._test('integer', ' -100 '), -100)
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
79 # make sure error raised on string
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
80 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'integer', 'a string', 'a string')
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
81 # make sure error raised on real number
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5037
diff changeset
82 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'integer', ' -100.2 ')
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 def testBoolean(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
84 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 for true in 'yes true on 1'.split():
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 self.assertEqual(self._test('boolean', ' %s '%true), 1)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 for false in 'no false off 0'.split():
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 self.assertEqual(self._test('boolean', ' %s '%false), 0)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 def testPassword(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
90 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 self.assertEqual(self._test('password', ' a string '), 'a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 val = self._test('password', ' a string ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
93 self.assertTrue(isinstance(val, password.Password))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 val = self._test('password', '{plaintext}a string')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
95 self.assertTrue(isinstance(val, password.Password))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 val = self._test('password', '{crypt}a string')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
97 self.assertTrue(isinstance(val, password.Password))
5454
fbbcbfc6dad0 fix encoding for hash functions
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5453
diff changeset
98 s = sha1(b'a string').hexdigest()
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 val = self._test('password', '{SHA}'+s)
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
100 self.assertTrue(isinstance(val, password.Password))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 self.assertEqual(val, 'a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 self.assertRaises(hyperdb.HyperdbValueError, self._test,
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 'password', '{fubar}a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 def testDate(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
105 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 val = self._test('date', ' 2003-01-01 ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
107 self.assertTrue(isinstance(val, date.Date))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 val = self._test('date', ' 2003/01/01 ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
109 self.assertTrue(isinstance(val, date.Date))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 val = self._test('date', ' 2003/1/1 ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
111 self.assertTrue(isinstance(val, date.Date))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 val = self._test('date', ' 2003-1-1 ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
113 self.assertTrue(isinstance(val, date.Date))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'date',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 'fubar')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 def testInterval(self):
3668
a15c15510e99 hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
117 self.assertEqual(self._test('password', ''), None)
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 val = self._test('interval', ' +1d ')
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5548
diff changeset
119 self.assertTrue(isinstance(val, date.Interval))
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'interval',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 'fubar')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 def testLink(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 self.assertEqual(self._test('link', '1'), '1')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 self.assertEqual(self._test('link', 'valid'), '1')
4877
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
125 self.assertEqual(self._test('linkkeyonly', 'valid'), '1')
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'link',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 'invalid')
4877
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
128 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'linkkeyonly',
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
129 '1')
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
130 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'linkkeyonly',
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
131 'invalid')
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 def testMultilink(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 self.assertEqual(self._test('multilink', '', '1'), [])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 self.assertEqual(self._test('multilink', '1', '1'), ['1'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 self.assertEqual(self._test('multilink', 'valid', '1'), ['1'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'multilink',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 'invalid', '1')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 self.assertEqual(self._test('multilink', '+1', '1'), ['1', '2', '3'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 self.assertEqual(self._test('multilink', '+valid', '1'), ['1', '2',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 '3'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 self.assertEqual(self._test('multilink', '+1,-2', '1'), ['1', '3'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 self.assertEqual(self._test('multilink', '+valid,-3', '1'), ['1', '2'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 self.assertEqual(self._test('multilink', '+1', None), ['1'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 self.assertEqual(self._test('multilink', '+valid', None), ['1'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 self.assertEqual(self._test('multilink', '', None), [])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
147 def testMultilink3(self):
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
148 # note that all +1, -2 type references will fail with exceptions
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
149 # '+1' is an id and try_id_parsing is set to no for multilink3
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
150 # and the 'name/key' 1 or 2 doesn't exist.
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
151
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
152 self.assertEqual(self._test('multilink3', '', '1'), [])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
153
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
154 with self.assertRaises(hyperdb.HyperdbValueError) as cm:
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
155 self._test('multilink3', '1', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
156 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
157 ("property multilink3: '1' is not a test.",))
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
158
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
159 self.assertEqual(self._test('multilink3', 'valid', '1'), ['1'])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
160
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
161 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'multilink3',
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
162 'invalid', '1')
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
163
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
164 with self.assertRaises(hyperdb.HyperdbValueError) as cm:
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
165 self._test('multilink3', '+1', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
166 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
167 ("property multilink3: '1' is not a test.",))
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
168
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
169 self.assertEqual(self._test('multilink3', '+valid', '1'),
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
170 ['1', '2', '3'])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
171
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
172 with self.assertRaises(hyperdb.HyperdbValueError) as cm:
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
173 self._test('multilink3', '+1,-2', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
174 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
175 ("property multilink3: '1' is not a test.",))
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
176
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
177 with self.assertRaises(hyperdb.HyperdbValueError) as cm:
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
178 self._test('multilink3', '+valid,-2', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
179 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
180 ("property multilink3: '2' is not a test.",))
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
181
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
182 self.assertEqual(self._test('multilink3', '+valid,-2valid', '1'), ['1', '3'])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
183
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
184 self.assertEqual(self._test('multilink3', '+valid', None), ['1'])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
185
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
186 self.assertEqual(self._test('multilink3', '', None), [])
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
187
5548
fea11d05110e Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents: 5454
diff changeset
188 self.assertEqual(self._test('multilink3', '-valid', None), [])
5169
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
189
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/