annotate test/test_hyperdbvals.py @ 7683:b04e222501b8

fix: rest - set self.start from client.start Make elasped time include time since client was initialized. So elapsed is as close as we can get to an overall request service time. May need to add rest_elapsed or some other subsystem based timers as we try to track a possible performance regression in 2.3.0.
author John Rouillard <rouilj@ieee.org>
date Wed, 25 Oct 2023 13:12:18 -0400
parents a28ea83ace86
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/