示例#1
0
    def test_get_set_property(self):
        trait = CTrait(TraitKind.trait)

        # Get the property, ensure None
        self.assertIsNone(trait.property_fields)

        def value_get(self):
            return self.__dict__.get("_value", 0)

        def value_set(self, value):
            old_value = self.__dict__.get("_value", 0)
            if value != old_value:
                self._value = value
                self.trait_property_changed("value", old_value, value)

        # Set the callables
        trait.property_fields = (value_get, value_set, None)

        fget, fset, validate = trait.property_fields

        self.assertIs(fget, value_get)
        self.assertIs(fset, value_set)
        self.assertIsNone(validate)

        # Ensure that _get_property does not accept arguments.
        with self.assertRaises(TypeError):
            trait._get_property(fget)
示例#2
0
    def test_is_mapped(self):
        trait = CTrait(TraitKind.trait)

        self.assertFalse(trait.is_mapped)

        trait.is_mapped = True

        self.assertTrue(trait.is_mapped)
示例#3
0
    def test_modify_delegate(self):
        trait = CTrait(TraitKind.trait)

        self.assertFalse(trait.modify_delegate)

        trait.modify_delegate = True

        self.assertTrue(trait.modify_delegate)
示例#4
0
    def test_setattr_original_value(self):
        trait = CTrait(TraitKind.trait)

        self.assertFalse(trait.setattr_original_value)

        trait.setattr_original_value = True

        self.assertTrue(trait.setattr_original_value)
示例#5
0
    def test_invalid_comparison_mode(self):
        trait = CTrait(TraitKind.trait)

        # comparison modes other than {0,1,2}
        # are invalid
        with self.assertRaises(ValueError):
            trait.comparison_mode = -1

        with self.assertRaises(ValueError):
            trait.comparison_mode = 3
示例#6
0
    def test_is_property(self):
        trait = CTrait(TraitKind.trait)

        self.assertFalse(trait.is_property)

        trait.property(getter, 0, setter, 1, validator, 1)

        self.assertTrue(trait.is_property)

        with self.assertRaises(AttributeError):
            trait.is_property = False
示例#7
0
    def test_comparison_mode_unchanged_if_invalid(self):
        trait = CTrait(TraitKind.trait)
        default_comparison_mode = trait.comparison_mode

        self.assertNotEqual(default_comparison_mode, ComparisonMode.none)

        trait.comparison_mode = ComparisonMode.none

        with self.assertRaises(ValueError):
            trait.comparison_mode = -1

        self.assertEqual(trait.comparison_mode, ComparisonMode.none)
示例#8
0
    def test_default_value_for_set_is_deprecated(self):
        trait = CTrait(TraitKind.trait)
        with warnings.catch_warnings(record=True) as warn_msgs:
            warnings.simplefilter("always", DeprecationWarning)
            trait.default_value(DefaultValue.constant, 3.7)

        self.assertEqual(len(warn_msgs), 1)
        warn_msg = warn_msgs[0]
        self.assertIn(
            "default_value method with arguments is deprecated",
            str(warn_msg.message),
        )
        _, _, this_module = __name__.rpartition(".")
        self.assertIn(this_module, warn_msg.filename)
示例#9
0
    def test_set_and_get_default_value(self):
        trait = CTrait(TraitKind.trait)
        trait.set_default_value(DefaultValue.constant, 2.3)
        self.assertEqual(trait.default_value(), (DefaultValue.constant, 2.3))

        trait.set_default_value(DefaultValue.list_copy, [1, 2, 3])
        self.assertEqual(trait.default_value(),
                         (DefaultValue.list_copy, [1, 2, 3]))
示例#10
0
    def test_comparison_mode_enum(self):
        trait = CTrait(TraitKind.trait)

        trait.comparison_mode = ComparisonMode.none

        self.assertIsInstance(trait.comparison_mode, ComparisonMode)
        self.assertEqual(trait.comparison_mode, ComparisonMode.none)

        trait.comparison_mode = ComparisonMode.identity

        self.assertIsInstance(trait.comparison_mode, ComparisonMode)
        self.assertEqual(trait.comparison_mode, ComparisonMode.identity)

        trait.comparison_mode = ComparisonMode.equality

        self.assertIsInstance(trait.comparison_mode, ComparisonMode)
        self.assertEqual(trait.comparison_mode, ComparisonMode.equality)
示例#11
0
    def test_unsafe_set_value(self):
        # Regression test for enthought/traits#832. The test below causes
        # a segfault (on at least some systems) before the fix.

        def get_handler_refcount():
            sys.getrefcount(tr.handler)

        # Anything that we can create a weakref to works here.
        weakrefable_object = {1, 2, 3}

        tr = CTrait(0)
        tr.handler = Any(weakrefable_object)
        finalizer = weakref.finalize(weakrefable_object, get_handler_refcount)
        del weakrefable_object

        # Reassigning the handler should trigger the finaliser.
        self.assertTrue(finalizer.alive)
        tr.handler = None
        self.assertFalse(finalizer.alive)
        self.assertIsNone(tr.handler)
示例#12
0
    def test_assign_post_setattr_none(self):
        old_value = "old_value"
        new_value = "new_value"

        def post_setattr_func(obj, name, value):
            obj.output_variable = value

        trait = CTrait(TraitKind.trait)

        class TestClass(HasTraits):
            atr = trait

        trait.post_setattr = post_setattr_func
        self.assertIsNotNone(trait.post_setattr)

        obj = TestClass()
        obj.atr = old_value
        self.assertEqual(old_value, obj.output_variable)

        trait.post_setattr = None
        self.assertIsNone(trait.post_setattr)
        obj.atr = new_value
        self.assertEqual(old_value, obj.output_variable)

        trait.post_setattr = post_setattr_func
        obj.atr = old_value
        self.assertEqual(old_value, obj.output_variable)

        with self.assertRaises(ValueError):
            trait.post_setattr = "Invalid"
示例#13
0
    def test_bad_default_value_type(self):
        trait = CTrait(TraitKind.trait)

        with self.assertRaises(ValueError):
            trait.set_default_value(-1, None)

        with self.assertRaises(ValueError):
            trait.set_default_value(MAXIMUM_DEFAULT_VALUE_TYPE + 1, None)
示例#14
0
    def test_exception_from_attribute_access(self):
        # Regression test for enthought/traits#946.

        # Danger: we're (temporarily) mutating global state here! Check that
        # we're not touching an attribute that actually exists.
        self.assertFalse(hasattr(CTrait, "badattr_test"))

        CTrait.badattr_test = property(lambda self: 1 / 0)
        try:
            ctrait = CTrait(0)
            with self.assertRaises(ZeroDivisionError):
                ctrait.badattr_test
        finally:
            del CTrait.badattr_test
示例#15
0
    def test_default_initialization(self):
        ctrait = CTrait()

        validate = unittest.mock.MagicMock(return_value="baz")
        ctrait.set_validate(validate)

        class Foo(HasTraits):
            bar = ctrait

            bar_changed = List

            def _bar_changed(self, new):
                self.bar_changed.append(new)

        foo = Foo()

        self.assertEqual(len(foo.bar_changed), 0)

        foo.bar = 1

        validate.assert_called_once_with(foo, "bar", 1)
        self.assertEqual(foo.bar, "baz")
        self.assertEqual(len(foo.bar_changed), 1)
        self.assertEqual(foo.bar_changed[0], "baz")
示例#16
0
 def test_initialization_with_keywords_fails(self):
     with self.assertRaises(TraitError):
         CTrait(kind=0)
示例#17
0
 def test_initial_default_value(self):
     trait = CTrait(TraitKind.trait)
     self.assertEqual(
         trait.default_value(),
         (DefaultValue.constant, None),
     )
示例#18
0
 def test_invalid_initialization(self):
     with self.assertRaises(TraitError):
         CTrait(max(TraitKind) + 1)
示例#19
0
 def test_failed_attribute_access(self):
     ctrait = CTrait(0)
     self.assertIsNone(ctrait.non_existent)
示例#20
0
    def test_default_comparison_mode(self):
        trait = CTrait(TraitKind.trait)

        self.assertIsInstance(trait.comparison_mode, ComparisonMode)
        self.assertEqual(trait.comparison_mode, ComparisonMode.equality)