diff options
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/auto.pro | 1 | ||||
-rw-r--r-- | tests/auto/qmatrixnxn/tst_qmatrixnxn.cpp | 108 | ||||
-rw-r--r-- | tests/auto/v8.pro | 3 | ||||
-rw-r--r-- | tests/auto/v8/Makefile.nonqt | 16 | ||||
-rw-r--r-- | tests/auto/v8/README.txt | 13 | ||||
-rw-r--r-- | tests/auto/v8/tst_v8.cpp | 80 | ||||
-rw-r--r-- | tests/auto/v8/v8.pro | 9 | ||||
-rw-r--r-- | tests/auto/v8/v8main.cpp | 17 | ||||
-rw-r--r-- | tests/auto/v8/v8test.cpp | 254 | ||||
-rw-r--r-- | tests/auto/v8/v8test.h | 55 |
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 + |