예제 #1
0
        public void TestCallMethodWithOutArgument()
        {
            const string typeName = "AssemblyForTests.StaticClass";

            var engine = REngine.GetInstance();

            ClrProxy.LoadAssembly(PATH);

            var sexp      = engine.CreateNumeric(0.0);
            var arguments = new[] { (long)sexp.DangerousGetHandle() };

            Assert.IsTrue(ClrProxy.CallStaticMethod(typeName, "TryGetValue", arguments, arguments.Length, out var results, out var resultsSize));
            Assert.AreEqual(2, resultsSize);
            Assert.IsTrue(engine.CreateFromNativeSexp(new IntPtr(results[0])).AsLogical()[0]);
            Assert.AreEqual(12.4, engine.CreateFromNativeSexp(new IntPtr(results[1])).AsNumeric()[0]);

            Assert.IsTrue(ClrProxy.CreateObject("AssemblyForTests.DefaultCtorData", null, 0, out var ptr));
            arguments = new[] { ptr };
            Assert.IsTrue(ClrProxy.CallStaticMethod(typeName, "TryGetObject", arguments, arguments.Length, out results, out resultsSize));
            Assert.AreEqual(2, resultsSize);
            Assert.IsTrue(engine.CreateFromNativeSexp(new IntPtr(results[0])).AsLogical()[0]);

            Assert.IsTrue(ClrProxy.GetProperty(results[1], "Name", out var namePtr));
            Assert.AreEqual("Out object", engine.CreateFromNativeSexp(new IntPtr(namePtr)).AsCharacter()[0]);
        }
예제 #2
0
        public void TestGetAndSetProperty()
        {
            var engine = REngine.GetInstance();

            ClrProxy.LoadAssembly(PATH);

            Assert.IsTrue(ClrProxy.CreateObject("AssemblyForTests.DefaultCtorData", null, 0, out var externalPtr));

            var sexp = engine.CreateCharacter("Test");

            ClrProxy.SetProperty(externalPtr, "Name", sexp.DangerousGetHandle().ToInt64());

            Assert.IsTrue(ClrProxy.GetProperty(externalPtr, "Name", out var result));

            Assert.AreEqual("Test", engine.CreateFromNativeSexp(new IntPtr(result)).AsCharacter()[0]);
        }