Skip to content

Commit 893d404

Browse files
author
Richard Jones
committed
added tests for number type too
1 parent 0705c13 commit 893d404

File tree

2 files changed

+55
-18
lines changed

2 files changed

+55
-18
lines changed

roundup/backends/back_anydbm.py

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717
#
18-
#$Id: back_anydbm.py,v 1.49 2002-07-18 11:41:10 richard Exp $
18+
#$Id: back_anydbm.py,v 1.50 2002-07-18 11:50:58 richard Exp $
1919
'''
2020
This module defines a backend that saves the hyperdatabase in a database
2121
chosen by anydbm. It is guaranteed to always be available in python
@@ -730,17 +730,29 @@ def create(self, **propvalues):
730730
if value is not None and not isinstance(value, date.Interval):
731731
raise TypeError, 'new property "%s" not an Interval'%key
732732

733-
elif isinstance(prop, Number):
733+
elif value is not None and isinstance(prop, Number):
734734
try:
735735
int(value)
736-
except TypeError:
737-
raise TypeError, 'new property "%s" not numeric' % propname
736+
except ValueError:
737+
try:
738+
float(value)
739+
except ValueError:
740+
raise TypeError, 'new property "%s" not numeric'%key
738741

739-
elif isinstance(prop, Boolean):
740-
try:
741-
int(value)
742-
except TypeError:
743-
raise TypeError, 'new property "%s" is not boolean' % propname
742+
elif value is not None and isinstance(prop, Boolean):
743+
if isinstance(value, type('')):
744+
s = value.lower()
745+
if s in ('0', 'false', 'no'):
746+
value = 0
747+
elif s in ('1', 'true', 'yes'):
748+
value = 1
749+
else:
750+
raise TypeError, 'new property "%s" not boolean'%key
751+
else:
752+
try:
753+
int(value)
754+
except TypeError:
755+
raise TypeError, 'new property "%s" not boolean'%key
744756

745757
# make sure there's data where there needs to be
746758
for key, prop in self.properties.items():
@@ -1024,11 +1036,14 @@ class or a KeyError is raised.
10241036
propvalues[propname] = value
10251037

10261038
elif value is not None and isinstance(prop, Number):
1027-
# TODO: should we store floats too?
10281039
try:
10291040
int(value)
1030-
except TypeError:
1031-
raise TypeError, 'new property "%s" not numeric' % propname
1041+
except ValueError:
1042+
try:
1043+
float(value)
1044+
except ValueError:
1045+
raise TypeError, 'new property "%s" not '\
1046+
'numeric'%propname
10321047

10331048
elif value is not None and isinstance(prop, Boolean):
10341049
if isinstance(value, type('')):
@@ -1043,7 +1058,7 @@ class or a KeyError is raised.
10431058
else:
10441059
try:
10451060
int(value)
1046-
except TypeError:
1061+
except ValueError:
10471062
raise TypeError, 'new property "%s" not '\
10481063
'boolean'%propname
10491064

@@ -1688,6 +1703,9 @@ def __init__(self, db, classname, **properties):
16881703

16891704
#
16901705
#$Log: not supported by cvs2svn $
1706+
#Revision 1.49 2002/07/18 11:41:10 richard
1707+
#added tests for boolean type, and fixes to anydbm backend
1708+
#
16911709
#Revision 1.48 2002/07/18 11:17:31 gmcm
16921710
#Add Number and Boolean types to hyperdb.
16931711
#Add conversion cases to web, mail & admin interfaces.

test/test_db.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717
#
18-
# $Id: test_db.py,v 1.32 2002-07-18 11:41:10 richard Exp $
18+
# $Id: test_db.py,v 1.33 2002-07-18 11:50:58 richard Exp $
1919

2020
import unittest, os, shutil, time
2121

@@ -111,16 +111,23 @@ def xtestIntervalChange(self):
111111
self.assertNotEqual(self.db.issue.get('1', "foo"), a)
112112

113113
def testBooleanChange(self):
114-
self.db.user.create(username='foo', assignable='1')
114+
self.db.user.create(username='foo', assignable=1)
115115
a = self.db.user.get('1', 'assignable')
116116
self.db.user.set('1', assignable='false')
117117
self.assertNotEqual(self.db.user.get('1', 'assignable'), a)
118118
self.db.user.set('1', assignable='FaLse')
119119
self.db.user.set('1', assignable='nO')
120-
self.db.user.set('1', assignable='0')
120+
self.db.user.set('1', assignable=0)
121121
self.db.user.set('1', assignable='tRuE')
122122
self.db.user.set('1', assignable='yEs')
123-
self.db.user.set('1', assignable='1')
123+
self.db.user.set('1', assignable=1)
124+
125+
def testNumberChange(self):
126+
self.db.user.create(username='foo', age='1')
127+
a = self.db.user.get('1', 'age')
128+
self.db.user.set('1', age='3')
129+
self.assertNotEqual(self.db.user.get('1', 'age'), a)
130+
self.db.user.set('1', age='1.0')
124131

125132
def xtestNewProperty(self):
126133
' make sure a new property is added ok '
@@ -186,7 +193,7 @@ def xtestTransactions(self):
186193
self.assertNotEqual(num_files, self.db.numfiles())
187194
self.assertEqual(num_files2, self.db.numfiles())
188195

189-
def xtestExceptions(self):
196+
def testExceptions(self):
190197
# this tests the exceptions that should be raised
191198
ar = self.assertRaises
192199

@@ -255,6 +262,15 @@ def xtestExceptions(self):
255262
# invalid multilink index
256263
ar(IndexError, self.db.issue.set, '6', title='foo', status='1',
257264
nosy=['10'])
265+
# invalid number value
266+
ar(TypeError, self.db.user.create, username='foo', age='a')
267+
# invalid boolean value
268+
ar(TypeError, self.db.user.create, username='foo', assignable='fubar')
269+
self.db.user.create(username='foo')
270+
# invalid number value
271+
ar(TypeError, self.db.user.set, '3', username='foo', age='a')
272+
# invalid boolean value
273+
ar(TypeError, self.db.user.set, '3', username='foo', assignable='fubar')
258274

259275
def xtestJournals(self):
260276
self.db.issue.addprop(fixer=Link("user", do_journal='yes'))
@@ -546,6 +562,9 @@ def suite():
546562

547563
#
548564
# $Log: not supported by cvs2svn $
565+
# Revision 1.32 2002/07/18 11:41:10 richard
566+
# added tests for boolean type, and fixes to anydbm backend
567+
#
549568
# Revision 1.31 2002/07/14 23:17:45 richard
550569
# minor change to make testing easier
551570
#

0 commit comments

Comments
 (0)