def test_vc_bad_ranges(self): """ Test a value constraint with a range of non-integers. """ domain = Constraint.ValueDomain() with self.assertRaises(Constraint.ValueConstraintError) as ex: domain.add_range("1.45", "5.6") self.assertEquals(ex.exception.message, "Value constraints only support integer ranges")
def test_commit_and_rollback_value(self): """ Test commit and rollback of value constraints. """ d0 = Domain.IntegerDomain() role = Role(name="R1") obj = ObjectType(name="O1", data_type=d0) d1 = Constraint.ValueDomain() d1.add_range("Dog") rvc = Constraint.ValueConstraint(name="RVC", covers=[role], domain=d1) self.assertEquals(role.covered_by, []) rvc.commit() self.assertEquals(role.covered_by, [rvc]) rvc.rollback() self.assertEquals(role.covered_by, []) vc = Constraint.ValueConstraint(name="VTVC", covers=[obj], domain=d1) self.assertEquals(obj.covered_by, []) self.assertEquals(obj.domain, obj.data_type) self.assertEquals(obj.domain, d0) vc.commit() self.assertEquals(obj.covered_by, [vc]) self.assertEquals(obj.domain, d1) self.assertEquals(obj.data_type, d0) vc.rollback() self.assertEquals(obj.covered_by, []) self.assertEquals(obj.domain, obj.data_type) self.assertEquals(obj.domain, d0)
def test_vc_add_enum(self): """ Test the addition of enumerated items to a value constraint.""" domain = Constraint.ValueDomain() domain.add_range("Dog", "Dog") domain.add_range("Cat") domain.add_range(1.35) domain.add_range(9) cons = Constraint.ValueConstraint(domain, name="VC1") self.assertItemsEqual(cons.domain.draw(4), ["Dog", "Cat", 1.35, 9]) self.assertEquals(cons.size, 4)
def test_vc_bad_enum(self): """ Test invalid enumerations in value constraint. """ domain = Constraint.ValueDomain() with self.assertRaises(Constraint.ValueConstraintError) as ex: domain.add_range("Dog", max_open=True) self.assertEquals(ex.exception.message, "Value constraints only support integer ranges") with self.assertRaises(Constraint.ValueConstraintError) as ex: domain.add_range("Dog", min_open=True) self.assertEquals(ex.exception.message, "Value constraints only support integer ranges")
def _load_value_constraint(self, node): """ Load value constraint. """ attribs, name = get_basic_attribs(node) attribs['covers'] = covers = self._get_covered_element(node) data_type = covers[0].data_type if covers else None try: domain = Constraint.ValueDomain() for value_range in node_collection(node, "ValueRanges"): domain.add_range( min_value=value_range.get("MinValue"), max_value=value_range.get("MaxValue"), min_open=(value_range.get("MinInclusion") == "Open"), max_open=(value_range.get("MaxInclusion") == "Open"), data_type=data_type) except Constraint.ValueConstraintError as ex: reason = ex.message.lower() mesg = "Value constraint {0} because {1}".format(name, reason) self.omissions.append(mesg) return None return Constraint.ValueConstraint(domain, **attribs)