public void Can_read_properties_from_js_object() { var testObject = new JsTestsQml.TestObject(); dynamic result = null; Mock.Setup(x => x.Method(It.IsAny <INetJsValue>())).Callback(new Action <dynamic>(jsValue => { result = jsValue; })); Mock.Setup(x => x.GetTestObject()).Returns(testObject); RunQmlTest( "test", @" var netObject = test.getTestObject() test.method({ test1: 34, test2: 'test3', test3: netObject, test4: { test5: 'test5' } }) "); Mock.Verify(x => x.Method(It.IsAny <INetJsValue>()), Times.Exactly(1)); Mock.Verify(x => x.GetTestObject(), Times.Exactly(1)); ((object)result.nonExistant).Should().BeNull(); ((int)result.test1).Should().Be(34); ((string)result.test2).Should().Be("test3"); ((object)result.test3).Should().BeSameAs(testObject); ((string)result.test4.test5).Should().Be("test5"); }
public void Can_get_return_value_from_js_function() { var testObject = new JsTestsQml.TestObject(); var results = new List <object>(); Mock.Setup(x => x.GetTestObject()).Returns(testObject); Mock.Setup(x => x.Method(It.IsAny <INetJsValue>())).Callback(new Action <dynamic>(jsValue => { results.Add((object)jsValue()); })); NetTestHelper.RunQml(qmlApplicationEngine, @" import QtQuick 2.0 import tests 1.0 JsTestsQml { id: test Component.onCompleted: function() { var jsObject = { } test.method(function() { return 'test' }) test.method(function() { return 32 }) test.method(function() { return jsObject }) test.method(function() { return function() {} }) var netObject = test.getTestObject() test.method(function() { return netObject }) } } "); Mock.Verify(x => x.Method(It.IsAny <INetJsValue>()), Times.Exactly(5)); Mock.Verify(x => x.GetTestObject(), Times.Once); results.Should().HaveCount(5); results[0].Should().Be("test"); results[1].Should().Be(32); results[2].Should().BeAssignableTo <INetJsValue>().And.Subject.As <INetJsValue>().IsCallable.Should().BeFalse(); results[3].Should().BeAssignableTo <INetJsValue>().And.Subject.As <INetJsValue>().IsCallable.Should().BeTrue(); results[4].Should().BeSameAs(testObject); }