123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #-*- coding: utf-8 -*-
-
- import unittest
-
- from lodel.editorial_model.model import EditorialModel
- from lodel.editorial_model.components import EmComponent, EmClass, EmField, EmGroup
- from lodel.utils.mlstring import MlString
- from lodel.editorial_model.exceptions import *
-
- class EditorialModelTestCase(unittest.TestCase):
-
- def test_d_hash(self):
- """ Test the deterministic hash method """
- model = EditorialModel("test model", description = "Test EM")
- cls1 = model.new_class('testclass1', display_name = 'Classe de test 1', help_text = 'super aide')
- c1f1 = cls1.new_field('c1testfield1', data_handler = None)
- c1f2 = cls1.new_field('c1testfield2', data_handler = None)
- cls2 = model.new_class('testclass2')
- c2f1 = cls2.new_field('c2testfield1', data_handler = None)
- c2f2 = cls2.new_field('c2testfield2', data_handler = None)
- grp1 = model.new_group('testgroup1')
- grp1.add_components((cls1, c1f1))
- grp2 = model.new_group('testgroup2')
- grp2.add_components((cls2, c1f2, c2f1, c2f2))
- grp2.add_dependencie(grp1)
- e_hash = 105398984207109703509695004279282115094
- self.assertEqual(model.d_hash(), e_hash)
-
- c2f1.uid = 'foobar'
- self.assertNotEqual(model.d_hash(), e_hash)
-
- c2f1.uid = 'c2testfield1'
- self.assertEqual(model.d_hash(), e_hash)
-
-
- class EmComponentTestCase(unittest.TestCase):
-
- def test_abstract_init(self):
- with self.assertRaises(NotImplementedError):
- EmComponent('test')
-
-
- class EmClassTestCase(unittest.TestCase):
-
- def test_init(self):
- cls = EmClass('testClass', 'test class', 'A test class')
- self.assertEqual(cls.uid, 'testClass')
- self.assertEqual(cls.display_name, MlString('test class'))
- self.assertEqual(cls.help_text, MlString('A test class'))
-
- def test_fields(self):
- """ Bad test on add field method (only check uid presence) """
- cls = EmClass('testClass', 'test_class', 'A test class')
- cls.new_field('name', data_handler = None)
- cls.new_field('string', data_handler = None)
- cls.new_field('lodel_id', data_handler = None)
-
- fields = cls.fields()
- self.assertEqual(len(fields), 3)
- self.assertEqual(
- set([f.uid for f in fields]),
- set(['name', 'string', 'lodel_id'])
- )
-
- def test_d_hash(self):
- """ Test the deterministic hash method """
- field = EmField('test field', 'foobar')
- e_hash = 16085043663725855508634914630594968402
- self.assertEqual(field.d_hash(), e_hash)
- field.uid = 'test field.'
- self.assertNotEqual(field.d_hash(), e_hash)
-
- class EmGroupTestCase(unittest.TestCase):
-
- def test_init(self):
- """ Test EmGroup instanciation """
- grp = EmGroup('testgrp', display_name = "Test group", help_text="No Help")
- self.assertEqual(grp.uid, 'testgrp')
- self.assertEqual(grp.dependencies(), dict())
- self.assertEqual(grp.display_name, MlString("Test group"))
- self.assertEqual(grp.help_text, MlString("No Help"))
-
- grp2 = EmGroup('test')
- self.assertEqual(grp2.uid, 'test')
- self.assertEqual(grp2.display_name, None)
- self.assertEqual(grp2.help_text, None)
-
- grp3 = EmGroup('depends', depends = (grp, grp2))
- self.assertEqual(set(grp3.dependencies().values()), set((grp, grp2)))
-
- def test_deps(self):
- """ Test dependencies """
- grp1 = EmGroup('grp1')
- grp2 = EmGroup('grp2')
- grp3 = EmGroup('grp3')
- grp4 = EmGroup('grp4')
-
- grp2.add_dependencie(grp1)
- grp3.add_dependencie(grp2)
- grp4.add_dependencie(grp2)
- grp4.add_dependencie(grp1)
-
- self.assertEqual(set(grp1.dependencies().values()), set())
- self.assertEqual(set(grp2.dependencies().values()), set([grp1]))
- self.assertEqual(set(grp3.dependencies().values()), set([grp2]))
- self.assertEqual(set(grp4.dependencies().values()), set([grp2, grp1]))
-
- self.assertEqual(set(grp3.dependencies(True).values()), set([grp2, grp1]))
- self.assertEqual(set(grp4.dependencies(True).values()), set([grp2, grp1]))
-
- self.assertEqual(set(grp1.required_by.values()), set([grp2, grp4]))
- self.assertEqual(set(grp2.required_by.values()), set([grp3, grp4]))
- self.assertEqual(set(grp3.required_by.values()), set())
- self.assertEqual(set(grp4.required_by.values()), set())
-
- for grp in [grp1, grp2, grp3, grp4]:
- for uid, dep in grp.dependencies(recursive = True).items():
- self.assertEqual(uid, dep.uid)
- for uid, dep in grp.required_by.items():
- self.assertEqual(uid, dep.uid)
- def test_deps_complex(self):
- """ More complex dependencies handling test """
- grps = [ EmGroup('group%d' % i) for i in range(6) ]
- grps[5].add_dependencie( (grps[1], grps[2], grps[4]) )
- grps[4].add_dependencie( (grps[1], grps[3]) )
- grps[3].add_dependencie( (grps[0],) )
- grps[1].add_dependencie( (grps[2], grps[0]) )
- self.assertEqual(
- set(grps[5].dependencies(True).values()),
- set( grps[i] for i in range(5))
- )
- self.assertEqual(
- set(grps[4].dependencies(True).values()),
- set( grps[i] for i in range(4))
- )
- grps[2].add_dependencie(grps[0])
- self.assertEqual(
- set(grps[5].dependencies(True).values()),
- set( grps[i] for i in range(5))
- )
- self.assertEqual(
- set(grps[4].dependencies(True).values()),
- set( grps[i] for i in range(4))
- )
- # Inserting circular deps
- with self.assertRaises(EditorialModelError):
- grps[0].add_dependencie(grps[5])
-
- def test_circular_dep(self):
- """ Test circular dependencies detection """
- grps = [ EmGroup('group%d' % i) for i in range(10) ]
- for i in range(1,10):
- grps[i].add_dependencie(grps[i-1])
-
- for i in range(1,10):
- for j in range(i+1,10):
- with self.assertRaises(EditorialModelError):
- grps[i].add_dependencie(grps[j])
-
- def test_d_hash(self):
- """ Test the deterministic hash method """
- grp = EmGroup('testgrp', display_name = "Test group", help_text="No Help")
- self.assertEqual(grp.d_hash(), 2280847427800301892840867965375148376323815160723628142616247375345365409972670566216414157235977332113867542043807295933781561540623070667142779076339712861412992217365501372435232184530261327450635383095)
|