Skip to content

Commit 9ed1c5e

Browse files
committed
泛型测试
1 parent 2d1e159 commit 9ed1c5e

File tree

1 file changed

+56
-152
lines changed

1 file changed

+56
-152
lines changed

unity/test/Src/Cases/Python/CrossLang/GenericTest.cs

Lines changed: 56 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if !UNITY_WEBGL && !UNITY_IOS && !UNITY_ANDROID || FORCE_TEST_PYTHON
1+
#if !UNITY_WEBGL && !UNITY_IOS && !UNITY_ANDROID || FORCE_TEST_PYTHON
22
using NUnit.Framework;
33
using System;
44
using System.Runtime.InteropServices;
@@ -25,35 +25,22 @@ public void ListGenericPythonTest()
2525
Assert.AreEqual(res, 6);
2626
pythonEnv.Dispose();
2727
}
28-
29-
/*[Test]
28+
29+
[Test]
3030
public void StaticGenericMethodPythonTest()
3131
{
3232
var pythonEnv = new ScriptEnv(new BackendPython());
3333
string genericTypeName1 = pythonEnv.Eval<string>(@"
3434
(lambda: (
35-
CS := CSharp(),
36-
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
37-
Int32 := CS.load_type('System.Int32'),
38-
Utils := CS.load_type('Puerts.Utils'),
39-
methods := Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod'),
40-
result := [None],
41-
[
42-
(
43-
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(None, None))
44-
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1
45-
else None
46-
)
47-
for i in range(methods.Length)
48-
for method in [methods.GetValue(i)]
49-
],
50-
result[0]
35+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
36+
Int32 := puerts.load_type('System.Int32'),
37+
puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32)()
5138
)[-1])()
5239
");
5340
Assert.AreEqual(genericTypeName1, "Int32");
5441
pythonEnv.Dispose();
5542
}
56-
*/
43+
5744

5845
[Test]
5946
public void ListRangePythonTest()
@@ -73,35 +60,6 @@ import System
7360

7461
pythonEnv.Dispose();
7562
}
76-
/*
77-
[Test]
78-
public void StaticGenericMethodInvalidClassPythonTest()
79-
{
80-
var pythonEnv = new ScriptEnv(new BackendPython());
81-
try
82-
{
83-
pythonEnv.Eval<string>(@"
84-
exec('''
85-
CS = CSharp()
86-
Int32 = CS.load_type('System.Int32')
87-
Utils = CS.load_type('Puerts.Utils')
88-
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
89-
UnitTest = CS.load_type('Puerts.UnitTest')
90-
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')
91-
result = ''
92-
''')
93-
result
94-
");
95-
}
96-
catch (Exception e)
97-
{
98-
StringAssert.Contains("the class must be a constructor", e.Message);
99-
pythonEnv.Dispose();
100-
return;
101-
}
102-
pythonEnv.Dispose();
103-
throw new Exception("unexpected reach here");
104-
}
10563

10664
[Test]
10765
public void StaticGenericMethodInvalidGenericArgumentsPythonTest()
@@ -110,21 +68,11 @@ public void StaticGenericMethodInvalidGenericArgumentsPythonTest()
11068
try
11169
{
11270
pythonEnv.Eval<string>(@"
113-
exec('''
114-
CS = CSharp()
115-
GenericTestClass = CS.load_type('Puerts.UnitTest.GenericTestClass')
116-
Utils = CS.load_type('Puerts.Utils')
117-
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
118-
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')
119-
120-
for i in range(methods.Length):
121-
method = methods.GetValue(i)
122-
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1:
123-
generic_method = method.MakeGenericMethod(3)
124-
result = generic_method.Invoke(None, None)
125-
break
126-
''')
127-
result
71+
(lambda: (
72+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
73+
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', 3),
74+
func()
75+
)[-1])()
12876
");
12977
Assert.True(false);
13078
}
@@ -143,24 +91,10 @@ public void StaticGenericMethodInvalidCallArgumentsPythonTest()
14391
{
14492
string genericTypeName1 = pythonEnv.Eval<string>(@"
14593
(lambda: (
146-
CS := CSharp(),
147-
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
148-
Int32 := CS.load_type('System.Int32'),
149-
Utils := CS.load_type('Puerts.Utils'),
150-
TypeExtensions := CS.load_type('Puerts.TypeExtensions'),
151-
methods := Utils.GetMethodAndOverrideMethodByName(GenericTestClass, 'StaticGenericMethod'),
152-
result := [
153-
(
154-
generic_method := methods.GetValue(i).MakeGenericMethod(Int32),
155-
Array := CS.load_type('System.Array'),
156-
args := Array.CreateInstance(CS.load_type('System.Object'), 1),
157-
args.SetValue('hello', 0),
158-
generic_method.Invoke(None, args)
159-
)[-1]
160-
for i in range(methods.Length)
161-
if methods.GetValue(i).GetParameters().Length == 1 and methods.GetValue(i).GetGenericArguments().Length == 1
162-
],
163-
''
94+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
95+
Int32 := puerts.load_type('System.Int32'),
96+
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
97+
func('hello')
16498
)[-1])()
16599
");
166100
}, "invalid arguments to StaticGenericMethod");
@@ -173,71 +107,62 @@ public void StaticGenericMethodTestOverloadPythonTest()
173107
var pythonEnv = new ScriptEnv(new BackendPython());
174108
string result = pythonEnv.Eval<string>(@"
175109
(lambda: (
176-
CS := CSharp(),
177-
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
178-
Int32 := CS.load_type('System.Int32'),
179-
Utils := CS.load_type('Puerts.Utils'),
180-
methods := Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod'),
181-
Array := CS.load_type('System.Array'),
182-
result := [None],
183-
[
184-
(
185-
args := Array.CreateInstance(CS.load_type('System.Object'), 1),
186-
args.SetValue(3, 0),
187-
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(None, args))
188-
)[-1]
189-
if (params := method.GetParameters()).Length == 1 and method.GetGenericArguments().Length == 1
190-
else None
191-
for i in range(methods.Length)
192-
for method in [methods.GetValue(i)]
193-
],
194-
result[0]
110+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
111+
Int32 := puerts.load_type('System.Int32'),
112+
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
113+
func(3)
195114
)[-1])()
196115
");
197116
Assert.AreEqual(result, "3");
198117
pythonEnv.Dispose();
199118
}
200119

201-
[Test]
120+
/*[Test]
202121
public void InstanceGenericMethodPythonTest()
203122
{
204123
var pythonEnv = new ScriptEnv(new BackendPython());
205124
string result = pythonEnv.Eval<string>(@"
206125
(lambda: (
207-
CS := CSharp(),
208-
GenericTestClass := CS.load_type('Puerts.UnitTest.GenericTestClass'),
209-
Int32 := CS.load_type('System.Int32'),
126+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
127+
Int32 := puerts.load_type('System.Int32'),
210128
testobj := GenericTestClass(),
211129
setattr(testobj, 'stringProp', 'world'),
212-
Utils := CS.load_type('Puerts.Utils'),
213-
methods := Utils.GetMethodAndOverrideMethodByName($1, 'InstanceGenericMethod'),
214-
result := [None],
215-
[
216-
(
217-
result.__setitem__(0, method.MakeGenericMethod(Int32).Invoke(testobj, None))
218-
if method.GetParameters().Length == 0 and method.GetGenericArguments().Length == 1
219-
else None
220-
)
221-
for i in range(methods.Length)
222-
for method in [methods.GetValue(i)]
223-
],
224-
result[0]
130+
method := puerts.generic_method(GenericTestClass, 'InstanceGenericMethod', Int32),
131+
method(testobj)
225132
)[-1])()
226133
");
227134
Assert.AreEqual(result, "world_Int32");
228135
pythonEnv.Dispose();
229-
}
136+
}*/
230137

231138
[Test]
232139
public void GenericAccessPythonTest()
233140
{
234141
var pythonEnv = new ScriptEnv(new BackendPython());
235142
string result = pythonEnv.Eval<string>(@"
236143
(lambda: (
237-
CS := CSharp(),
238-
GenericTestClass_1 := CS.load_type('Puerts.UnitTest.GenericTestClass`1'),
239-
String := CS.load_type('System.String'),
240-
GenericTestClass := GenericTestClass_1[String],
144+
GenericTestClass_T1 := puerts.load_type('Puerts.UnitTest.GenericTestClass`1'),
145+
String := puerts.load_type('System.String'),
146+
GenericTestClass := puerts.generic(GenericTestClass_T1, String),
147+
setattr(GenericTestClass, 'v', '6'),
148+
Inner := GenericTestClass.Inner,
149+
Inner(),
150+
Inner.stringProp
151+
)[-1])()
152+
");
153+
Assert.AreEqual(result, "hello");
154+
pythonEnv.Dispose();
155+
}
156+
157+
[Test]
158+
public void GenericAccessGetItemSyntaxPythonTest()
159+
{
160+
var pythonEnv = new ScriptEnv(new BackendPython());
161+
string result = pythonEnv.Eval<string>(@"
162+
(lambda: (
163+
GenericTestClass_T1 := puerts.load_type('Puerts.UnitTest.GenericTestClass`1'),
164+
String := puerts.load_type('System.String'),
165+
GenericTestClass := GenericTestClass_T1[String],
241166
setattr(GenericTestClass, 'v', '6'),
242167
Inner := GenericTestClass.Inner,
243168
Inner(),
@@ -254,41 +179,20 @@ public void CreateFunctionByMethodInfoPythonTest()
254179
{
255180
var pythonEnv = new ScriptEnv(new BackendPython());
256181
string result = pythonEnv.Eval<string>(@"
257-
exec('''
258-
CS = CSharp()
259-
GenericTestClass = CS.load_type('Puerts.UnitTest.GenericTestClass')
260-
Int32 = CS.load_type('System.Int32')
261-
Utils = CS.load_type('Puerts.Utils')
262-
TypeExtensions = CS.load_type('Puerts.TypeExtensions')
263-
cls = TypeExtensions.GetType(GenericTestClass)
264-
methods = Utils.GetMethodAndOverrideMethodByName($1, 'StaticGenericMethod')
265-
266-
overloads = []
267-
for i in range(methods.Length):
268-
method = methods.GetValue(i)
269-
overloads.append(method.MakeGenericMethod(Int32))
270-
271-
result1 = ''''
272-
result2 = ''''
273-
for method in overloads:
274-
params = method.GetParameters()
275-
if params.Length == 0:
276-
result1 = method.Invoke(None, None)
277-
elif params.Length == 1:
278-
Array = CS.load_type('System.Array')
279-
args = Array.CreateInstance(CS.load_type('System.Object'), 1)
280-
args.SetValue(1024, 0)
281-
result2 = method.Invoke(None, args)
182+
(lambda: (
183+
GenericTestClass := puerts.load_type('Puerts.UnitTest.GenericTestClass'),
184+
Int32 := puerts.load_type('System.Int32'),
282185
283-
result = result1 + result2
284-
')
285-
result
186+
func := puerts.generic_method(GenericTestClass, 'StaticGenericMethod', Int32),
187+
result := func() + func(1024),
188+
result
189+
)[-1])()
286190
");
287191
Assert.AreEqual(result, "Int321024");
288192
pythonEnv.Dispose();
289193
}
290194
#endif
291-
*/
195+
292196
}
293197
}
294198

0 commit comments

Comments
 (0)