if ("mapFromItem" in o && "mapToItem" in o) {
return "declarativeitem"; // @todo improve detection of declarative items
} else if ("x" in o && "y" in o && "z" in o) {
+ console.log("typeof debug:" + o);
return "vector3d"; // Qt3D vector
}
return "object";
// Author: Philippe Rathé <prathe@gmail.com>
function qtest_compareInternal(act, exp) {
var success = false;
-
if (act === exp) {
success = true; // catch the most you can
} else if (act === null || exp === null || typeof act === "undefined" || typeof exp === "undefined") {
success = false; // don't lose time with error prone cases
} else {
var typeExp = qtest_typeof(exp), typeAct = qtest_typeof(act)
-
if (typeExp !== typeAct) {
// allow object vs string comparison (e.g. for colors)
// else break on different types
- if ((typeExp === "string" && typeAct === "object") || (typeExp === "object" && typeAct === "string")) {
+ if ((typeExp === "string" && (typeAct === "object") || typeAct == "declarativeitem")
+ || ((typeExp === "object" || typeExp == "declarativeitem") && typeAct === "string")) {
success = (act == exp)
}
} else if (typeExp === "string" || typeExp === "boolean" || typeExp === "number" ||
for (i in act) { // be strict: don't ensures hasOwnProperty and go deep
aProperties.push(i); // collect act's properties
-
if (!qtest_compareInternal(act[i], exp[i])) {
eq = false;
break;
}
function qtest_formatValue(value) {
- if (typeof value == "object") {
+ if (qtest_typeof(value) == "object") {
if ("x" in value && "y" in value && "z" in value) {
return "Qt.vector3d(" + value.x + ", " +
value.y + ", " + value.z + ")"
function compare(actual, expected, msg) {
var act = qtest_formatValue(actual)
var exp = qtest_formatValue(expected)
+
var success = qtest_compareInternal(actual, expected)
if (msg === undefined) {
if (success)
else
msg = "Compared values are not the same"
}
- if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine()))
+ if (!qtest_results.compare(success, msg, act, exp, util.callerFile(), util.callerLine())) {
throw new Error("QtQuickTest::fail")
+ }
}
function tryCompare(obj, prop, value, timeout) {
}
public Q_SLOTS:
+
+ QDeclarativeV8Handle typeName(const QVariant& v) const
+ {
+ QString name(v.typeName());
+ //qDebug() << "type:" << name << " string value:" << v.toString() << " value:" << v;
+ if (v.canConvert<QObject*>()) {
+ QDeclarativeType *type = 0;
+ const QMetaObject *mo = v.value<QObject*>()->metaObject();
+ while (!type && mo) {
+ type = QDeclarativeMetaType::qmlType(mo);
+ mo = mo->superClass();
+ }
+ if (type) {
+ name = type->qmlTypeName();
+ }
+ }
+
+ return QDeclarativeV8Handle::fromHandle(v8::String::New(name.toUtf8()));
+ }
+
+ bool compare(const QVariant& act, const QVariant& exp) const {
+ return act == exp;
+ }
+// QDeclarativeV8Handle toString(const QVariant& v) const
+// {
+// QString name(v.typeName());
+
+// if (v.canConvert<QObject*>()) {
+// QDeclarativeType *type = 0;
+// const QMetaObject *mo = v.value<QObject*>()->metaObject();
+// while (!type && mo) {
+// type = QDeclarativeMetaType::qmlType(mo);
+// mo = mo->superClass();
+// }
+// if (type) {
+// name = type->qmlTypeName();
+// }
+// }
+
+// return QDeclarativeV8Handle::fromHandle(v8::String::New(name.toUtf8()));
+// }
+
QDeclarativeV8Handle callerFile(int frameIndex = 0) const
{
v8::HandleScope scope;