summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-04-30 08:04:21 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-04-30 08:04:21 (GMT)
commit0b7a84684e0b2065208172d7145e838c7a653b83 (patch)
tree9f120c8fd71145c3b24f1280b2d553677fcac9bc
parent29cad9b72fb96b3e66bcbbc0d4db28fe26842598 (diff)
parentb742568492c56aee9445a1fbf3e90e9ef3cb5823 (diff)
downloadQt-0b7a84684e0b2065208172d7145e838c7a653b83.zip
Qt-0b7a84684e0b2065208172d7145e838c7a653b83.tar.gz
Qt-0b7a84684e0b2065208172d7145e838c7a653b83.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7
-rw-r--r--src/declarative/qml/qdeclarativeglobalscriptclass.cpp20
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/eval.qml23
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/function.qml19
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp31
4 files changed, 88 insertions, 5 deletions
diff --git a/src/declarative/qml/qdeclarativeglobalscriptclass.cpp b/src/declarative/qml/qdeclarativeglobalscriptclass.cpp
index fc802b4..6e107fb 100644
--- a/src/declarative/qml/qdeclarativeglobalscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeglobalscriptclass.cpp
@@ -53,19 +53,29 @@ QT_BEGIN_NAMESPACE
QDeclarativeGlobalScriptClass::QDeclarativeGlobalScriptClass(QScriptEngine *engine)
: QScriptClass(engine)
{
+ QString eval = QLatin1String("eval");
+
QScriptValue globalObject = engine->globalObject();
+
m_globalObject = engine->newObject();
+ QScriptValue newGlobalObject = engine->newObject();
QScriptValueIterator iter(globalObject);
+
while (iter.hasNext()) {
iter.next();
- m_globalObject.setProperty(iter.scriptName(), iter.value());
- m_illegalNames.insert(iter.name());
+
+ QString name = iter.name();
+
+ if (name != eval)
+ m_globalObject.setProperty(iter.scriptName(), iter.value());
+ newGlobalObject.setProperty(iter.scriptName(), iter.value());
+
+ m_illegalNames.insert(name);
}
- QScriptValue v = engine->newObject();
- v.setScriptClass(this);
- engine->setGlobalObject(v);
+ newGlobalObject.setScriptClass(this);
+ engine->setGlobalObject(newGlobalObject);
}
QScriptClass::QueryFlags
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/eval.qml b/tests/auto/declarative/qdeclarativeecmascript/data/eval.qml
new file mode 100644
index 0000000..bc2df98
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/eval.qml
@@ -0,0 +1,23 @@
+import Qt 4.7
+
+QtObject {
+ property bool test1: false;
+ property bool test2: false;
+ property bool test3: false;
+ property bool test4: false;
+ property bool test5: false;
+
+
+ property int a: 7
+ property int b: 8
+
+ Component.onCompleted: {
+ var b = 9;
+
+ test1 = (eval("a") == 7);
+ test2 = (eval("b") == 9);
+ test3 = (eval("c") == undefined);
+ test4 = (eval("console") == console);
+ test5 = (eval("Qt") == Qt);
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/function.qml b/tests/auto/declarative/qdeclarativeecmascript/data/function.qml
new file mode 100644
index 0000000..b435f58
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/function.qml
@@ -0,0 +1,19 @@
+import Qt 4.7
+
+QtObject {
+ property bool test1: false;
+ property bool test2: false;
+ property bool test3: false;
+
+ Component.onCompleted: {
+ var a = 10;
+
+ var func1 = new Function("a", "return a + 7");
+ var func2 = new Function("a", "return Qt.atob(a)");
+ var func3 = new Function("return a");
+
+ test1 = (func1(4) == 11);
+ test2 = (func2("Hello World!") == Qt.atob("Hello World!"));
+ test3 = (func3() == undefined);
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 49ee335..6d39be2 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -146,6 +146,8 @@ private slots:
void noSpuriousWarningsAtShutdown();
void canAssignNullToQObject();
void functionAssignment();
+ void eval();
+ void function();
void callQtInvokables();
private:
@@ -2329,6 +2331,35 @@ void tst_qdeclarativeecmascript::functionAssignment()
}
}
+void tst_qdeclarativeecmascript::eval()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("eval.qml"));
+
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test1").toBool(), true);
+ QCOMPARE(o->property("test2").toBool(), true);
+ QCOMPARE(o->property("test3").toBool(), true);
+ QCOMPARE(o->property("test4").toBool(), true);
+ QCOMPARE(o->property("test5").toBool(), true);
+
+ delete o;
+}
+
+void tst_qdeclarativeecmascript::function()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("function.qml"));
+
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test1").toBool(), true);
+ QCOMPARE(o->property("test2").toBool(), true);
+ QCOMPARE(o->property("test3").toBool(), true);
+
+ delete o;
+}
QTEST_MAIN(tst_qdeclarativeecmascript)