Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
208 changes: 56 additions & 152 deletions unity/test/Src/Cases/Python/CrossLang/GenericTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if !UNITY_WEBGL && !UNITY_IOS && !UNITY_ANDROID || FORCE_TEST_PYTHON
#if !UNITY_WEBGL && !UNITY_IOS && !UNITY_ANDROID || FORCE_TEST_PYTHON
using NUnit.Framework;
using System;
using System.Runtime.InteropServices;
Expand All @@ -25,35 +25,22 @@ public void ListGenericPythonTest()
Assert.AreEqual(res, 6);
pythonEnv.Dispose();
}
/*[Test]

[Test]
public void StaticGenericMethodPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
string genericTypeName1 = pythonEnv.Eval<string>(@"
(lambda: (
CS := CSharp(),
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := CS.load_type('System.Int32'),
Utils := CS.load_type('Puerts.Utils'),
methods := Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod'),
result := [None],
[
(
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(None, None))
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1
else None
)
for i in range(methods.Length)
for method in [methods.GetValue(i)]
],
result[0]
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := puerts.load_type('System.Int32'),
puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32)()
)[-1])()
");
Assert.AreEqual(genericTypeName1, "Int32");
pythonEnv.Dispose();
}
*/


[Test]
public void ListRangePythonTest()
Expand All @@ -73,35 +60,6 @@ import System

pythonEnv.Dispose();
}
/*
[Test]
public void StaticGenericMethodInvalidClassPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
try
{
pythonEnv.Eval<string>(@"
exec('''
CS = CSharp()
Int32 = CS.load_type('System.Int32')
Utils = CS.load_type('Puerts.Utils')
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
UnitTest = CS.load_type('Puerts.UnitTest')
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')
result = ''
''')
result
");
}
catch (Exception e)
{
StringAssert.Contains("the class must be a constructor", e.Message);
pythonEnv.Dispose();
return;
}
pythonEnv.Dispose();
throw new Exception("unexpected reach here");
}

[Test]
public void StaticGenericMethodInvalidGenericArgumentsPythonTest()
Expand All @@ -110,21 +68,11 @@ public void StaticGenericMethodInvalidGenericArgumentsPythonTest()
try
{
pythonEnv.Eval<string>(@"
exec('''
CS = CSharp()
GenericTestClass = CS.load_type('Puerts.UnitTest.GenericTestClass')
Utils = CS.load_type('Puerts.Utils')
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')

for i in range(methods.Length):
method = methods.GetValue(i)
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1:
generic_method = method.MakeGenericMethod(3)
result = generic_method.Invoke(None, None)
break
''')
result
(lambda: (
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', 3),
func()
)[-1])()
");
Assert.True(false);
}
Expand All @@ -143,24 +91,10 @@ public void StaticGenericMethodInvalidCallArgumentsPythonTest()
{
string genericTypeName1 = pythonEnv.Eval<string>(@"
(lambda: (
CS := CSharp(),
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := CS.load_type('System.Int32'),
Utils := CS.load_type('Puerts.Utils'),
TypeExtensions := CS.load_type('Puerts.TypeExtensions'),
methods := Utils.GetMethodAndOverrideMethodByName(GenericTestClass, 'StaticGenericMethod'),
result := [
(
generic_method := methods.GetValue(i).MakeGenericMethod(Int32),
Array := CS.load_type('System.Array'),
args := Array.CreateInstance(CS.load_type('System.Object'), 1),
args.SetValue('hello', 0),
generic_method.Invoke(None, args)
)[-1]
for i in range(methods.Length)
if methods.GetValue(i).GetParameters().Length == 1 and methods.GetValue(i).GetGenericArguments().Length == 1
],
''
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := puerts.load_type('System.Int32'),
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
func('hello')
)[-1])()
");
}, "invalid arguments to StaticGenericMethod");
Expand All @@ -173,71 +107,62 @@ public void StaticGenericMethodTestOverloadPythonTest()
var pythonEnv = new ScriptEnv(new BackendPython());
string result = pythonEnv.Eval<string>(@"
(lambda: (
CS := CSharp(),
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := CS.load_type('System.Int32'),
Utils := CS.load_type('Puerts.Utils'),
methods := Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod'),
Array := CS.load_type('System.Array'),
result := [None],
[
(
args := Array.CreateInstance(CS.load_type('System.Object'), 1),
args.SetValue(3, 0),
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(None, args))
)[-1]
if (params := method.GetParameters()).Length == 1 and method.GetGenericArguments().Length == 1
else None
for i in range(methods.Length)
for method in [methods.GetValue(i)]
],
result[0]
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := puerts.load_type('System.Int32'),
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
func(3)
)[-1])()
");
Assert.AreEqual(result, "3");
pythonEnv.Dispose();
}

[Test]
/*[Test]
public void InstanceGenericMethodPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
string result = pythonEnv.Eval<string>(@"
(lambda: (
CS := CSharp(),
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := CS.load_type('System.Int32'),
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := puerts.load_type('System.Int32'),
testobj := GenericTestClass(),
setattr(testobj, 'stringProp', 'world'),
Utils := CS.load_type('Puerts.Utils'),
methods := Utils.GetMethodAndOverrideMethodByName($1, 'InstanceGenericMethod'),
result := [None],
[
(
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(testobj, None))
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1
else None
)
for i in range(methods.Length)
for method in [methods.GetValue(i)]
],
result[0]
method := puerts.generic_method(GenericTestClass, 'InstanceGenericMethod', Int32),
method(testobj)
)[-1])()
");
Assert.AreEqual(result, "world_Int32");
pythonEnv.Dispose();
}
}*/

[Test]
public void GenericAccessPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
string result = pythonEnv.Eval<string>(@"
(lambda: (
CS := CSharp(),
GenericTestClass_1 := CS.load_type('Puerts.UnitTest.GenericTestClass`1'),
String := CS.load_type('System.String'),
GenericTestClass := GenericTestClass_1[String],
GenericTestClass_T1 := puerts.load_type('Puerts.UnitTest.GenericTestClass`1'),
String := puerts.load_type('System.String'),
GenericTestClass := puerts.generic(GenericTestClass_T1, String),
setattr(GenericTestClass, 'v', '6'),
Inner := GenericTestClass.Inner,
Inner(),
Inner.stringProp
)[-1])()
");
Assert.AreEqual(result, "hello");
pythonEnv.Dispose();
}

[Test]
public void GenericAccessGetItemSyntaxPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
string result = pythonEnv.Eval<string>(@"
(lambda: (
GenericTestClass_T1 := puerts.load_type('Puerts.UnitTest.GenericTestClass`1'),
String := puerts.load_type('System.String'),
GenericTestClass := GenericTestClass_T1[String],
setattr(GenericTestClass, 'v', '6'),
Inner := GenericTestClass.Inner,
Inner(),
Expand All @@ -254,41 +179,20 @@ public void CreateFunctionByMethodInfoPythonTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());
string result = pythonEnv.Eval<string>(@"
exec('''
CS = CSharp()
GenericTestClass = CS.load_type('Puerts.UnitTest.GenericTestClass')
Int32 = CS.load_type('System.Int32')
Utils = CS.load_type('Puerts.Utils')
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
cls = TypeExtensions.GetType(GenericTestClass)
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')

overloads = []
for i in range(methods.Length):
method = methods.GetValue(i)
overloads.append(method.MakeGenericMethod(Int32))

result1 = ''''
result2 = ''''
for method in overloads:
params = method.GetParameters()
if params.Length == 0:
result1 = method.Invoke(None, None)
elif params.Length == 1:
Array = CS.load_type('System.Array')
args = Array.CreateInstance(CS.load_type('System.Object'), 1)
args.SetValue(1024, 0)
result2 = method.Invoke(None, args)
(lambda: (
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
Int32 := puerts.load_type('System.Int32'),

result = result1 + result2
')
result
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
result := func() + func(1024),
result
)[-1])()
");
Assert.AreEqual(result, "Int321024");
pythonEnv.Dispose();
}
#endif
*/

}
}

Expand Down
38 changes: 38 additions & 0 deletions unity/test/Src/Cases/Python/GenIteratorTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#if !UNITY_WEBGL && !UNITY_IOS && !UNITY_ANDROID || FORCE_TEST_PYTHON
using System;
using System.Collections.Generic;
using NUnit.Framework;

namespace Puerts.UnitTest
{
[TestFixture]
public class GenIteratorTestPython
{
[Test]
public void GenIteratorTest()
{
var pythonEnv = new ScriptEnv(new BackendPython());

pythonEnv.Eval(@"
exec('''
from System.Collections.Generic import List__T1
from System import Int32
List__Int32 = List__T1[Int32]
myList = List__Int32()
myList.Add(1)
myList.Add(2)
myList.Add(3)
iter = puerts.gen_iterator(myList)
result = []
for i in iter:
result.append(i)
assert result == [1, 2, 3]
''')
");

pythonEnv.Dispose();
}
}
}

#endif
11 changes: 11 additions & 0 deletions unity/test/Src/Cases/Python/GenIteratorTest.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading