X Tutup
# -*- coding: utf-8 -*- # TODO: Add tests for ClassicClass, NewStyleClass? """Test CLR class support.""" import Python.Test as Test import System import pytest from ._compat import DictProxyType, range def test_basic_reference_type(): """Test usage of CLR defined reference types.""" assert System.String.Empty == "" def test_basic_value_type(): """Test usage of CLR defined value types.""" assert System.Int32.MaxValue == 2147483647 def test_class_standard_attrs(): """Test standard class attributes.""" from Python.Test import ClassTest assert ClassTest.__name__ == 'ClassTest' assert ClassTest.__module__ == 'Python.Test' assert isinstance(ClassTest.__dict__, DictProxyType) assert len(ClassTest.__doc__) > 0 def test_class_docstrings(): """Test standard class docstring generation""" from Python.Test import ClassTest value = 'Void .ctor()' assert ClassTest.__doc__ == value def test_class_default_str(): """Test the default __str__ implementation for managed objects.""" s = System.String("this is a test") assert str(s) == "this is a test" def test_class_default_repr(): """Test the default __repr__ implementation for managed objects.""" s = System.String("this is a test") assert repr(s).startswith(" -1) and (item < 10) dict_ = ClassTest.GetHashtable() for item in dict_: cname = item.__class__.__name__ assert cname.endswith('DictionaryEntry') def test_ienumerator_iteration(): """Test iteration over objects supporting IEnumerator.""" from Python.Test import ClassTest chars = ClassTest.GetEnumerator() for item in chars: assert item in 'test string' def test_override_get_item(): """Test managed subclass overriding __getitem__.""" from System.Collections import ArrayList # Uses ArrayList instead of Hashtable # As it's available from .Net Core 2.0 without an addref class MyArrayList(ArrayList): def __getitem__(self, key): value = ArrayList.__getitem__(self, key) return 'my ' + str(value) array_list = MyArrayList() array_list.Add('zero') array_list.Add('one') array_list.Add('two') assert array_list[0] == 'my zero' assert array_list[1] == 'my one' assert array_list[2] == 'my two' assert array_list.Count == 3 def test_override_set_item(): """Test managed subclass overriding __setitem__.""" from System.Collections import ArrayList # Uses ArrayList instead of Hashtable # As it's available from .Net Core 2.0 without an addref class MyArrayList(ArrayList): def __setitem__(self, key, value): value = 'your ' + str(value) ArrayList.__setitem__(self, key, value) array_list = MyArrayList() # need to add three items first array_list.Add("a") array_list.Add("b") array_list.Add("c") array_list[0] = 'zero' array_list[1] = 'one' array_list[2] = 'two' assert array_list[0] == 'your zero' assert array_list[1] == 'your one' assert array_list[2] == 'your two' assert array_list.Count == 3 def test_add_and_remove_class_attribute(): from System import TimeSpan for _ in range(100): TimeSpan.new_method = lambda self_: self_.TotalMinutes ts = TimeSpan.FromHours(1) assert ts.new_method() == 60 del TimeSpan.new_method assert not hasattr(ts, "new_method") def test_comparisons(): from System import DateTimeOffset from Python.Test import ClassTest d1 = DateTimeOffset.Parse("2016-11-14") d2 = DateTimeOffset.Parse("2016-11-15") assert (d1 == d2) == False assert (d1 != d2) == True assert (d1 < d2) == True assert (d1 <= d2) == True assert (d1 >= d2) == False assert (d1 > d2) == False assert (d1 == d1) == True assert (d1 != d1) == False assert (d1 < d1) == False assert (d1 <= d1) == True assert (d1 >= d1) == True assert (d1 > d1) == False assert (d2 == d1) == False assert (d2 != d1) == True assert (d2 < d1) == False assert (d2 <= d1) == False assert (d2 >= d1) == True assert (d2 > d1) == True with pytest.raises(TypeError): d1 < None with pytest.raises(TypeError): d1 < System.Guid() # ClassTest does not implement IComparable c1 = ClassTest() c2 = ClassTest() with pytest.raises(TypeError): c1 < c2 def test_self_callback(): """Test calling back and forth between this and a c# baseclass.""" class CallbackUser(Test.SelfCallbackTest): def DoCallback(self): self.PyCallbackWasCalled = False self.SameReference = False return self.Callback(self) def PyCallback(self, self2): self.PyCallbackWasCalled = True self.SameReference = self == self2 testobj = CallbackUser() testobj.DoCallback() assert testobj.PyCallbackWasCalled assert testobj.SameReference
X Tutup