Esempio n. 1
0
 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")
Esempio n. 2
0
    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)
Esempio n. 3
0
 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)
Esempio n. 4
0
    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")
Esempio n. 5
0
    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)