def test_derivation_6 (self): StringVariable = Variable.derive_type ('StringVariable', allowed_value_types = StringType, setter = lambda variable, value: None) variable = StringVariable ('') self.assertRaises (ValueError, lambda: variable.set (None))
def test_derivation_slots (self): DerivedVariable = AbstractVariable.derive_type ('DerivedVariable') self.assertRaises (AttributeError, self.non_existing_attribute_setter (DerivedVariable ())) DerivedVariable = AbstractValueTrackingVariable.derive_type ('DerivedVariable') self.assertRaises (AttributeError, self.non_existing_attribute_setter (DerivedVariable ())) DerivedVariable = Variable.derive_type ('DerivedVariable') self.assertRaises (AttributeError, self.non_existing_attribute_setter (DerivedVariable ()))
def test_multiple_derivation (self): # Derive two types and make sure they don't spoil each other's is_allowed_value() # method. IntVariable = Variable.derive_type ('IntVariable', allowed_value_types = int) StrVariable = Variable.derive_type ('StrVariable', allowed_value_types = str) integer = IntVariable (10) string = StrVariable ('test') integer.value = 20 self.assertEqual (integer.value, 20) string.value = 'string' self.assertEqual (string.value, 'string') self.assertRaises (ValueError, lambda: integer.set ('foo')) self.assertRaises (ValueError, lambda: string .set (-1000)) self.assertRaises (ValueError, lambda: integer.set ('')) self.assertRaises (ValueError, lambda: string .set (0))
def test_derivation_5 (self): IntVariable = Variable.derive_type ('IntVariable', allowed_value_types = int, default_value = 10) variable = IntVariable () self.assertEqual (variable.value, 10) variable = IntVariable (30) self.assertEqual (variable.value, 30) self.assertRaises (ValueError, lambda: variable.set ('string'))
def test_derivation_2 (self): EnumVariable = Variable.derive_type ('EnumVariable', allowed_values = (None, 'a', 'b', 'c')) variable = EnumVariable () self.assertEqual (variable.value, None) self.assertEqual (variable.mutable, True) variable.value = 'b' self.assertEqual (variable.value, 'b') self.assertRaises (ValueError, lambda: variable.set (15)) self.assertRaises (ValueError, lambda: variable.set ('d'))
def test_derivation_1 (self): IntVariable = Variable.derive_type ('IntVariable', allowed_value_types = int) # Since None is not an allowed value, there must be no default constructor. self.assertRaises (TypeError, lambda: IntVariable ()) count = IntVariable (10) self.assertEqual (count.value, 10) self.assertEqual (count.mutable, True) count.value = 30 self.assertEqual (count.value, 30) self.assertRaises (ValueError, lambda: count.set ('invalid'))
def test_derivation_4 (self): NumericVariable = Variable.derive_type ('NumericVariable', allowed_value_types = (int, float, complex)) self.assertRaises (TypeError, lambda: NumericVariable ()) variable = NumericVariable (0) variable.value = 15 self.assertEqual (variable.value, 15) variable.value = -2.5 self.assertEqual (variable.value, -2.5) variable.value = 1j self.assertEqual (variable.value, 1j) self.assertRaises (ValueError, lambda: variable.set ('string')) self.assertRaises (ValueError, lambda: variable.set ([]))