X Tutup
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 expectedMemberNames = new List { "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 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(() => list.Invoke(new PyObject[] {null})); } [Test] public void AsManagedObjectInvalidCast() { var list = PythonEngine.Eval("list"); Assert.Throws(() => list.AsManagedObject(typeof(int))); } [Test] public void UnaryMinus_ThrowsOnBadType() { dynamic list = new PyList(); var error = Assert.Throws(() => 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( () => 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); } }
X Tutup