Skip to content

Commit

Permalink
增加泛型类的UT
Browse files Browse the repository at this point in the history
  • Loading branch information
bluedoom committed Jul 27, 2022
1 parent a07f217 commit 3f17b47
Show file tree
Hide file tree
Showing 8 changed files with 274 additions and 1 deletion.
31 changes: 31 additions & 0 deletions unity/general/Src/UnitTest/WrapperTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,37 @@ public void GenericTest()
jsEnv.Dispose();

Assert.AreEqual(typeof(Type), secondGenericType);
}

[Test]
public void GenericTest2()
{
var jsEnv = new JsEnv(new TxtLoader());
PuertsStaticWrap.AutoStaticCodeRegister.Register(jsEnv);
Type secondGenericType = jsEnv.Eval<Type>(@"
const CS = require('csharp');
const G1 = new CS.Puerts.UnitTest.GenericGenTest2();
G1.GetTypeTest('');
");

jsEnv.Dispose();

Assert.AreEqual(typeof(WrapperTestBase), secondGenericType);
}

[Test]
public void GenericTest3()
{
var jsEnv = new JsEnv(new TxtLoader());
PuertsStaticWrap.AutoStaticCodeRegister.Register(jsEnv);
Type secondGenericType = jsEnv.Eval<Type>(@"
const CS = require('csharp');
CS.Puerts.UnitTest.GenericGenTest2.GetGenericType();
");

jsEnv.Dispose();

Assert.AreEqual(typeof(GenericGenTest2), secondGenericType);
}
}
}
17 changes: 17 additions & 0 deletions unity/general/Src/UnitTest/WrapperTestClass.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,23 @@ static bool FilterMethods(System.Reflection.MemberInfo mb)
}
}

public class GenericWrapperBase<T> where T : class, new()
{
public static System.Type GetGenericType()
{
return typeof(T);
}
}

public class GenericGenTest2 :GenericWrapperBase<GenericGenTest2>
{
public System.Type GetTypeTest<T>(string arg0, System.Action<T> action = null) where T: WrapperTestBase
{
return typeof (T);
}
}


public class WrapperTestBase
{
public void GeneratedMethod(bool isBase)
Expand Down
10 changes: 10 additions & 0 deletions unity/general/Src/UnitTest/wrap/AutoStaticCodeRegister.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ public static void Register(Puerts.JsEnv jsEnv)
typeof(Puerts_UnitTest_GenericGenTest_2_T_S__Wrap<System.Type,Puerts.JsEnv>).GetGenericTypeDefinition()
);

jsEnv.AddLazyStaticWrapLoader(typeof(Puerts.UnitTest.GenericGenTest2), Puerts_UnitTest_GenericGenTest2_Wrap.GetRegisterInfo);


jsEnv.AddLazyStaticWrapLoader(typeof(Puerts.UnitTest.GenericWrapperBase<Puerts.JsEnv>), Puerts_UnitTest_GenericWrapperBase_1_T__Wrap<Puerts.JsEnv>.GetRegisterInfo);
jsEnv.AddLazyStaticWrapLoaderGenericDefinition(
typeof(Puerts.UnitTest.GenericWrapperBase<Puerts.JsEnv>).GetGenericTypeDefinition(),
new Type[]{ null },
typeof(Puerts_UnitTest_GenericWrapperBase_1_T__Wrap<Puerts.JsEnv>).GetGenericTypeDefinition()
);

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@

using System;
using Puerts;

namespace PuertsStaticWrap
{
public static class Puerts_UnitTest_GenericGenTest2_Wrap
{

[Puerts.MonoPInvokeCallback(typeof(Puerts.V8ConstructorCallback))]
private static IntPtr Constructor(IntPtr isolate, IntPtr info, int paramLen, long data)
{
try
{

{

{

var result = new Puerts.UnitTest.GenericGenTest2();

return Puerts.Utils.GetObjectPtr((int)data, typeof(Puerts.UnitTest.GenericGenTest2), result);

}

}


} catch (Exception e) {
Puerts.PuertsDLL.ThrowException(isolate, "c# exception:" + e.Message + ",stack:" + e.StackTrace);
}
return IntPtr.Zero;
}

[Puerts.MonoPInvokeCallback(typeof(Puerts.V8FunctionCallback))]
private static void M_GetTypeTest(IntPtr isolate, IntPtr info, IntPtr self, int paramLen, long data)
{
try
{
var obj = Puerts.Utils.GetSelf((int)data, self) as Puerts.UnitTest.GenericGenTest2;

if (paramLen == 2)

{

var argHelper0 = new Puerts.ArgumentHelper((int)data, isolate, info, 0);

var argHelper1 = new Puerts.ArgumentHelper((int)data, isolate, info, 1);

if (argHelper0.IsMatch(Puerts.JsValueType.NullOrUndefined | Puerts.JsValueType.String, typeof(string), false, false) && argHelper1.IsMatch(Puerts.JsValueType.NullOrUndefined | Puerts.JsValueType.NativeObject | Puerts.JsValueType.Function, typeof(System.Action<Puerts.UnitTest.WrapperTestBase>), false, false))

{

var Arg0 = argHelper0.GetString(false);

var Arg1 = argHelper1.Get<System.Action<Puerts.UnitTest.WrapperTestBase>>(false);

var result = obj.GetTypeTest(Arg0, Arg1);

Puerts.ResultHelper.Set((int)data, isolate, info, result);

return;
}

}

if (paramLen == 1)

{

var argHelper0 = new Puerts.ArgumentHelper((int)data, isolate, info, 0);

if (argHelper0.IsMatch(Puerts.JsValueType.NullOrUndefined | Puerts.JsValueType.String, typeof(string), false, false))

{

var Arg0 = argHelper0.GetString(false);

var result = obj.GetTypeTest<Puerts.UnitTest.WrapperTestBase>(Arg0);

Puerts.ResultHelper.Set((int)data, isolate, info, result);

return;
}

}

Puerts.PuertsDLL.ThrowException(isolate, "invalid arguments to GetTypeTest");

}
catch (Exception e)
{
Puerts.PuertsDLL.ThrowException(isolate, "c# exception:" + e.Message + ",stack:" + e.StackTrace);
}
}

public static Puerts.TypeRegisterInfo GetRegisterInfo()
{
return new Puerts.TypeRegisterInfo()
{
BlittableCopy = false,
Constructor = Constructor,
Methods = new System.Collections.Generic.Dictionary<Puerts.MethodKey, Puerts.V8FunctionCallback>()
{
{ new Puerts.MethodKey { Name = "GetTypeTest", IsStatic = false}, M_GetTypeTest }
},
Properties = new System.Collections.Generic.Dictionary<string, Puerts.PropertyRegisterInfo>()
{

},
LazyMembers = new System.Collections.Generic.List<Puerts.LazyMemberRegisterInfo>()
{
}
};
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@

using System;
using Puerts;

namespace PuertsStaticWrap
{
public static class Puerts_UnitTest_GenericWrapperBase_1_T__Wrap<T>
{

[Puerts.MonoPInvokeCallback(typeof(Puerts.V8ConstructorCallback))]
private static IntPtr Constructor(IntPtr isolate, IntPtr info, int paramLen, long data)
{
try
{

//{

// {

// var result = new Puerts.UnitTest.GenericWrapperBase<T>();

// return Puerts.Utils.GetObjectPtr((int)data, typeof(Puerts.UnitTest.GenericWrapperBase<T>), result);

// }

//}


} catch (Exception e) {
Puerts.PuertsDLL.ThrowException(isolate, "c# exception:" + e.Message + ",stack:" + e.StackTrace);
}
return IntPtr.Zero;
}

[Puerts.MonoPInvokeCallback(typeof(Puerts.V8FunctionCallback))]
private static void F_GetGenericType(IntPtr isolate, IntPtr info, IntPtr self, int paramLen, long data)
{
try
{


{

{

var result = Puerts.UnitTest.GenericWrapperBase<Version>.GetGenericType();

Puerts.ResultHelper.Set((int)data, isolate, info, result);


}

}

}
catch (Exception e)
{
Puerts.PuertsDLL.ThrowException(isolate, "c# exception:" + e.Message + ",stack:" + e.StackTrace);
}
}

public static Puerts.TypeRegisterInfo GetRegisterInfo()
{
return new Puerts.TypeRegisterInfo()
{
BlittableCopy = false,
Constructor = Constructor,
Methods = new System.Collections.Generic.Dictionary<Puerts.MethodKey, Puerts.V8FunctionCallback>()
{
{ new Puerts.MethodKey { Name = "GetGenericType", IsStatic = true}, F_GetGenericType }
},
Properties = new System.Collections.Generic.Dictionary<string, Puerts.PropertyRegisterInfo>()
{

},
LazyMembers = new System.Collections.Generic.List<Puerts.LazyMemberRegisterInfo>()
{
}
};
}

}
}
4 changes: 3 additions & 1 deletion unity/general/Src/WrapperGenerate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ static IEnumerable<Type> Bindings
{
typeof(Puerts.UnitTest.OptionalParametersClass),
typeof(Puerts.UnitTest.WrapperTest),
typeof(Puerts.UnitTest.GenericGenTest<Type, JsEnv>)
typeof(Puerts.UnitTest.GenericGenTest<Type, JsEnv>),
typeof(Puerts.UnitTest.GenericGenTest2),
typeof(Puerts.UnitTest.GenericWrapperBase<JsEnv>),
};
}
}
Expand Down
6 changes: 6 additions & 0 deletions unity/general/vs2013/Puerts.UnitTest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,12 @@
<Compile Include="..\Src\UnitTest\JSTypeTest\TypedValueTest.cs">
<Link>Src\UnitTest\JSTypeTest\TypedValueTest.cs</Link>
</Compile>
<Compile Include="..\Src\UnitTest\wrap\Puerts_UnitTest_GenericGenTest2_Wrap.cs">
<Link>Src\UnitTest\wrap\Puerts_UnitTest_GenericGenTest2_Wrap.cs</Link>
</Compile>
<Compile Include="..\Src\UnitTest\wrap\Puerts_UnitTest_GenericWrapperBase_1_T__Wrap.cs">
<Link>Src\UnitTest\wrap\Puerts_UnitTest_GenericWrapperBase_1_T__Wrap.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="Puerts.Core.csproj">
Expand Down
6 changes: 6 additions & 0 deletions unity/general/vs2013/Puerts.WrapperGenerate.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@
<Compile Include="..\Src\UnitTest\wrap\AutoStaticCodeRegister.cs">
<Link>Src\UnitTest\wrap\AutoStaticCodeRegister.cs</Link>
</Compile>
<Compile Include="..\Src\UnitTest\wrap\Puerts_UnitTest_GenericGenTest2_Wrap.cs">
<Link>Src\UnitTest\wrap\Puerts_UnitTest_GenericGenTest2_Wrap.cs</Link>
</Compile>
<Compile Include="..\Src\UnitTest\wrap\Puerts_UnitTest_GenericWrapperBase_1_T__Wrap.cs">
<Link>Src\UnitTest\wrap\Puerts_UnitTest_GenericWrapperBase_1_T__Wrap.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Expand Down

0 comments on commit 3f17b47

Please sign in to comment.