Browse Source

Added docstrings comments to tests and fixed "false hidden failure"

Added docstrings comments to tests (for fancy output with -v ).
Fixed strange hidden failure that make tests stops on non failed tests with -f option. Those false failure seems to comes from with self.subTest blocs with functions calls that does assertion.
Yann Weber 10 years ago
parent
commit
166dc6ad75

+ 14
- 0
EditorialModel/test/test_classes.py View File

@@ -53,6 +53,7 @@ class TestEmClassCreation(ClassesTestCase):
53 53
     # test if a table 'testClass' was created
54 54
     # should be able to select on the created table
55 55
     def test_table_em_classes(self):
56
+        """ Testing ability of EmClass to crate its associated table """
56 57
         conn = sqlutils.getEngine().connect()
57 58
         a = sqlutils.meta(conn)
58 59
         try:
@@ -67,16 +68,19 @@ class TestEmClassCreation(ClassesTestCase):
67 68
 
68 69
     # the uid should be 1
69 70
     def test_uid(self):
71
+        """ testing uid """
70 72
         cl = EmClass('testClass')
71 73
         self.assertEqual(cl.uid, 1)
72 74
 
73 75
     # the name should be the one given
74 76
     def test_classname(self):
77
+        """ Testing name consistency on instanciation """
75 78
         cl = EmClass('testClass')
76 79
         self.assertEqual(cl.name, 'testClass')
77 80
 
78 81
     # the classtype should have the name of the EmClassType
79 82
     def test_classtype(self):
83
+        """ Testing classtype consistency """
80 84
         cl = EmClass('testClass')
81 85
         self.assertEqual(cl.classtype, EmClassType.entity['name'])
82 86
 
@@ -92,6 +96,7 @@ class TestEmClassDeletion(ClassesTestCase):
92 96
     
93 97
     # test if the table is deleted after a call to delete
94 98
     def test_table_delete(self):
99
+        """ Test associated table deletetion on EmClass deletion """
95 100
         dbe = sqlutils.getEngine()
96 101
         for i,class_name in enumerate(self.names):
97 102
             cur_class = EmClass(class_name)
@@ -108,6 +113,7 @@ class TestEmClassDeletion(ClassesTestCase):
108 113
     
109 114
     # test if delete refuse to delete if a class had fieldgroups
110 115
     def test_table_refuse_delete(self):
116
+        """ Test delete on an EmClass has fieldgroup """
111 117
         test_class = EmClass(self.names[0])
112 118
         fieldgroup = EmFieldGroup.create('fooFieldGroup', test_class)
113 119
         self.assertFalse(test_class.delete(), "delete method returns True but the class has fieldgroup")
@@ -134,6 +140,7 @@ class TestEmClassFieldgroups(ClassesTestCase):
134 140
 
135 141
     # test if fieldgroups() return a list of EmFieldGroup
136 142
     def test_fieldgroups(self):
143
+        """ Test if fieldgroups method return the right list of EmFielGroup """
137 144
         test_class = EmClass('testClass')
138 145
         fg1 = EmFieldGroup.create('fg1', test_class)
139 146
         fg2 = EmFieldGroup.create('fg2', test_class)
@@ -145,6 +152,7 @@ class TestEmClassFieldgroups(ClassesTestCase):
145 152
 
146 153
     # with no fieldgroups fieldgroups() should return an empty list
147 154
     def test_no_fieldgroups(self):
155
+        """ Test fielgroups method on an empty EmClass """
148 156
         test_class = EmClass('testClass')
149 157
         fieldgroups = test_class.fieldgroups()
150 158
         self.assertEqual(fieldgroups, [])
@@ -162,6 +170,7 @@ class TestEmClassTypes(ClassesTestCase):
162 170
 
163 171
     # test if types() return a list of EmType
164 172
     def test_types(self):
173
+        """ Test if types method return the right list of EmType """
165 174
         test_class = EmClass('testClass')
166 175
         t1 = EmType.create('t1', test_class)
167 176
         t2 = EmType.create('t2', test_class)
@@ -173,6 +182,7 @@ class TestEmClassTypes(ClassesTestCase):
173 182
 
174 183
     # with no type types() should return an empty list
175 184
     def test_no_types(self):
185
+        """ Test types method on an EmClass with no associated types """
176 186
         test_class = EmClass('testClass')
177 187
         types = test_class.types()
178 188
         self.assertEqual(types, [])
@@ -190,6 +200,7 @@ class TestEmClassFields(ClassesTestCase):
190 200
 
191 201
     # test if fields() return a list of EmField
192 202
     def test_fields(self):
203
+        """ Testing fields method """
193 204
         test_class = EmClass('testClass')
194 205
         fg = EmFieldGroup.create('fg', test_class)
195 206
         f1 = EmField.create('f1', fg, fieldTypes.EmField_char())
@@ -202,6 +213,7 @@ class TestEmClassFields(ClassesTestCase):
202 213
 
203 214
     # with no field fields() should return an empty list
204 215
     def test_no_fields(self):
216
+        """ Testing fields method on an EmClass with no associated fields """
205 217
         test_class = EmClass('testClass')
206 218
         fields = test_class.fields()
207 219
         self.assertEqual(fields, [])
@@ -224,6 +236,7 @@ class TestEmClassLinkType(ClassesTestCase):
224 236
     # test if a table 'testEntity_keywords' was created
225 237
     # should be able to select on the created table
226 238
     def test_table_classes_types(self):
239
+        """ Test if a table 'testEntity_keywords' was created """
227 240
         conn = sqlutils.getEngine().connect()
228 241
         a = sqlutils.meta(conn)
229 242
         try:
@@ -238,6 +251,7 @@ class TestEmClassLinkType(ClassesTestCase):
238 251
 
239 252
     # test if we can retrieve the linked type
240 253
     def test_linked_types(self):
254
+        """ Test linked_types """
241 255
         testEntity = EmClass('testEntity')
242 256
         linked_types = testEntity.linked_types()
243 257
         self.assertEqual(linked_types[0].name, 'keywords')

+ 69
- 100
EditorialModel/test/test_component.py View File

@@ -316,40 +316,40 @@ class TestSave(ComponentTestCase):
316 316
         time.sleep(2) # We have to sleep 2 secs here, so the update_date will be at least 2 secs more than newval['date_update']
317 317
         
318 318
         #name change
319
-        with self.subTest("Save after name change"):
320
-            newval['name'] = test_comp.name = 'newname'
321
-            test_comp.save()
322
-            self._savecheck(test_comp, newval)
319
+        newval['name'] = test_comp.name = 'newname'
320
+        test_comp.save()
321
+        self._savecheck(test_comp, newval)
322
+        self.assertTrue(True)
323 323
 
324 324
         #help change
325
-        with self.subTest("Save after help change"):
326
-            newval['help'] = '{"fr": "help fr", "en":"help en", "es":"help es"}'
327
-            test_comp.help = MlString.load(newval['help'])
328
-            test_comp.save()
329
-            self._savecheck(test_comp, newval)
330
-        
325
+        newval['help'] = '{"fr": "help fr", "en":"help en", "es":"help es"}'
326
+        test_comp.help = MlString.load(newval['help'])
327
+        test_comp.save()
328
+        self._savecheck(test_comp, newval)
329
+        self.assertTrue(True)
330
+    
331 331
         #string change
332
-        with self.subTest("Save after string change"):
333
-            newval['string'] = '{"fr": "string fr", "en":"string en", "es":"string es"}'
334
-            test_comp.string = MlString.load(newval['string'])
335
-            test_comp.save()
336
-            self._savecheck(test_comp, newval)
332
+        newval['string'] = '{"fr": "string fr", "en":"string en", "es":"string es"}'
333
+        test_comp.string = MlString.load(newval['string'])
334
+        test_comp.save()
335
+        self._savecheck(test_comp, newval)
336
+        self.assertTrue(True)
337 337
 
338 338
         #no change
339
-        with self.subTest("Save without any change"):
340
-            test_comp.save()
341
-            self._savecheck(test_comp, newval)
339
+        test_comp.save()
340
+        self._savecheck(test_comp, newval)
341
+        self.assertTrue(True)
342 342
 
343 343
         #change all
344
-        with self.subTest("Save after name, help and string change"):
345
-            test_comp.name = newval['name'] = test_comp.name = 'newnewname'
346
-            newval['help'] = '{"fr": "help fra", "en":"help eng", "es":"help esp"}'
347
-            test_comp.help = MlString.load(newval['help'])
348
-            newval['string'] = '{"fr": "string FR", "en":"string EN", "es":"string ES", "foolang":"foofoobar"}'
349
-            test_comp.string = MlString.load(newval['string'])
344
+        test_comp.name = newval['name'] = test_comp.name = 'newnewname'
345
+        newval['help'] = '{"fr": "help fra", "en":"help eng", "es":"help esp"}'
346
+        test_comp.help = MlString.load(newval['help'])
347
+        newval['string'] = '{"fr": "string FR", "en":"string EN", "es":"string ES", "foolang":"foofoobar"}'
348
+        test_comp.string = MlString.load(newval['string'])
350 349
 
351
-            test_comp.save()
352
-            self._savecheck(test_comp, newval)
350
+        test_comp.save()
351
+        self._savecheck(test_comp, newval)
352
+        self.assertTrue(True)
353 353
 
354 354
         pass
355 355
 
@@ -360,37 +360,24 @@ class TestSave(ComponentTestCase):
360 360
         changes = { 'date_create': datetime.datetime(1982,4,2,13,37), 'date_update': datetime.datetime(1982,4,2,22,43), 'rank': 42 }
361 361
 
362 362
         for prop in changes:
363
-            with self.subTest("Illegal change of "+prop):
364
-                test_comp = EmTestComp(val['name'])
365
-                self.check_equals(val, test_comp, False)
366
-                
367
-                with self.assertRaises(TypeError):
368
-                    setattr(test_comp, prop, changes[prop])
369
-                test_comp.save()
370
-    
371
-                test_comp2 = EmTestComp(val['name'])
372
-    
373
-                if prop  == 'date_create':
374
-                    assertion = self.assertEqualDatetime
375
-                elif prop == 'date_update':
376
-                    continue
377
-                else: #rank
378
-                    assertion = self.assertEqual
379
-    
380
-                assertion(getattr(test_comp,prop), val[prop], "When using setattr the "+prop+" of a component is set : ")
381
-                assertion(getattr(test_comp2, prop), val[prop], "When using setattr and save the "+prop+" of a loaded component is set : ")
382
-    
383
-                # The code block commented bellow uses the values argument of the save method.
384
-                # soon this argument will not being used anymore
385
-                """
386
-                test_comp = EmTestComp(val['name'])
387
-                self.check_equals(val, test_comp)
388
-                test_comp.save({ prop: changes['prop'] })
389
-    
390
-                test_comp2 = EmTestComp(val['name'])
391
-                self.assertEqualDatetime(test_comp.date_create, val[prop], "The "+prop+" of the component instance has been changed")
392
-                self.assertEqualDatetime(test_comp2.date_create, val[prop], "When loaded the "+prop+" has been changed")
393
-                """
363
+            test_comp = EmTestComp(val['name'])
364
+            self.check_equals(val, test_comp, False)
365
+            
366
+            with self.assertRaises(TypeError):
367
+                setattr(test_comp, prop, changes[prop])
368
+            test_comp.save()
369
+
370
+            test_comp2 = EmTestComp(val['name'])
371
+
372
+            if prop  == 'date_create':
373
+                assertion = self.assertEqualDatetime
374
+            elif prop == 'date_update':
375
+                continue
376
+            else: #rank
377
+                assertion = self.assertEqual
378
+
379
+            assertion(getattr(test_comp,prop), val[prop], "When using setattr the "+prop+" of a component is set : ")
380
+            assertion(getattr(test_comp2, prop), val[prop], "When using setattr and save the "+prop+" of a loaded component is set : ")
394 381
         pass
395 382
 
396 383
 #====================#
@@ -399,40 +386,35 @@ class TestSave(ComponentTestCase):
399 386
 class TestCreate(ComponentTestCase):
400 387
     
401 388
     def test_create(self):
402
-        
403
-        with self.subTest("Create with all infos"):
404
-            vals = {'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}'}
405
-            tc = EmTestComp.create(**vals)
406
-            self.check_equals(vals, tc, "The created EmTestComp hasn't the good properties values")
407
-            tcdb = EmTestComp('created1')
408
-            self.check_equals(vals, tc, "When fetched from Db the created EmTestComp hasn't the good properties values")
409
-        
389
+        """Testing EmComponent.create()"""
390
+        vals = {'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en":"help test", "fr":"test help"}'}
391
+        tc = EmTestComp.create(**vals)
392
+        self.check_equals(vals, tc, "The created EmTestComp hasn't the good properties values")
393
+        tcdb = EmTestComp('created1')
394
+        self.check_equals(vals, tc, "When fetched from Db the created EmTestComp hasn't the good properties values")
395
+    
410 396
         # This test assume that string and help has default values
411
-        with self.subTest("Create with minimal infos"):
412
-            vals = { 'name': 'created2', 'rank_fam': 'f' }
413
-            tc = EmTestComp.create(**vals)
414
-            self.check_equals(vals, tc, "The created EmTestComp hasn't the good properties values")
415
-            tcdb = EmTestComp('created1')
416
-            self.check_equals(vals, tc, "When fetched from Db the created EmTestComp hasn't the good properties values")
397
+        vals = { 'name': 'created2', 'rank_fam': 'f' }
398
+        tc = EmTestComp.create(**vals)
399
+        self.check_equals(vals, tc, "The created EmTestComp hasn't the good properties values")
400
+        tcdb = EmTestComp('created1')
401
+        self.check_equals(vals, tc, "When fetched from Db the created EmTestComp hasn't the good properties values")
417 402
         pass
418 403
 
419 404
     def test_create_badargs(self):
420
-        
421
-        with self.subTest("Create with illegal arguments"):
422
-            with self.assertRaises(TypeError, msg="But given a function as argument"):
423
-                tc = EmTestComp.create(print)
424
-            with self.assertRaises(TypeError, msg="But values contains date_create and date_update"):
425
-                vals = { 'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
426
-                tc = EmTestComp.create(**vals)
427
-
428
-        with self.subTest("Create without mandatory arguments"):
429
-            with self.assertRaises(TypeError, msg="But no name was given"):
430
-                vals = { 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
431
-                tc = EmTestComp.create(**vals)
432
-            with self.assertRaises(TypeError, msg="But no rank_fam was given"):
433
-                vals = { 'name': 'created1', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
434
-                tc = EmTestComp.create(**vals)
405
+        """Testing EmComponent.create() with bad arguments"""
406
+        with self.assertRaises(TypeError, msg="But given a function as argument"):
407
+            tc = EmTestComp.create(print)
408
+        with self.assertRaises(TypeError, msg="But values contains date_create and date_update"):
409
+            vals = { 'name': 'created1', 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
410
+            tc = EmTestComp.create(**vals)
435 411
 
412
+        with self.assertRaises(TypeError, msg="But no name was given"):
413
+            vals = { 'rank_fam': 'f', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
414
+            tc = EmTestComp.create(**vals)
415
+        with self.assertRaises(TypeError, msg="But no rank_fam was given"):
416
+            vals = { 'name': 'created1', 'string': '{"fr":"testcomp"}', 'help': '{"en" :"help test", "fr":"test help"}', 'rank': 6, 'date_create': 0 , 'date_update': 0 }
417
+            tc = EmTestComp.create(**vals)
436 418
         pass
437 419
 
438 420
 #====================#
@@ -476,6 +458,7 @@ class TestDelete(ComponentTestCase):
476 458
                     tc = EmTestComp(vals[j]['name'])
477 459
                 except EmComponentNotExistError:
478 460
                     self.fail('EmComponent should not be deleted')
461
+        self.assertTrue(True)
479 462
         pass
480 463
 
481 464
 
@@ -559,20 +542,6 @@ class TestModifyRank(ComponentTestCase):
559 542
             for j in range(i+1,nmax+1):
560 543
                 test_comp = EmTestComp(names[j])
561 544
                 self.assertEqual(test_comp.rank, j)
562
-
563
-        #Not inverting the list (makes swap but at the end we are in reverse state again)
564
-        #--------------------------------------------------------------------------------
565
-        for i in range(nmax,-1,-1):
566
-            test_comp = EmTestComp(names[i])
567
-            test_comp.modify_rank(nmax,'=')
568
-            self.assertEqual(test_comp.rank, nmax)
569
-            for j in range(i,nmax+1):
570
-                test_comp = EmTestComp(names[j])
571
-                self.assertEqual(test_comp.rank, nmax-(j-i), "Excepted rank was '"+str(nmax-(j-i))+"' but got '"+str(test_comp.rank)+"'). Ranks dump : "+self.dump_ranks())
572
-            for j in range(0,i):
573
-                test_comp = EmTestComp(names[j])
574
-                self.assertEqual(test_comp.rank, i-j-1)
575
-
576 545
         pass
577 546
 
578 547
     def test_modify_rank_relative(self):

+ 7
- 0
EditorialModel/test/test_field.py View File

@@ -32,6 +32,11 @@ def setUpModule():
32 32
     initTestDb(TEST_FIELD_DBNAME)
33 33
     setDbConf(TEST_FIELD_DBNAME)
34 34
     logging.basicConfig(level=logging.CRITICAL)
35
+    pass
36
+
37
+def tearDownModule():
38
+    cleanDb(TEST_FIELD_DBNAME)
39
+    pass
35 40
 
36 41
 
37 42
 ## FieldTestCase (Class)
@@ -111,6 +116,7 @@ class TestField(FieldTestCase):
111 116
     #
112 117
     # tests the creation process of a field
113 118
     def testCreate(self):
119
+        """ Testing fields creation process """
114 120
         '''
115 121
         field_values = {
116 122
             'name':'testfield1',
@@ -134,6 +140,7 @@ class TestField(FieldTestCase):
134 140
         pass
135 141
     
136 142
     def test_deletion(self):
143
+        """ Testing fields deletion process """
137 144
         field_names = ['field1', 'field2']
138 145
         for name in field_names:
139 146
             EmField.create(name=name, fieldgroup=self.testFieldgroup, fieldtype = self.testFieldType)

+ 12
- 11
EditorialModel/test/test_fieldgroups.py View File

@@ -189,6 +189,7 @@ class TestCreate(FieldGroupTestCase):
189 189
 class TestFields(FieldGroupTestCase):
190 190
 
191 191
     def setUp(self):
192
+        super(TestFields, self).setUp()
192 193
         self.fg1 = EmFieldGroup.create('testfg', EmClass('entity1'))
193 194
         self.fg2 = EmFieldGroup.create('testfg2', EmClass('entry1'))
194 195
         self.fg3 = EmFieldGroup.create('testfg3', EmClass('entry1'))
@@ -225,17 +226,17 @@ class TestFields(FieldGroupTestCase):
225 226
         }
226 227
 
227 228
         for name in tests:
228
-            with self.subTest("Testing on "+name+" instanciated EmFieldGroups"):
229
-                fg = tests[name]
230
-                flist = fg.fields()
231
-                res = []
232
-                for f in flist:
233
-                    res.append(f.uid)
234
-                self.assertEqual(set(res), set(excepted1))
235
-
236
-        with self.subTest("Testing empty fieldgroup"):
237
-            fg = self.fg3
229
+            fg = tests[name]
238 230
             flist = fg.fields()
239
-            self.assertEqual(len(flist), 0)
231
+            res = []
232
+            for f in flist:
233
+                res.append(f.uid)
234
+            self.assertEqual(set(res), set(excepted1))
235
+
236
+    def test_empty_fields(self):
237
+        """ Testing fields method on an empty fieldgroup """
238
+        fg = self.fg3
239
+        flist = fg.fields()
240
+        self.assertEqual(len(flist), 0)
240 241
         pass
241 242
 

+ 10
- 0
EditorialModel/test/test_types.py View File

@@ -73,16 +73,19 @@ class TypeTestCase(TestCase):
73 73
 
74 74
 class TestSelectField(TypeTestCase):
75 75
     def testSelectField(self):
76
+        """ Testing optionnal field selection """
76 77
         self.emtype.select_field(self.emfield)
77 78
         self.assertIsNotNone(Em_Field_Type(self.emtype.uid, self.emfield.uid))
78 79
 
79 80
     def testUnselectField(self):
81
+        """ Testing optionnal field unselection """
80 82
         self.emtype.unselect_field(self.emfield)
81 83
         self.assertFalse(Em_Field_Type(self.emtype.uid, self.emfield.uid).exists())
82 84
 
83 85
 class TestLinkedTypes(TypeTestCase):
84 86
     @unittest.skip("Not yet implemented")
85 87
     def testLinkedtypes(self):
88
+        """ Testing linked types """
86 89
         self.emtype.add_superior(self.emtype2, EmNature.PARENT)
87 90
         self.emtype3.add_superior(self.emtype, EmNature.PARENT)
88 91
 
@@ -123,6 +126,7 @@ class TestTypeHierarchy(TypeTestCase):
123 126
             
124 127
 
125 128
     def testAddSuperiorParent(self):
129
+        """ Testing add superior in relation with Parent nature """
126 130
         self.emtype.add_superior(self.emtype2, EmNature.PARENT)
127 131
         self.check_add_sup(self.emtype, self.emtype2, EmNature.PARENT)
128 132
 
@@ -131,6 +135,7 @@ class TestTypeHierarchy(TypeTestCase):
131 135
         pass
132 136
 
133 137
     def testAddSuperiorTranslation(self):
138
+        """ Testing add superior in relation with Translation nature """
134 139
         self.emtype.add_superior(self.emtype, EmNature.TRANSLATION)
135 140
         self.check_add_sup(self.emtype, self.emtype, EmNature.TRANSLATION)
136 141
 
@@ -139,6 +144,7 @@ class TestTypeHierarchy(TypeTestCase):
139 144
         pass
140 145
 
141 146
     def testAddSuperiorIdentity(self):
147
+        """ Testing add superior in relation with Identity nature """
142 148
         self.emtype6.add_superior(self.emtype6, EmNature.IDENTITY)
143 149
         self.check_add_sup(self.emtype6, self.emtype6, EmNature.IDENTITY)
144 150
         self.emtype6.add_superior(self.emtype7, EmNature.IDENTITY)
@@ -146,6 +152,7 @@ class TestTypeHierarchy(TypeTestCase):
146 152
         pass
147 153
 
148 154
     def testIllegalSuperior(self):
155
+        """ Testing invalid add superior """
149 156
         illegal_combinations = [
150 157
             (self.emtype, self.emtype4, EmNature.PARENT),
151 158
             (self.emtype, self.emtype2, EmNature.TRANSLATION),
@@ -163,6 +170,7 @@ class TestTypeHierarchy(TypeTestCase):
163 170
         pass
164 171
     
165 172
     def testDelSuperior(self):
173
+        """ Testing superior deletion """
166 174
         self.emtype.add_superior(self.emtype2, EmNature.PARENT)
167 175
         self.emtype.add_superior(self.emtype, EmNature.PARENT)
168 176
         self.emtype.add_superior(self.emtype, EmNature.TRANSLATION)
@@ -179,12 +187,14 @@ class TestTypeHierarchy(TypeTestCase):
179 187
 
180 188
 class TestDeleteTypes(TypeTestCase):
181 189
     def testDeleteTypes(self):
190
+        """ Testing EmType deletion """
182 191
         type_name = self.emtype.name
183 192
         self.assertTrue(self.emtype.delete(), "delete method returns False but should return True")
184 193
         with self.assertRaises(EmComponentNotExistError, msg="Type not deleted"):
185 194
             EmType(type_name)
186 195
 
187 196
     def testUndeletableTypes(self):
197
+        """ Testing invalid non empty EmType deletion """
188 198
         type_name = self.emtype.name
189 199
         self.emtype2.add_superior(self.emtype, 'parent')
190 200
         self.assertFalse(self.emtype.delete(), "delete return True but should return False")

Loading…
Cancel
Save