"""unit tests for module cubicweb.utils:organization: Logilab:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""importreimportdecimalimportdatetimefromlogilab.common.testlibimportTestCase,unittest_mainfromcubicweb.utilsimportmake_uid,UStringIO,SizeConstrainedList,RepeatListtry:try:importjsonexceptImportError:importsimplejsonasjsonfromcubicweb.utilsimportCubicWebJsonEncoderexceptImportError:json=NoneclassMakeUidTC(TestCase):deftest_1(self):self.assertNotEquals(make_uid('xyz'),make_uid('abcd'))self.assertNotEquals(make_uid('xyz'),make_uid('xyz'))deftest_2(self):d=set()whilelen(d)<10000:uid=make_uid('xyz')ifuidind:self.fail(len(d))ifre.match('\d',uid):self.fail('make_uid must not return something begining with ''some numeric character, got %s'%uid)d.add(uid)classUStringIOTC(TestCase):deftest_boolean_value(self):self.assert_(UStringIO())classRepeatListTC(TestCase):deftest_base(self):l=RepeatList(3,(1,3))self.assertEquals(l[0],(1,3))self.assertEquals(l[2],(1,3))self.assertEquals(l[-1],(1,3))self.assertEquals(len(l),3)# XXXself.assertEquals(l[4],(1,3))self.failIf(RepeatList(0,None))deftest_slice(self):l=RepeatList(3,(1,3))self.assertEquals(l[0:1],[(1,3)])self.assertEquals(l[0:4],[(1,3)]*3)self.assertEquals(l[:],[(1,3)]*3)deftest_iter(self):self.assertEquals(list(RepeatList(3,(1,3))),[(1,3)]*3)deftest_add(self):l=RepeatList(3,(1,3))self.assertEquals(l+[(1,4)],[(1,3)]*3+[(1,4)])self.assertEquals([(1,4)]+l,[(1,4)]+[(1,3)]*3)self.assertEquals(l+RepeatList(2,(2,3)),[(1,3)]*3+[(2,3)]*2)x=l+RepeatList(2,(1,3))self.assertIsInstance(x,RepeatList)self.assertEquals(len(x),5)self.assertEquals(x[0],(1,3))x=l+[(1,3)]*2self.assertEquals(x,[(1,3)]*5)deftest_eq(self):self.assertEquals(RepeatList(3,(1,3)),[(1,3)]*3)deftest_pop(self):l=RepeatList(3,(1,3))l.pop(2)self.assertEquals(l,[(1,3)]*2)classSizeConstrainedListTC(TestCase):deftest_append(self):l=SizeConstrainedList(10)foriinxrange(12):l.append(i)self.assertEquals(l,range(2,12))deftest_extend(self):testdata=[(range(5),range(5)),(range(10),range(10)),(range(12),range(2,12)),]forextension,expectedintestdata:l=SizeConstrainedList(10)l.extend(extension)yieldself.assertEquals,l,expectedclassJSONEncoderTC(TestCase):defsetUp(self):ifjsonisNone:self.skip('json not available')defencode(self,value):returnjson.dumps(value,cls=CubicWebJsonEncoder)deftest_encoding_dates(self):self.assertEquals(self.encode(datetime.datetime(2009,9,9,20,30)),'"2009/09/09 20:30:00"')self.assertEquals(self.encode(datetime.date(2009,9,9)),'"2009/09/09"')self.assertEquals(self.encode(datetime.time(20,30)),'"20:30:00"')deftest_encoding_decimal(self):self.assertEquals(self.encode(decimal.Decimal('1.2')),'1.2')deftest_encoding_unknown_stuff(self):self.assertEquals(self.encode(TestCase),'null')if__name__=='__main__':unittest_main()