FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
pythonnet/tests/test_class.py at v3.0.3 · pythonnet/pythonnet · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
pythonnet
/
pythonnet
Public
Notifications
You must be signed in to change notification settings
Fork
780
Star
5.5k
Code
Issues
153
Pull requests
12
Discussions
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
pythonnet
/
tests
/
test_class.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
331 lines (230 loc) · 8.21 KB
Breadcrumbs
pythonnet
/
tests
/
test_class.py
Copy path
File metadata and controls
331 lines (230 loc) · 8.21 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# -*- coding: utf-8 -*-
# TODO: Add tests for ClassicClass, NewStyleClass?
"""Test CLR class support."""
import
clr
import
Python
.
Test
as
Test
import
System
import
pytest
from
.
utils
import
DictProxyType
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
(
"<System.String object"
)
def
test_non_public_class
():
"""Test that non-public classes are inaccessible."""
with
pytest
.
raises
(
ImportError
):
from
Python
.
Test
import
InternalClass
with
pytest
.
raises
(
AttributeError
):
_
=
Test
.
InternalClass
def
test_non_exported
():
"""Test [PyExport(false)]"""
with
pytest
.
raises
(
ImportError
):
from
Python
.
Test
import
NonExportable
with
pytest
.
raises
(
AttributeError
):
_
=
Test
.
NonExportable
def
test_basic_subclass
():
"""Test basic subclass of a managed class."""
from
System
.
Collections
import
Hashtable
class
MyTable
(
Hashtable
):
def
how_many
(
self
):
return
self
.
Count
table
=
MyTable
()
assert
table
.
__class__
.
__name__
.
endswith
(
'MyTable'
)
assert
type
(
table
).
__name__
.
endswith
(
'MyTable'
)
assert
len
(
table
.
__class__
.
__bases__
)
==
1
assert
table
.
__class__
.
__bases__
[
0
]
==
Hashtable
assert
table
.
how_many
()
==
0
assert
table
.
Count
==
0
table
.
set_Item
(
'one'
,
'one'
)
assert
table
.
how_many
()
==
1
assert
table
.
Count
==
1
def
test_subclass_with_no_arg_constructor
():
"""Test subclass of a managed class with a no-arg constructor."""
from
Python
.
Test
import
ClassCtorTest1
class
SubClass
(
ClassCtorTest1
):
def
__init__
(
self
,
name
):
self
.
name
=
name
# This failed in earlier versions
_
=
SubClass
(
'test'
)
def
test_subclass_with_various_constructors
():
"""Test subclass of a managed class with various constructors."""
from
Python
.
Test
import
ClassCtorTest2
class
SubClass
(
ClassCtorTest2
):
def
__init__
(
self
,
v
):
ClassCtorTest2
.
__init__
(
self
,
v
)
self
.
value2
=
v
inst
=
SubClass
(
'test'
)
assert
inst
.
value
==
'test'
assert
inst
.
value2
==
'test'
class
SubClass2
(
ClassCtorTest2
):
def
__init__
(
self
,
v
):
ClassCtorTest2
.
__init__
(
self
,
v
)
self
.
value2
=
v
inst
=
SubClass2
(
'test'
)
assert
inst
.
value
==
'test'
assert
inst
.
value2
==
'test'
def
test_struct_construction
():
"""Test construction of structs."""
from
Python
.
Test
import
Point
# no default constructor, must supply arguments
with
pytest
.
raises
(
TypeError
):
p
=
Point
()
p
=
Point
(
0
,
0
)
assert
p
.
X
==
0
assert
p
.
Y
==
0
p
.
X
=
10
p
.
Y
=
10
assert
p
.
X
==
10
assert
p
.
Y
==
10
# test strange __new__ interactions
# test weird metatype
# test recursion
# test
def
test_ienumerable_iteration
():
"""Test iteration over objects supporting IEnumerable."""
from
Python
.
Test
import
ClassTest
list_
=
ClassTest
.
GetArrayList
()
for
item
in
list_
:
assert
(
item
>
-
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_iterable
():
"""Test what objects are Iterable"""
from
collections
.
abc
import
Iterable
from
Python
.
Test
import
ClassTest
assert
isinstance
(
System
.
String
.
Empty
,
Iterable
)
assert
isinstance
(
ClassTest
.
GetArrayList
(),
Iterable
)
assert
isinstance
(
ClassTest
.
GetEnumerator
(),
Iterable
)
assert
(
not
isinstance
(
ClassTest
,
Iterable
))
assert
(
not
isinstance
(
ClassTest
(),
Iterable
))
class
ShouldBeIterable
(
ClassTest
):
def
__iter__
(
self
):
return
iter
([])
assert
isinstance
(
ShouldBeIterable
(),
Iterable
)
def
test_override_get_item
():
"""Test managed subclass overriding __getitem__."""
from
System
.
Collections
import
Hashtable
class
MyTable
(
Hashtable
):
def
__getitem__
(
self
,
key
):
value
=
Hashtable
.
__getitem__
(
self
,
key
)
return
'my '
+
str
(
value
)
table
=
MyTable
()
table
[
'one'
]
=
'one'
table
[
'two'
]
=
'two'
table
[
'three'
]
=
'three'
assert
table
[
'one'
]
==
'my one'
assert
table
[
'two'
]
==
'my two'
assert
table
[
'three'
]
==
'my three'
assert
table
.
Count
==
3
def
test_override_set_item
():
"""Test managed subclass overriding __setitem__."""
from
System
.
Collections
import
Hashtable
class
MyTable
(
Hashtable
):
def
__setitem__
(
self
,
key
,
value
):
value
=
'my '
+
str
(
value
)
Hashtable
.
__setitem__
(
self
,
key
,
value
)
table
=
MyTable
()
table
[
'one'
]
=
'one'
table
[
'two'
]
=
'two'
table
[
'three'
]
=
'three'
assert
table
[
'one'
]
==
'my one'
assert
table
[
'two'
]
==
'my two'
assert
table
[
'three'
]
==
'my three'
assert
table
.
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
def
test_method_inheritance
():
"""Ensure that we call the overridden method instead of the one provided in
the base class."""
base
=
Test
.
BaseClass
()
derived
=
Test
.
DerivedClass
()
assert
base
.
IsBase
()
==
True
assert
derived
.
IsBase
()
==
False
def
test_callable
():
"""Test that only delegate subtypes are callable"""
def
foo
():
pass
assert
callable
(
System
.
String
(
"foo"
))
==
False
assert
callable
(
System
.
Action
(
foo
))
==
True
Back
|
FazBrowse Home
|
New Git URL