summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/auto.pro1
-rw-r--r--tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp108
-rw-r--r--tests/auto/v8.pro3
-rw-r--r--tests/auto/v8/Makefile.nonqt16
-rw-r--r--tests/auto/v8/README.txt13
-rw-r--r--tests/auto/v8/tst_v8.cpp80
-rw-r--r--tests/auto/v8/v8.pro9
-rw-r--r--tests/auto/v8/v8main.cpp17
-rw-r--r--tests/auto/v8/v8test.cpp254
-rw-r--r--tests/auto/v8/v8test.h55
10 files changed, 542 insertions, 14 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index 02e8b5bebb..fc51280c35 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -11,3 +11,4 @@ SUBDIRS += \
!cross_compile: SUBDIRS += host.pro
contains(QT_CONFIG, opengl): SUBDIRS += opengl.pro
unix:!embedded:contains(QT_CONFIG, dbus): SUBDIRS += dbus.pro
+contains(QT_CONFIG, v8): SUBDIRS += v8.pro
diff --git a/tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp b/tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp
index 1b4d770ac6..98a559af85 100644
--- a/tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp
+++ b/tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp
@@ -1834,6 +1834,18 @@ void tst_QMatrixNxN::inverted4x4_data()
QTest::newRow("invertible")
<< (void *)invertible.v << (void *)inverted.v << true;
+ static Matrix4 const invertible2 = {
+ {1.0f, 2.0f, 4.0f, 2.0f,
+ 8.0f, 3.0f, 5.0f, 3.0f,
+ 6.0f, 7.0f, 9.0f, 4.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f}
+ };
+ static Matrix4 inverted2;
+ m4Inverse(invertible2, inverted2);
+
+ QTest::newRow("invertible2")
+ << (void *)invertible2.v << (void *)inverted2.v << true;
+
static Matrix4 const translate = {
{1.0f, 0.0f, 0.0f, 2.0f,
0.0f, 1.0f, 0.0f, 3.0f,
@@ -1907,12 +1919,12 @@ void tst_QMatrixNxN::orthonormalInverse4x4()
m2.rotate(45.0, 1.0, 0.0, 0.0);
m2.translate(10.0, 0.0, 0.0);
- // Use optimize() to drop the internal flags that
+ // Use operator() to drop the internal flags that
// mark the matrix as orthonormal. This will force inverted()
// to compute m3.inverted() the long way. We can then compare
// the result to what the faster algorithm produces on m2.
QMatrix4x4 m3 = m2;
- m3.optimize();
+ m3(0, 0);
bool invertible;
QVERIFY(qFuzzyCompare(m2.inverted(&invertible), m3.inverted()));
QVERIFY(invertible);
@@ -1920,7 +1932,7 @@ void tst_QMatrixNxN::orthonormalInverse4x4()
QMatrix4x4 m4;
m4.rotate(45.0, 0.0, 1.0, 0.0);
QMatrix4x4 m5 = m4;
- m5.optimize();
+ m5(0, 0);
QVERIFY(qFuzzyCompare(m4.inverted(), m5.inverted()));
QMatrix4x4 m6;
@@ -1928,7 +1940,7 @@ void tst_QMatrixNxN::orthonormalInverse4x4()
m1.translate(-20.0, 20.0, 15.0);
m1.rotate(25, 1.0, 0.0, 0.0);
QMatrix4x4 m7 = m6;
- m7.optimize();
+ m7(0, 0);
QVERIFY(qFuzzyCompare(m6.inverted(), m7.inverted()));
}
@@ -2449,6 +2461,11 @@ void tst_QMatrixNxN::normalMatrix_data()
0.0f, 7.0f, 0.0f, 5.0f,
0.0f, 0.0f, 9.0f, -3.0f,
0.0f, 0.0f, 0.0f, 1.0f};
+ static qreal const rotateValues[16] =
+ {0.0f, 0.0f, 1.0f, 0.0f,
+ 1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 1.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f};
static qreal const nullScaleValues1[16] =
{0.0f, 0.0f, 0.0f, 4.0f,
0.0f, 7.0f, 0.0f, 5.0f,
@@ -2468,6 +2485,7 @@ void tst_QMatrixNxN::normalMatrix_data()
QTest::newRow("translate") << (void *)translateValues;
QTest::newRow("scale") << (void *)scaleValues;
QTest::newRow("both") << (void *)bothValues;
+ QTest::newRow("rotate") << (void *)rotateValues;
QTest::newRow("null scale 1") << (void *)nullScaleValues1;
QTest::newRow("null scale 2") << (void *)nullScaleValues2;
QTest::newRow("null scale 3") << (void *)nullScaleValues3;
@@ -2844,11 +2862,13 @@ void tst_QMatrixNxN::convertGeneric()
// Copy of "flagBits" in qmatrix4x4.h.
enum {
- Identity = 0x0001, // Identity matrix
- General = 0x0002, // General matrix, unknown contents
- Translation = 0x0004, // Contains a simple translation
- Scale = 0x0008, // Contains a simple scale
- Rotation = 0x0010 // Contains a simple rotation
+ Identity = 0x0000, // Identity matrix
+ Translation = 0x0001, // Contains a translation
+ Scale = 0x0002, // Contains a scale
+ Rotation2D = 0x0004, // Contains a rotation about the Z axis
+ Rotation = 0x0008, // Contains an arbitrary rotation
+ Perspective = 0x0010, // Last row is different from (0, 0, 0, 1)
+ General = 0x001f // General matrix, unknown contents
};
// Structure that allows direct access to "flagBits" for testing.
@@ -2886,17 +2906,73 @@ void tst_QMatrixNxN::optimize_data()
0.0f, 0.0f, 1.0f, 4.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
- QTest::newRow("scale")
+ QTest::newRow("translate")
<< (void *)translateValues << (int)Translation;
- static qreal bothValues[16] = {
+ static qreal scaleTranslateValues[16] = {
1.0f, 0.0f, 0.0f, 2.0f,
0.0f, 2.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 4.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
- QTest::newRow("both")
- << (void *)bothValues << (int)(Scale | Translation);
+ QTest::newRow("scaleTranslate")
+ << (void *)scaleTranslateValues << (int)(Scale | Translation);
+
+ static qreal rotateValues[16] = {
+ 0.0f, 1.0f, 0.0f, 0.0f,
+ -1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("rotate")
+ << (void *)rotateValues << (int)Rotation2D;
+
+ // Left-handed system, not a simple rotation.
+ static qreal scaleRotateValues[16] = {
+ 0.0f, 1.0f, 0.0f, 0.0f,
+ 1.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("scaleRotate")
+ << (void *)scaleRotateValues << (int)(Scale | Rotation2D);
+
+ static qreal matrix2x2Values[16] = {
+ 1.0f, 2.0f, 0.0f, 0.0f,
+ 8.0f, 3.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 9.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("matrix2x2")
+ << (void *)matrix2x2Values << (int)(Scale | Rotation2D);
+
+ static qreal matrix3x3Values[16] = {
+ 1.0f, 2.0f, 4.0f, 0.0f,
+ 8.0f, 3.0f, 5.0f, 0.0f,
+ 6.0f, 7.0f, 9.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("matrix3x3")
+ << (void *)matrix3x3Values << (int)(Scale | Rotation2D | Rotation);
+
+ static qreal rotateTranslateValues[16] = {
+ 0.0f, 1.0f, 0.0f, 1.0f,
+ -1.0f, 0.0f, 0.0f, 2.0f,
+ 0.0f, 0.0f, 1.0f, 3.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("rotateTranslate")
+ << (void *)rotateTranslateValues << (int)(Translation | Rotation2D);
+
+ // Left-handed system, not a simple rotation.
+ static qreal scaleRotateTranslateValues[16] = {
+ 0.0f, 1.0f, 0.0f, 1.0f,
+ 1.0f, 0.0f, 0.0f, 2.0f,
+ 0.0f, 0.0f, 1.0f, 3.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f
+ };
+ QTest::newRow("scaleRotateTranslate")
+ << (void *)scaleRotateTranslateValues << (int)(Translation | Scale | Rotation2D);
static qreal belowValues[16] = {
1.0f, 0.0f, 0.0f, 0.0f,
@@ -3240,7 +3316,6 @@ void tst_QMatrixNxN::mapVector()
QFETCH(void *, mValues);
QMatrix4x4 m1((const qreal *)mValues);
- m1.optimize();
QVector3D v(3.5f, -1.0f, 2.5f);
@@ -3250,10 +3325,15 @@ void tst_QMatrixNxN::mapVector()
v.x() * m1(2, 0) + v.y() * m1(2, 1) + v.z() * m1(2, 2));
QVector3D actual = m1.mapVector(v);
+ m1.optimize();
+ QVector3D actual2 = m1.mapVector(v);
QVERIFY(fuzzyCompare(actual.x(), expected.x()));
QVERIFY(fuzzyCompare(actual.y(), expected.y()));
QVERIFY(fuzzyCompare(actual.z(), expected.z()));
+ QVERIFY(fuzzyCompare(actual2.x(), expected.x()));
+ QVERIFY(fuzzyCompare(actual2.y(), expected.y()));
+ QVERIFY(fuzzyCompare(actual2.z(), expected.z()));
}
class tst_QMatrixNxN4x4Properties : public QObject
diff --git a/tests/auto/v8.pro b/tests/auto/v8.pro
new file mode 100644
index 0000000000..226ff7b118
--- /dev/null
+++ b/tests/auto/v8.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = \
+ v8
diff --git a/tests/auto/v8/Makefile.nonqt b/tests/auto/v8/Makefile.nonqt
new file mode 100644
index 0000000000..ded1ba3a74
--- /dev/null
+++ b/tests/auto/v8/Makefile.nonqt
@@ -0,0 +1,16 @@
+V8PATH = ../../../src/3rdparty/v8
+V8LIBPATH = $(V8PATH)
+V8INCPATH = $(V8PATH)/include
+SOURCES = v8main.cpp v8test.cpp
+
+release-m32:
+ g++ -o v8test_release_m32 -m32 -O2 -I$(V8INCPATH) $(SOURCES) -lpthread -L$(V8LIBPATH) -lv8
+
+debug-m32:
+ g++ -o v8test_debug_m32 -m32 -g -I$(V8INCPATH) $(SOURCES) -lpthread -L$(V8LIBPATH) -lv8_g
+
+release:
+ g++ -o v8test_release -O2 -I$(V8INCPATH) $(SOURCES) -lpthread -L$(V8LIBPATH) -lv8
+
+debug:
+ g++ -o v8test_debug -g -I$(V8INCPATH) $(SOURCES) -lpthread -L$(V8LIBPATH) -lv8_g
diff --git a/tests/auto/v8/README.txt b/tests/auto/v8/README.txt
new file mode 100644
index 0000000000..097c459036
--- /dev/null
+++ b/tests/auto/v8/README.txt
@@ -0,0 +1,13 @@
+The v8 tests are actually implemented in v8test.[h|cpp]. There are also QtTest
+(tst_v8.cpp) and non-Qt (v8main.cpp) stubs provided to run these tests. This
+is done to allow the tests to be run both in the Qt CI system, and manually
+without a build of Qt. The latter is necessary to run them against more exotic
+build of V8, like the ARM simulator.
+
+To build the non-Qt version of the tests, first build a debug or release V8
+library under src/3rdparty/v8 using scons, and then use the Makefile.nonqt
+makefile selecting one of the following targets:
+ release: Build the tests with -O2 and link against libv8
+ debug: Build the tests with -g and link against libv8_g
+ release-m32: Build the tests with -O2 -m32 and link against libv8
+ debug-m32: Build the tests with -g -m32 and link against libv8_g
diff --git a/tests/auto/v8/tst_v8.cpp b/tests/auto/v8/tst_v8.cpp
new file mode 100644
index 0000000000..4ff80067c5
--- /dev/null
+++ b/tests/auto/v8/tst_v8.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+#include <private/v8.h>
+#include "v8test.h"
+
+using namespace v8;
+
+class tst_v8 : public QObject
+{
+ Q_OBJECT
+public:
+ tst_v8() {}
+
+private slots:
+ void initTestCase() {}
+ void cleanupTestCase() {}
+
+ void eval();
+ void userobjectcompare();
+};
+
+void tst_v8::eval()
+{
+ QVERIFY(v8test_eval());
+}
+
+void tst_v8::userobjectcompare()
+{
+ QVERIFY(v8test_userobjectcompare());
+}
+
+int main(int argc, char *argv[])
+{
+ V8::SetFlagsFromCommandLine(&argc, argv, true);
+
+ QCoreApplication app(argc, argv);
+ tst_v8 tc;
+ return QTest::qExec(&tc, argc, argv);
+}
+
+#include "tst_v8.moc"
diff --git a/tests/auto/v8/v8.pro b/tests/auto/v8/v8.pro
new file mode 100644
index 0000000000..feda53bf50
--- /dev/null
+++ b/tests/auto/v8/v8.pro
@@ -0,0 +1,9 @@
+load(qttest_p4)
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_v8.cpp v8test.cpp
+HEADERS += v8test.h
+
+CONFIG += parallel_test
+
+QT += v8-private
diff --git a/tests/auto/v8/v8main.cpp b/tests/auto/v8/v8main.cpp
new file mode 100644
index 0000000000..fa0137938e
--- /dev/null
+++ b/tests/auto/v8/v8main.cpp
@@ -0,0 +1,17 @@
+#include "v8test.h"
+#include <stdio.h>
+
+#define RUN_TEST(testname) { \
+ if (!v8test_ ## testname()) \
+ printf ("Test %s FAILED\n", # testname); \
+}
+
+int main(int argc, char *argv[])
+{
+ v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
+
+ RUN_TEST(eval);
+ RUN_TEST(userobjectcompare);
+
+ return -1;
+}
diff --git a/tests/auto/v8/v8test.cpp b/tests/auto/v8/v8test.cpp
new file mode 100644
index 0000000000..a712bf12b4
--- /dev/null
+++ b/tests/auto/v8/v8test.cpp
@@ -0,0 +1,254 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "v8test.h"
+
+using namespace v8;
+
+#define BEGINTEST() bool _testPassed = true;
+#define ENDTEST() return _testPassed;
+
+#define VERIFY(expr) { \
+ if (!(expr)) { \
+ fprintf(stderr, "FAIL: %s:%d %s\n", __FILE__, __LINE__, # expr); \
+ _testPassed = false; \
+ goto cleanup; \
+ } \
+}
+
+
+bool v8test_eval()
+{
+ BEGINTEST();
+
+ HandleScope handle_scope;
+ Persistent<Context> context = Context::New();
+ Context::Scope context_scope(context);
+
+ Local<Object> qmlglobal = Object::New();
+ qmlglobal->Set(String::New("a"), Integer::New(1922));
+
+ Local<Script> script = Script::Compile(String::New("eval(\"a\")"), NULL, NULL,
+ Handle<String>(), Script::QmlMode);
+
+ TryCatch tc;
+ Local<Value> result = script->Run(qmlglobal);
+
+ VERIFY(!tc.HasCaught());
+ VERIFY(result->Int32Value() == 1922);
+
+cleanup:
+ context.Dispose();
+
+ ENDTEST();
+}
+
+static int userObjectComparisonCalled = 0;
+static bool userObjectComparisonReturn = false;
+static Local<Object> expectedLhs;
+static Local<Object> expectedRhs;
+static bool expectedObjectsCompared = false;
+
+#define SET_EXPECTED(lhs, rhs) { \
+ expectedObjectsCompared = false; \
+ expectedLhs = lhs; \
+ expectedRhs = rhs; \
+}
+
+static bool UserObjectComparison(Local<Object> lhs, Local<Object> rhs)
+{
+ userObjectComparisonCalled++;
+
+ expectedObjectsCompared = (lhs == expectedLhs && rhs == expectedRhs);
+
+ return userObjectComparisonReturn;
+}
+
+inline bool runscript(const char *source) {
+ Local<Script> script = Script::Compile(String::New(source));
+ Local<Value> result = script->Run();
+ return result->BooleanValue();
+}
+
+bool v8test_userobjectcompare()
+{
+ BEGINTEST();
+
+ HandleScope handle_scope;
+ Persistent<Context> context = Context::New();
+ Context::Scope context_scope(context);
+
+ V8::SetUserObjectComparisonCallbackFunction(UserObjectComparison);
+
+ Local<ObjectTemplate> ot = ObjectTemplate::New();
+ ot->MarkAsUseUserObjectComparison();
+
+ Local<Object> uoc1 = ot->NewInstance();
+ Local<Object> uoc2 = ot->NewInstance();
+ context->Global()->Set(String::New("uoc1a"), uoc1);
+ context->Global()->Set(String::New("uoc1b"), uoc1);
+ context->Global()->Set(String::New("uoc2"), uoc2);
+ Local<Object> obj1 = Object::New();
+ context->Global()->Set(String::New("obj1a"), obj1);
+ context->Global()->Set(String::New("obj1b"), obj1);
+ context->Global()->Set(String::New("obj2"), Object::New());
+ Local<String> string1 = String::New("Hello World");
+ context->Global()->Set(String::New("string1a"), string1);
+ context->Global()->Set(String::New("string1b"), string1);
+ context->Global()->Set(String::New("string2"), v8::String::New("Goodbye World"));
+
+ // XXX Opportunity for optimization - don't invoke user callback if objects are
+ // equal.
+#if 0
+ userObjectComparisonCalled = 0; userObjectComparisonReturn = false;
+ VERIFY(true == runscript("uoc1a == uoc1b"));
+ VERIFY(userObjectComparisonCalled == 0);
+#endif
+
+ // Comparing two uoc objects invokes uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(false == runscript("uoc1a == uoc2"));
+ VERIFY(userObjectComparisonCalled == 1);
+
+ VERIFY(false == runscript("uoc2 == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 2);
+ userObjectComparisonReturn = true;
+ VERIFY(true == runscript("uoc1a == uoc2"));
+ VERIFY(userObjectComparisonCalled == 3);
+ VERIFY(true == runscript("uoc2 == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 4);
+
+ // != on two uoc object invokes uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(true == runscript("uoc1a != uoc2"));
+ VERIFY(userObjectComparisonCalled == 1);
+ VERIFY(true == runscript("uoc2 != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 2);
+ userObjectComparisonReturn = true;
+ VERIFY(false == runscript("uoc1a != uoc2"));
+ VERIFY(userObjectComparisonCalled == 3);
+ VERIFY(false == runscript("uoc2 != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 4);
+
+ // Comparison against a non-object doesn't invoke uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(false == runscript("uoc1a == string1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+ VERIFY(false == runscript("string1a == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+ VERIFY(false == runscript("2 == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+ VERIFY(true == runscript("uoc1a != string1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+ VERIFY(true == runscript("string1a != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+ VERIFY(true == runscript("2 != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 0);
+
+ // Comparison against a non-uoc-object still invokes uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(false == runscript("uoc1a == obj1a"));
+ VERIFY(userObjectComparisonCalled == 1);
+ VERIFY(false == runscript("obj1a == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 2);
+ userObjectComparisonReturn = true;
+ VERIFY(true == runscript("uoc1a == obj1a"));
+ VERIFY(userObjectComparisonCalled == 3);
+ VERIFY(true == runscript("obj1a == uoc1a"));
+ VERIFY(userObjectComparisonCalled == 4);
+
+ // != comparison against a non-uoc-object still invokes uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(true == runscript("uoc1a != obj1a"));
+ VERIFY(userObjectComparisonCalled == 1);
+ VERIFY(true == runscript("obj1a != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 2);
+ userObjectComparisonReturn = true;
+ VERIFY(false == runscript("uoc1a != obj1a"));
+ VERIFY(userObjectComparisonCalled == 3);
+ VERIFY(false == runscript("obj1a != uoc1a"));
+ VERIFY(userObjectComparisonCalled == 4);
+
+ // Comparing two non-uoc objects does not invoke uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ VERIFY(true == runscript("obj1a == obj1a"));
+ VERIFY(true == runscript("obj1a == obj1b"));
+ VERIFY(false == runscript("obj1a == obj2"));
+ VERIFY(false == runscript("obj1a == string1a"));
+ VERIFY(true == runscript("string1a == string1a"));
+ VERIFY(true == runscript("string1a == string1b"));
+ VERIFY(false == runscript("string1a == string2"));
+ VERIFY(userObjectComparisonCalled == 0);
+
+ // Correct lhs and rhs passed to uoc
+ userObjectComparisonCalled = 0;
+ userObjectComparisonReturn = false;
+ SET_EXPECTED(uoc1, uoc2);
+ VERIFY(false == runscript("uoc1a == uoc2"));
+ VERIFY(true == expectedObjectsCompared);
+ SET_EXPECTED(uoc2, uoc1);
+ VERIFY(false == runscript("uoc2 == uoc1a"));
+ VERIFY(true == expectedObjectsCompared);
+ SET_EXPECTED(uoc1, uoc2);
+ VERIFY(true == runscript("uoc1a != uoc2"));
+ VERIFY(true == expectedObjectsCompared);
+ SET_EXPECTED(uoc2, uoc1);
+ VERIFY(true == runscript("uoc2 != uoc1a"));
+ VERIFY(true == expectedObjectsCompared);
+ SET_EXPECTED(uoc1, obj1);
+ VERIFY(false == runscript("uoc1a == obj1a"));
+ VERIFY(true == expectedObjectsCompared);
+ SET_EXPECTED(obj1, uoc1);
+ VERIFY(false == runscript("obj1a == uoc1a"));
+ VERIFY(true == expectedObjectsCompared);
+
+cleanup:
+ V8::SetUserObjectComparisonCallbackFunction(0);
+ context.Dispose();
+
+ ENDTEST();
+}
diff --git a/tests/auto/v8/v8test.h b/tests/auto/v8/v8test.h
new file mode 100644
index 0000000000..812036dd66
--- /dev/null
+++ b/tests/auto/v8/v8test.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef V8TEST_H
+#define V8TEST_H
+
+#ifdef QT_CORE_LIB
+#include <private/v8.h>
+#else
+#include <v8.h>
+#endif
+
+bool v8test_eval();
+bool v8test_userobjectcompare();
+
+#endif // V8TEST_H
+