public void ReflectionTest() { var jsEnv = new JsEnv(new TxtLoader()); bool ret = jsEnv.Eval <bool>(@" const CS = require('csharp'); let a = new CS.Puerts.UnitTest.RefInClass.Vector3(1, 2, 3); let b = new CS.Puerts.UnitTest.RefInClass.Vector3(1, 2, 3); CS.Puerts.UnitTest.RefInClass.Normalize(a).ToString() == `(1.0, 2.0, 3.0)` && CS.Puerts.UnitTest.RefInClass.Multiply(a, b).ToString() == `(1.0, 4.0, 9.0)` && CS.Puerts.UnitTest.RefInClass.Divide(a, b).ToString() == `(1.0, 1.0, 1.0)`; "); Assert.AreEqual(true, ret); jsEnv.Dispose(); }
public void AbstractRefParamTest() { var jsEnv = new JsEnv(new TxtLoader()); string name = jsEnv.Eval <string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.C(); let name = PUERTS.$ref ('gyx'); let res = PUERTS.$ref (''); obj.TestRef(name,res); PUERTS.$unref (name) + PUERTS.$unref(res); "); jsEnv.Dispose(); Assert.AreEqual(name, "annagyx23"); }
public void PropertyTest() { var jsEnv = new JsEnv(new TxtLoader()); PuertsStaticWrap.AutoStaticCodeRegister.Register(jsEnv); string ret = jsEnv.Eval <string>(@" const CS = require('csharp'); const i1 = CS.Puerts.UnitTest.WrapperGenTest.StaticProperty; CS.Puerts.UnitTest.WrapperGenTest.StaticProperty = 'Puerts' i1 + ' ' + CS.Puerts.UnitTest.WrapperGenTest.StaticProperty; "); jsEnv.Dispose(); Assert.AreEqual("StaticProperty Puerts", ret); }
public void ESModuleImportCSharp() { var loader = new TxtLoader(); loader.AddMockFileContent("whatever.mjs", @" import csharp from 'csharp'; const func = function() { return csharp.System.String.Join(' ', 'hello', 'world') } export { func }; "); var jsEnv = new JsEnv(loader); Func <string> func = jsEnv.ExecuteModule <Func <string> >("whatever.mjs", "func"); Assert.True(func() == "hello world"); jsEnv.Dispose(); }
public void ExtensionGenerateDerivedDerived1Test_2() { var jsEnv = new JsEnv(new TxtLoader()); var res = jsEnv.Eval <string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.DerivedClass(); let obj1 = new CS.Puerts.UnitTest.DerivedClass1(); PUERTS.$extension(CS.Puerts.UnitTest.BaseClass, CS.Puerts.UnitTest.BaseClassExtension); let res = obj.Extension2(obj1); res; "); jsEnv.Dispose(); Assert.AreEqual(res, "Extension2<Puerts.UnitTest.BaseClass,Puerts.UnitTest.BaseClass1>"); }
public void WarpTest12() { var jsEnv = new JsEnv(new TxtLoader()); PuertsStaticWrap.AutoStaticCodeRegister.Register(jsEnv); int ret = jsEnv.Eval <int>(@" const CS = require('csharp'); let temp = new CS.Puerts.UnitTest.OptionalParametersClass(); let ret = 0; try{temp.Test4('1',1);}catch(e){ret = 1;} ret; "); Assert.AreEqual(0, ret); jsEnv.Dispose(); }
public void CatchByNextLevelTest() { var jsEnv = new JsEnv(new TxtLoader()); string res = jsEnv.Eval<string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.DerivedClass(); let f1 = PUERTS.$ref(false); let f2 = PUERTS.$ref(false); let f3 = PUERTS.$ref(false); let res = obj.CatchByNextLevel(f1,f2, f3); res; "); jsEnv.Dispose(); Assert.AreEqual(res, "try-try-finally-catch-finally"); }
public void Reentrant() { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); let obj = new CS.Puerts.UnitTest.Reentrant(); function dosomething(){} obj.Callback = () => { obj.Call(false); dosomething();// 注释这行,或者Call没返回值就没事 } obj.Call(true); "); jsEnv.Dispose(); }
public void OperatorAddTest() { var jsEnv = new JsEnv(new TxtLoader()); var res = jsEnv.Eval <int>(@" const CS = require('csharp'); let obj1 = new CS.Puerts.UnitTest.BaseClass(); let obj2 = new CS.Puerts.UnitTest.BaseClass(); obj1.baseIntField = 11; obj2.baseIntField = 22; let obj3 = CS.Puerts.UnitTest.BaseClass.op_Addition(obj1, obj2); obj3.baseIntField; "); jsEnv.Dispose(); Assert.AreEqual(res, 33); }
public void NestTypeStaticMethodTest() { var jsEnv = new JsEnv(new TxtLoader()); int ret = jsEnv.Eval <int>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let res = PUERTS.$ref(0); CS.Puerts.UnitTest.DerivedClass.Inner.Sub(10,5,res); PUERTS.$unref (res); "); jsEnv.Dispose(); Assert.AreEqual(5, ret); }
public void Test4() { var jsEnv = new JsEnv(new TxtLoader()); int ret = jsEnv.Eval <int>(@" const CS = require('csharp'); let obj = new CS.Puerts.UnitTest.ArrayBufferClass(); let ab = obj.AB; let arr = new Uint8Array(ab,1); obj.Sum(arr.buffer); "); jsEnv.Dispose(); Assert.AreEqual(6, ret); }
public void Test6() { var jsEnv = new JsEnv(new TxtLoader()); ArrayBufferClass ret = jsEnv.Eval <ArrayBufferClass>(@" const CS = require('csharp'); let obj = new CS.Puerts.UnitTest.ArrayBufferClass(); let arr = new Uint8Array(obj.AB); arr[1] = 100; obj; "); jsEnv.Dispose(); Assert.AreEqual(2, ret.AB.Bytes[1]); }
public void ParamIntArrayTest() { var jsEnv = new JsEnv(new TxtLoader()); int res = jsEnv.Eval<int>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.ISubA(); let arrayInt = CS.System.Array.CreateInstance(PUERTS.$typeof(CS.System.Int32), 3); arrayInt.set_Item(0, 111); arrayInt.set_Item(1, 222); arrayInt.set_Item(2, 333); let res = obj.TestArrInt(arrayInt); res; "); jsEnv.Dispose(); Assert.AreEqual(res, 666); }
public void TryCatchFinallyTest() { var jsEnv = new JsEnv(new TxtLoader()); string res = jsEnv.Eval<string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.DerivedClass(); let t = PUERTS.$ref(false); let c = PUERTS.$ref(false); let f = PUERTS.$ref(false); let e = PUERTS.$ref(false); let res = obj.TryCatchFinally(true, t, c, f, e); res; "); jsEnv.Dispose(); Assert.AreEqual(res, "cfe"); }
public void Dispose() { JsOnDispose?.Invoke(); if (jsEnv != null) { try { jsEnv.Dispose(); jsEnv = null; } catch (Exception ex) { string msg = string.Format("js exception : {0}\n {1}", ex.Message, ex.StackTrace); Debug.Log(msg); } } }
public void EventTest() { var jsEnv = new JsEnv(new TxtLoader()); var res = jsEnv.Eval<string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.EventTest(); let dele = new CS.Puerts.UnitTest.MyCallBack((str) => { return str; }); obj.myCallBack = CS.System.Delegate.Combine(obj.myCallBack, dele); obj.add_myEvent(dele); CS.Puerts.UnitTest.EventTest.add_myStaticEvent(dele); let res = obj.Trigger(); res; "); jsEnv.Dispose(); Assert.AreEqual(res, "start delegate event static-event end"); }
public void InterfaceTest() { var jsEnv = new JsEnv(new TxtLoader()); string ret = jsEnv.Eval<string>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let iSubObj = new CS.Puerts.UnitTest.ISubA(); let iSubObj1 = PUERTS.$ref(new CS.Puerts.UnitTest.ISubA()); let iSubObj2 = PUERTS.$ref(new CS.Puerts.UnitTest.ISubA()); let deriveObj = new CS.Puerts.UnitTest.DerivedClass(); deriveObj.OutRefFunc(iSubObj,iSubObj1,iSubObj2); let res = iSubObj.TestDerivedObj(deriveObj,3,'gyx') + iSubObj.TestArr(iSubObj.a8) + iSubObj.running + PUERTS.$unref(iSubObj1).cmpTarget; res; "); jsEnv.Dispose(); Assert.AreEqual(ret, "gyx30 10789true100"); }
public void ESModuleImportCSharpNamespace() { var loader = new TxtLoader(); loader.AddMockFileContent("whatever.mjs", @" import csharp from 'csharp'; const func = function() { return csharp.System.String.Join(' ', 'hello', 'world') } export { func }; "); var jsEnv = new JsEnv(loader); var ns = jsEnv.ExecuteModule <JSObject>("whatever.mjs"); Assert.True(ns != null); Assert.True(ns.GetType() == typeof(JSObject)); jsEnv.Dispose(); }
public void Test5() { var jsEnv = new JsEnv(new TxtLoader()); int ret = jsEnv.Eval <int>(@" const CS = require('csharp'); let obj = new CS.Puerts.UnitTest.ArrayBufferClass(); let arr = new Uint16Array([1,2,3]); let ab = obj.GetMe(arr); let arr2 = new Uint8Array(ab); arr2[1] "); jsEnv.Dispose(); Assert.AreEqual(0, ret); }
public void ESModuleImportCSharp() { var loader = new TxtLoader(); loader.AddMockFileContent("whatever.mjs", @"import csharp from 'csharp'; csharp.System.Console.WriteLine('ESModuleImportCSharp')"); var jsEnv = new JsEnv(loader); try { jsEnv.ExecuteModule("whatever.mjs"); } catch (Exception e) { Assert.True(false); } jsEnv.Dispose(); }
public void ListRangeTest() { Assert.Catch(() => { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.DerivedClass(); let List = PUERTS.$generic(CS.System.Collections.Generic.List$1, CS.System.Int32); let ls = new List(); ls.Add(1); ls.Add(2); let res = obj.testListRange(ls,2);" ); jsEnv.Dispose(); }); }
public void ListGenericTest() { var jsEnv = new JsEnv(new TxtLoader()); var res = jsEnv.Eval<int>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.DerivedClass(); let List = PUERTS.$generic(CS.System.Collections.Generic.List$1,CS.System.Int32); let ls = new List(); ls.Add(1); ls.Add(2); ls.Add(3); let res = obj.TestList(ls); res; "); jsEnv.Dispose(); Assert.AreEqual(res, 6); }
public override void Dispose() { base.Dispose(); JsOnDispose?.Invoke(); if (jsEnv != null) { try { jsEnv.Dispose(); jsEnv = null; }catch (Exception ex) { string msg = string.Format("js exception : {0}\n {1}", ex.Message, ex.StackTrace); Logger.LogError(msg, null); } } }
public void TimerTest4() { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); let obj = CS.Puerts.UnitTest.Timer; let i = 0; let id = setInterval(()=>{obj.TimerTest4Num = ++i;},500); setTimeout(()=>{clearInterval(id);},200); "); for (int i = 0; i < 100; i++) { Assert.AreEqual(0, TimerTest4Num); jsEnv.Tick(); } jsEnv.Dispose(); }
public void ErrorParamStringArrayTest() { var jsEnv = new JsEnv(new TxtLoader()); int res = jsEnv.Eval<int>(@" const CS = require('csharp'); const PUERTS = require('puerts'); let obj = new CS.Puerts.UnitTest.ISubA(); let arrayString = CS.System.Array.CreateInstance(PUERTS.$typeof(CS.System.String), 3); arrayString.set_Item(0, '111'); arrayString.set_Item(1, '222'); arrayString.set_Item(2, '333'); let res; try {res = obj.TestArrInt(arrayString); } catch(e){res = -1;} res; "); jsEnv.Dispose(); Assert.AreEqual(res, -1); }
public void UnhandledRejectionCancel() { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); const puerts = require('puerts'); global.catched = false; puerts.on('unhandledRejection', function(reason) { global.catched = true; }); new Promise((resolve, reject)=>{ throw new Error('unhandled rejection'); }).catch(error => {}); "); var res = jsEnv.Eval<bool>("global.catched"); jsEnv.Dispose(); Assert.False(res); }
public void OperatorGreaterThanOrEqualTest() { var jsEnv = new JsEnv(new TxtLoader()); var res = jsEnv.Eval<string>(@" const CS = require('csharp'); let obj1 = new CS.Puerts.UnitTest.BaseClass(); let obj2 = new CS.Puerts.UnitTest.BaseClass(); obj1.baseIntField = 11; obj2.baseIntField = 22; let flag = CS.Puerts.UnitTest.BaseClass.op_GreaterThanOrEqual(obj1, obj2); let res = flag + '-'; flag = CS.Puerts.UnitTest.BaseClass.op_LessThanOrEqual(obj1, obj2); res = res + flag; res; "); jsEnv.Dispose(); Assert.AreEqual(res, "false-true"); }
public void SetIntervalTest() { SetIntervalTestNum = 0; var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); let obj = CS.Puerts.UnitTest.Timer; let i = 0; setInterval(()=>{obj.SetIntervalTestNum = ++i;},1000); "); for (int i = 0; i < 100; i++) { Assert.AreEqual(i / 10, SetIntervalTestNum); jsEnv.Tick(); } jsEnv.Dispose(); }
void Dispose() { if (JsEnv != null) { //Dispose JsEnv.Dispose(); JsEnv = null; //GC System.GC.Collect(); System.GC.WaitForPendingFinalizers(); } if (Loader != null) { Loader.Dispose(); Loader = null; } //GC System.GC.Collect(); System.GC.WaitForPendingFinalizers(); }
public void DelegateGC() { var jsEnv = new JsEnv(new TxtLoader()); jsEnv.Eval(@" const CS = require('csharp'); let obj = new CS.Puerts.UnitTest.BaseClass(); obj.ActionParam(Math.floor); "); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); jsEnv.Eval(@" obj.ActionParam(Math.floor); "); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); jsEnv.Tick(); jsEnv.Dispose(); }