This repository was archived by the owner on Jul 22, 2023. It is now read-only.
forked from pythonnet/pythonnet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_interface.py
More file actions
138 lines (99 loc) · 4.1 KB
/
test_interface.py
File metadata and controls
138 lines (99 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# -*- coding: utf-8 -*-
"""Test CLR interface support."""
import Python.Test as Test
import pytest
from .utils import DictProxyType
def test_interface_standard_attrs():
"""Test standard class attributes."""
from Python.Test import IPublicInterface
assert IPublicInterface.__name__ == 'IPublicInterface'
assert IPublicInterface.__module__ == 'Python.Test'
assert isinstance(IPublicInterface.__dict__, DictProxyType)
def test_global_interface_visibility():
"""Test visibility of module-level interfaces."""
from Python.Test import IPublicInterface
assert IPublicInterface.__name__ == 'IPublicInterface'
with pytest.raises(ImportError):
from Python.Test import IInternalInterface
_ = IInternalInterface
with pytest.raises(AttributeError):
_ = Test.IInternalInterface
def test_nested_interface_visibility():
"""Test visibility of nested interfaces."""
from Python.Test import InterfaceTest
ob = InterfaceTest.IPublic
assert ob.__name__ == 'IPublic'
ob = InterfaceTest.IProtected
assert ob.__name__ == 'IProtected'
with pytest.raises(AttributeError):
_ = InterfaceTest.IInternal
with pytest.raises(AttributeError):
_ = InterfaceTest.IPrivate
def test_explicit_cast_to_interface():
"""Test explicit cast to an interface."""
from Python.Test import InterfaceTest
ob = InterfaceTest()
assert type(ob).__name__ == 'InterfaceTest'
assert hasattr(ob, 'HelloProperty')
i1 = Test.ISayHello1(ob)
assert type(i1).__name__ == 'ISayHello1'
assert hasattr(i1, 'SayHello')
assert i1.SayHello() == 'hello 1'
assert not hasattr(i1, 'HelloProperty')
assert i1.__implementation__ == ob
assert i1.__raw_implementation__ == ob
i2 = Test.ISayHello2(ob)
assert type(i2).__name__ == 'ISayHello2'
assert i2.SayHello() == 'hello 2'
assert hasattr(i2, 'SayHello')
assert not hasattr(i2, 'HelloProperty')
def test_interface_object_returned_through_method():
"""Test interface type is used if method return type is interface"""
from Python.Test import InterfaceTest
ob = InterfaceTest()
hello1 = ob.GetISayHello1()
assert type(hello1).__name__ == 'ISayHello1'
assert hello1.__implementation__.__class__.__name__ == "InterfaceTest"
assert hello1.SayHello() == 'hello 1'
def test_interface_object_returned_through_out_param():
"""Test interface type is used for out parameters of interface types"""
from Python.Test import InterfaceTest
ob = InterfaceTest()
hello2 = ob.GetISayHello2(None)
assert type(hello2).__name__ == 'ISayHello2'
assert hello2.SayHello() == 'hello 2'
def test_null_interface_object_returned():
"""Test None is used also for methods with interface return types"""
from Python.Test import InterfaceTest
ob = InterfaceTest()
hello1, hello2 = ob.GetNoSayHello(None)
assert hello1 is None
assert hello2 is None
def test_interface_array_returned():
"""Test interface type used for methods returning interface arrays"""
from Python.Test import InterfaceTest
ob = InterfaceTest()
hellos = ob.GetISayHello1Array()
assert type(hellos[0]).__name__ == 'ISayHello1'
assert hellos[0].__implementation__.__class__.__name__ == "InterfaceTest"
def test_implementation_access():
"""Test the __implementation__ and __raw_implementation__ properties"""
import System
clrVal = System.Int32(100)
i = System.IComparable(clrVal)
assert 100 == i.__implementation__
assert clrVal == i.__raw_implementation__
assert i.__implementation__ != i.__raw_implementation__
def test_interface_collection_iteration():
"""Test interface type is used when iterating over interface collection"""
import System
from System.Collections.Generic import List
elem = System.IComparable(System.Int32(100))
typed_list = List[System.IComparable]()
typed_list.Add(elem)
for e in typed_list:
assert type(e).__name__ == "IComparable"
untyped_list = System.Collections.ArrayList()
untyped_list.Add(elem)
for e in untyped_list:
assert type(e).__name__ == "int"