mirror of
https://github.com/qmlnet/qmlnet.git
synced 2026-05-21 06:45:32 -06:00
Added tests for the get indexer.
This commit is contained in:
parent
7997adbdc7
commit
9def032327
6 changed files with 73 additions and 25 deletions
|
|
@ -68,33 +68,13 @@ ReturnedValue NetArray::getIndexed(const Managed *m, uint index, bool *hasProper
|
|||
}
|
||||
|
||||
NetValue* netValue = reinterpret_cast<NetValue*>(wrapper->d()->object());
|
||||
QSharedPointer<NetTypeInfo> typeInfo = netValue->getNetReference()->getTypeInfo();
|
||||
QSharedPointer<NetTypeArrayFacade> arrayFacade = netValue->getNetReference()->getTypeInfo()->getArrayFacade();
|
||||
|
||||
QSharedPointer<NetMethodInfo> getMethod;
|
||||
for(int x = 0; x < typeInfo->getMethodCount(); x++) {
|
||||
QSharedPointer<NetMethodInfo> methodInfo = typeInfo->getMethodInfo(x);
|
||||
if(methodInfo->getMethodName().compare("Get") == 0) {
|
||||
getMethod = methodInfo;
|
||||
break;
|
||||
}
|
||||
if(arrayFacade == nullptr) {
|
||||
THROW_GENERIC_ERROR("The wrapped object can't be treated as an array.");
|
||||
}
|
||||
|
||||
if(getMethod == nullptr) {
|
||||
THROW_GENERIC_ERROR("Couldn't find the Get method for the .NET array");
|
||||
}
|
||||
|
||||
QSharedPointer<NetVariantList> parameters = QSharedPointer<NetVariantList>(new NetVariantList());
|
||||
QSharedPointer<NetVariant> parameter = QSharedPointer<NetVariant>(new NetVariant());
|
||||
parameter->setInt(static_cast<int>(index));
|
||||
parameters->add(parameter);
|
||||
QSharedPointer<NetVariant> result = QSharedPointer<NetVariant>(new NetVariant());
|
||||
invokeNetMethod(getMethod, netValue->getNetReference(), parameters, result);
|
||||
|
||||
QSharedPointer<NetVariant> result = arrayFacade->getIndexed(netValue->getNetReference(), static_cast<int>(index));
|
||||
QJSValue resultJsValue = result->toQJSValue(scope.engine->jsEngine());
|
||||
|
||||
if(resultJsValue.isNull() || resultJsValue.isUndefined()) {
|
||||
THROW_GENERIC_ERROR("Couldn't find the Get method for the .NET array");
|
||||
}
|
||||
|
||||
return scope.engine->fromVariant(resultJsValue.toVariant());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,3 +25,13 @@ int NetTypeArrayFacade::getLength(QSharedPointer<NetReference>)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
QSharedPointer<NetVariant> NetTypeArrayFacade::getIndexed(QSharedPointer<NetReference>, int)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void NetTypeArrayFacade::setIndexed(QSharedPointer<NetReference>, int, QSharedPointer<NetVariant>)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
class NetTypeInfo;
|
||||
class NetReference;
|
||||
class NetVariant;
|
||||
|
||||
class NetTypeArrayFacade
|
||||
{
|
||||
|
|
@ -14,6 +15,8 @@ public:
|
|||
virtual ~NetTypeArrayFacade() {}
|
||||
static QSharedPointer<NetTypeArrayFacade> fromType(QSharedPointer<NetTypeInfo> type);
|
||||
virtual int getLength(QSharedPointer<NetReference> reference);
|
||||
virtual QSharedPointer<NetVariant> getIndexed(QSharedPointer<NetReference> reference, int index);
|
||||
virtual void setIndexed(QSharedPointer<NetReference> reference, int index, QSharedPointer<NetVariant> value);
|
||||
};
|
||||
|
||||
#endif // NETTYPEARRAYFACADE_H
|
||||
|
|
|
|||
|
|
@ -16,7 +16,18 @@ NetTypeArrayFacade_Array::NetTypeArrayFacade_Array(QSharedPointer<NetTypeInfo> t
|
|||
}
|
||||
}
|
||||
|
||||
if(_lengthProperty == nullptr) {
|
||||
for(int x = 0; x < type->getMethodCount(); x++) {
|
||||
QSharedPointer<NetMethodInfo> method = type->getMethodInfo(x);
|
||||
if(method->getMethodName().compare("Get") == 0) {
|
||||
_getIndexed = method;
|
||||
} else if(method->getMethodName().compare("Set") == 0) {
|
||||
_setIndexed = method;
|
||||
}
|
||||
}
|
||||
|
||||
if(_lengthProperty == nullptr ||
|
||||
_getIndexed == nullptr ||
|
||||
_setIndexed == nullptr) {
|
||||
_isIncomplete = true;
|
||||
return;
|
||||
}
|
||||
|
|
@ -33,3 +44,25 @@ int NetTypeArrayFacade_Array::getLength(QSharedPointer<NetReference> reference)
|
|||
readProperty(_lengthProperty, reference, result);
|
||||
return result->getInt();
|
||||
}
|
||||
|
||||
QSharedPointer<NetVariant> NetTypeArrayFacade_Array::getIndexed(QSharedPointer<NetReference> reference, int index)
|
||||
{
|
||||
QSharedPointer<NetVariantList> parameters = QSharedPointer<NetVariantList>(new NetVariantList());
|
||||
QSharedPointer<NetVariant> parameter = QSharedPointer<NetVariant>(new NetVariant());
|
||||
parameter->setInt(static_cast<int>(index));
|
||||
parameters->add(parameter);
|
||||
QSharedPointer<NetVariant> result = QSharedPointer<NetVariant>(new NetVariant());
|
||||
invokeNetMethod(_getIndexed, reference, parameters, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
void NetTypeArrayFacade_Array::setIndexed(QSharedPointer<NetReference> reference, int index, QSharedPointer<NetVariant> value)
|
||||
{
|
||||
QSharedPointer<NetVariantList> parameters = QSharedPointer<NetVariantList>(new NetVariantList());
|
||||
QSharedPointer<NetVariant> parameter = QSharedPointer<NetVariant>(new NetVariant());
|
||||
parameter->setInt(static_cast<int>(index));
|
||||
parameters->add(parameter);
|
||||
parameters->add(value);
|
||||
QSharedPointer<NetVariant> result = QSharedPointer<NetVariant>(new NetVariant());
|
||||
invokeNetMethod(_setIndexed, reference, parameters, result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,9 +12,13 @@ public:
|
|||
NetTypeArrayFacade_Array(QSharedPointer<NetTypeInfo> type);
|
||||
bool isIncomplete();
|
||||
int getLength(QSharedPointer<NetReference> reference);
|
||||
QSharedPointer<NetVariant> getIndexed(QSharedPointer<NetReference> reference, int index);
|
||||
void setIndexed(QSharedPointer<NetReference> reference, int index, QSharedPointer<NetVariant> value);
|
||||
private:
|
||||
bool _isIncomplete;
|
||||
QSharedPointer<NetPropertyInfo> _lengthProperty;
|
||||
QSharedPointer<NetMethodInfo> _getIndexed;
|
||||
QSharedPointer<NetMethodInfo> _setIndexed;
|
||||
};
|
||||
|
||||
#endif // NETTYPEARRAYFACADEARRAY_H
|
||||
|
|
|
|||
|
|
@ -35,5 +35,23 @@ namespace Qml.Net.Tests.Qml
|
|||
Mock.Verify(x => x.GetArray(), Times.Once);
|
||||
Mock.Verify(x => x.Test(3), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Can_get_indexed()
|
||||
{
|
||||
var array = new[] {3, 4, 6};
|
||||
Mock.Setup(x => x.GetArray()).Returns(array);
|
||||
Mock.Setup(x => x.Test(4));
|
||||
|
||||
RunQmlTest(
|
||||
"test",
|
||||
@"
|
||||
var array = Net.toJsArray(test.getArray())
|
||||
test.test(array[1])
|
||||
");
|
||||
|
||||
Mock.Verify(x => x.GetArray(), Times.Once);
|
||||
Mock.Verify(x => x.Test(4), Times.Once);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue