annotate test/test_hyperdbvals.py @ 7670:a28ea83ace86

issue2551296 - from mock import Mock? Fix mock import for newer python3 to use unittest.mock rather than mock.
author John Rouillard <rouilj@ieee.org>
date Tue, 24 Oct 2023 09:23:16 -0400
parents 978285986b2c
children 69e6bcb39f90
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
7582
978285986b2c fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents: 7212
diff changeset
11 import unittest, os, shutil, errno, sys, difflib, re
4982
9ba03348f923 Remove roundup/anypy/hashlib_.py
John Kristensen <john@jerrykan.com>
parents: 4877
diff changeset
12 from hashlib import sha1
7670
a28ea83ace86 issue2551296 - from mock import Mock?
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
13 try:
a28ea83ace86 issue2551296 - from mock import Mock?
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
14 from unittest.mock import Mock
a28ea83ace86 issue2551296 - from mock import Mock?
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
15 except ImportError:
a28ea83ace86 issue2551296 - from mock import Mock?
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
16 # python 2.7
a28ea83ace86 issue2551296 - from mock import Mock?
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
17 from mock import Mock
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 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
20
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 class TestClass:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 def getprops(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 return {
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 'string': hyperdb.String(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 '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
26 'integer': hyperdb.Integer(),
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 'boolean': hyperdb.Boolean(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 'password': hyperdb.Password(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 'date': hyperdb.Date(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 'interval': hyperdb.Interval(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 'link': hyperdb.Link('test'),
4877
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
32 '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
33 'link2': hyperdb.Link('test2'),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 'multilink': hyperdb.Multilink('test'),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 '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
36 '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
37 }
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 def getkey(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 return 'string'
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 def lookup(self, value):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 if value == 'valid':
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 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
43 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
44 return '2'
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 raise KeyError
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 def get(self, nodeid, propname):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 assert propname.startswith('multilink')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 assert nodeid is not None
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 return ['2', '3']
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 class TestClass2:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 def properties(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 return {
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 'string': hyperdb.String(),
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 }
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 def getkey(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 return None
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 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
59 return 'id'
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 class TestDatabase:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 classes = {'test': TestClass(), 'test2': TestClass2()}
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 def getUserTimezone(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 return 0
7212
76a21cf791b9 Add config argument for one more call
John Rouillard <rouilj@ieee.org>
parents: 5649
diff changeset
65 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
66
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 class RawToHyperdbTest(unittest.TestCase):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 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
69 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
70 propname, value)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 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
72 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
73 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
74 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
75 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
76 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
77 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
78 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
79 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
80 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
81 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
82 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
83 # 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
84 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
85 # 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
86 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
87 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
88 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
89 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
90 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
91 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
92 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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 self.assertTrue(isinstance(val, password.Password))
5454
fbbcbfc6dad0 fix encoding for hash functions
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5453
diff changeset
102 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
103 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
104 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
105 self.assertEqual(val, 'a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 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
107 'password', '{fubar}a string')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 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
109 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
110 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
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/01/01 ')
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 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
115 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
116 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
117 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
118 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
119 'fubar')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 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
121 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
122 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
123 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
124 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
125 'fubar')
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 def testLink(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 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
128 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
129 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
130 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
131 'invalid')
4877
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
132 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'linkkeyonly',
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
133 '1')
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
134 self.assertRaises(hyperdb.HyperdbValueError, self._test, 'linkkeyonly',
2ba982dcdf2c New Link / Multilink option "try_id_parsing"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4570
diff changeset
135 'invalid')
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 def testMultilink(self):
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 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
138 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
139 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
140 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
141 'invalid', '1')
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', '+1', '1'), ['1', '2', '3'])
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', '+valid', '1'), ['1', '2',
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 '3'])
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', '+1,-2', '1'), ['1', '3'])
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 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
147 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
148 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
149 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
150
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
151 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
152 # 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
153 # '+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
154 # 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
155
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
156 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
157
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 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
159 self._test('multilink3', '1', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
160 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
161 ("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
162
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 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
164
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.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
166 '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
167
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 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
169 self._test('multilink3', '+1', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
170 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
171 ("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
172
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.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
174 ['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
175
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 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
177 self._test('multilink3', '+1,-2', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
178 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
179 ("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
180
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 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
182 self._test('multilink3', '+valid,-2', '1')
5453
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
183 self.assertEqual(cm.exception.args,
2b4f606d8e72 use exception.args instead of exception.message
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5169
diff changeset
184 ("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
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', '+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
187
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
188 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
189
7b74a5addfea fix multilink support of try_id_parsing=no and add test for multilink cases.
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
190 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
191
5548
fea11d05110e Avoid errors from selecting "no selection" on multilink (issue2550722).
Joseph Myers <jsm@polyomino.org.uk>
parents: 5454
diff changeset
192 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
193
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 # vim: set filetype=python ts=4 sw=4 et si

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