Verified we can call forEach.

This commit is contained in:
Paul Knopf 2018-08-17 21:09:23 -04:00
parent 3e1c7de378
commit 37158962e5
8 changed files with 30 additions and 8 deletions

View file

@ -21,6 +21,8 @@ struct NetArray : Object
V4_OBJECT2(NetArray, Object)
V4_NEEDS_DESTROY
Q_MANAGED_TYPE(ArrayObject)
V4_PROTOTYPE(arrayPrototype)
static ReturnedValue create(ExecutionEngine *engine, NetValue* netValue);
static ReturnedValue method_length(const FunctionObject *b, const Value *thisObject, const Value *argv, int argc);

View file

@ -21,7 +21,7 @@ QSharedPointer<NetTypeArrayFacade> NetTypeArrayFacade::fromType(QSharedPointer<N
}
int NetTypeArrayFacade::getLength(QSharedPointer<NetReference>)
uint NetTypeArrayFacade::getLength(QSharedPointer<NetReference>)
{
return 0;
}

View file

@ -14,7 +14,7 @@ public:
NetTypeArrayFacade();
virtual ~NetTypeArrayFacade() {}
static QSharedPointer<NetTypeArrayFacade> fromType(QSharedPointer<NetTypeInfo> type);
virtual int getLength(QSharedPointer<NetReference> reference);
virtual uint getLength(QSharedPointer<NetReference> reference);
virtual QSharedPointer<NetVariant> getIndexed(QSharedPointer<NetReference> reference, int index);
virtual void setIndexed(QSharedPointer<NetReference> reference, int index, QSharedPointer<NetVariant> value);
};

View file

@ -38,11 +38,11 @@ bool NetTypeArrayFacade_Array::isIncomplete()
return _isIncomplete;
}
int NetTypeArrayFacade_Array::getLength(QSharedPointer<NetReference> reference)
uint NetTypeArrayFacade_Array::getLength(QSharedPointer<NetReference> reference)
{
QSharedPointer<NetVariant> result = QSharedPointer<NetVariant>(new NetVariant());
readProperty(_lengthProperty, reference, result);
return result->getInt();
return static_cast<uint>(result->getInt());
}
QSharedPointer<NetVariant> NetTypeArrayFacade_Array::getIndexed(QSharedPointer<NetReference> reference, int index)

View file

@ -11,7 +11,7 @@ class NetTypeArrayFacade_Array : public NetTypeArrayFacade
public:
NetTypeArrayFacade_Array(QSharedPointer<NetTypeInfo> type);
bool isIncomplete();
int getLength(QSharedPointer<NetReference> reference);
uint getLength(QSharedPointer<NetReference> reference);
QSharedPointer<NetVariant> getIndexed(QSharedPointer<NetReference> reference, int index);
void setIndexed(QSharedPointer<NetReference> reference, int index, QSharedPointer<NetVariant> value);
private:

View file

@ -71,5 +71,26 @@ namespace Qml.Net.Tests.Qml
Mock.Verify(x => x.GetArray(), Times.Once);
array[2].Should().Be(234);
}
[Fact]
public void Can_forEach()
{
var array = new[] {3, 4, 7};
Mock.Setup(x => x.GetArray()).Returns(array);
RunQmlTest(
"test",
@"
var array = Net.toJsArray(test.getArray())
array.forEach(function(value) {
test.test(value)
})
");
Mock.Verify(x => x.GetArray(), Times.Once);
Mock.Verify(x => x.Test(3), Times.Once);
Mock.Verify(x => x.Test(4), Times.Once);
Mock.Verify(x => x.Test(7), Times.Once);
}
}
}

View file

@ -265,7 +265,7 @@ namespace Qml.Net.Tests.Types
type.GetStaticMethod(0).MethodName.Should().Be("StaticMethod");
}
public class TestType12
public class TestType13
{
public string[] Property { get; set; }
}
@ -273,7 +273,7 @@ namespace Qml.Net.Tests.Types
[Fact]
public void Can_detect_array_type()
{
var type = NetTypeManager.GetTypeInfo<TestType12>();
var type = NetTypeManager.GetTypeInfo<TestType13>();
type.EnsureLoaded();
var property = type.GetProperty(0);
var returnType = property.ReturnType;

View file

@ -49,7 +49,6 @@ namespace Qml.Net.Internal
type.IsArray = typeInfo.IsArray;
foreach (var methodInfo in typeInfo.GetMethods(BindingFlags.Public | BindingFlags.Instance))
foreach (var methodInfo in typeInfo.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static))
{
if (methodInfo.IsGenericMethod) continue; // No generics supported.