-
Notifications
You must be signed in to change notification settings - Fork 774
Expand file tree
/
Copy pathTestPyObject.cs
More file actions
99 lines (83 loc) · 3 KB
/
TestPyObject.cs
File metadata and controls
99 lines (83 loc) · 3 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
using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Python.Runtime;
namespace Python.EmbeddingTest
{
public class TestPyObject
{
[Test]
public void TestGetDynamicMemberNames()
{
List<string> expectedMemberNames = new List<string>
{
"add",
"getNumber",
"member1",
"member2"
};
PyDict locals = new PyDict();
PythonEngine.Exec(@"
class MemberNamesTest(object):
def __init__(self):
self.member1 = 123
self.member2 = 'Test string'
def getNumber(self):
return 123
def add(self, x, y):
return x + y
a = MemberNamesTest()
", null, locals);
PyObject a = locals.GetItem("a");
IEnumerable<string> memberNames = a.GetDynamicMemberNames();
foreach (string expectedName in expectedMemberNames)
{
Assert.IsTrue(memberNames.Contains(expectedName), "Could not find member '{0}'.", expectedName);
}
}
[Test]
public void InvokeNull()
{
var list = PythonEngine.Eval("list");
Assert.Throws<ArgumentNullException>(() => list.Invoke(new PyObject[] {null}));
}
[Test]
public void AsManagedObjectInvalidCast()
{
var list = PythonEngine.Eval("list");
Assert.Throws<InvalidCastException>(() => list.AsManagedObject(typeof(int)));
}
[Test]
public void UnaryMinus_ThrowsOnBadType()
{
dynamic list = new PyList();
var error = Assert.Throws<PythonException>(() => list = -list);
Assert.AreEqual("TypeError", error.Type.Name);
}
[Test]
[Obsolete]
public void GetAttrDefault_IgnoresAttributeErrorOnly()
{
var ob = new PyObjectTestMethods().ToPython();
using var fallback = new PyList();
var attrErrResult = ob.GetAttr(nameof(PyObjectTestMethods.RaisesAttributeError), fallback);
Assert.IsTrue(PythonReferenceComparer.Instance.Equals(fallback, attrErrResult));
var typeErrResult = Assert.Throws<PythonException>(
() => ob.GetAttr(nameof(PyObjectTestMethods.RaisesTypeError), fallback)
);
Assert.AreEqual(Exceptions.TypeError, typeErrResult.Type);
}
// regression test from https://github.com/pythonnet/pythonnet/issues/1642
[Test]
public void InheritedMethodsAutoacquireGIL()
{
PythonEngine.Exec("from System import String\nString.Format('{0},{1}', 1, 2)");
}
}
public class PyObjectTestMethods
{
public string RaisesAttributeError => throw new PythonException(new PyType(Exceptions.AttributeError), value: null, traceback: null);
public string RaisesTypeError => throw new PythonException(new PyType(Exceptions.TypeError), value: null, traceback: null);
}
}