summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-10-11 15:06:25 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-10 13:22:13 +0100
commitbcd16f9453e543ba819385d87bd7061a4caeb325 (patch)
tree4296919fa02e8188be3b28ca7fa4ab548693be33 /tests/auto
parent95d7abb694d5d21acf0a15dcbf3feb4514bd2ab4 (diff)
Update V8
Change-Id: Ic239ef1e55bed06260e4a04cc2199f64c2d30059 Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/v8/tst_v8.cpp12
-rw-r--r--tests/auto/v8/v8main.cpp11
-rw-r--r--tests/auto/v8/v8test.cpp82
-rw-r--r--tests/auto/v8/v8test.h2
4 files changed, 105 insertions, 2 deletions
diff --git a/tests/auto/v8/tst_v8.cpp b/tests/auto/v8/tst_v8.cpp
index c753806518..77a3413718 100644
--- a/tests/auto/v8/tst_v8.cpp
+++ b/tests/auto/v8/tst_v8.cpp
@@ -57,6 +57,8 @@ private slots:
void eval();
void evalwithinwith();
void userobjectcompare();
+ void externalteardown();
+ void globalcall();
};
void tst_v8::eval()
@@ -74,6 +76,16 @@ void tst_v8::userobjectcompare()
QVERIFY(v8test_userobjectcompare());
}
+void tst_v8::externalteardown()
+{
+ QVERIFY(v8test_externalteardown());
+}
+
+void tst_v8::globalcall()
+{
+ QVERIFY(v8test_globalcall());
+}
+
int main(int argc, char *argv[])
{
V8::SetFlagsFromCommandLine(&argc, argv, true);
diff --git a/tests/auto/v8/v8main.cpp b/tests/auto/v8/v8main.cpp
index b38bbabbd5..091d2cae28 100644
--- a/tests/auto/v8/v8main.cpp
+++ b/tests/auto/v8/v8main.cpp
@@ -41,10 +41,15 @@
#include "v8test.h"
#include <stdio.h>
+#include <strings.h>
#define RUN_TEST(testname) { \
- if (!v8test_ ## testname()) \
- printf ("Test %s FAILED\n", # testname); \
+ if (argc == 1 || 0 == ::strcmp(argv[1], # testname)) { \
+ if (!v8test_ ## testname()) \
+ printf ("Test %s FAILED\n", # testname); \
+ else \
+ printf ("Test %s PASS\n", # testname); \
+ } \
}
int main(int argc, char *argv[])
@@ -54,6 +59,8 @@ int main(int argc, char *argv[])
RUN_TEST(eval);
RUN_TEST(evalwithinwith);
RUN_TEST(userobjectcompare);
+ RUN_TEST(externalteardown);
+ RUN_TEST(globalcall);
return -1;
}
diff --git a/tests/auto/v8/v8test.cpp b/tests/auto/v8/v8test.cpp
index 0b299ed23c..d9a71dd26a 100644
--- a/tests/auto/v8/v8test.cpp
+++ b/tests/auto/v8/v8test.cpp
@@ -54,6 +54,59 @@ using namespace v8;
} \
}
+struct MyStringResource : public String::ExternalAsciiStringResource
+{
+ static bool wasDestroyed;
+ virtual ~MyStringResource() { wasDestroyed = true; }
+ virtual const char* data() const { return "v8test"; }
+ virtual size_t length() const { return 6; }
+};
+bool MyStringResource::wasDestroyed = false;
+
+struct MyResource : public Object::ExternalResource
+{
+ static bool wasDestroyed;
+ virtual ~MyResource() { wasDestroyed = true; }
+};
+bool MyResource::wasDestroyed = false;
+
+bool v8test_externalteardown()
+{
+ BEGINTEST();
+
+ Isolate *isolate = v8::Isolate::New();
+ isolate->Enter();
+
+ {
+ HandleScope handle_scope;
+ Persistent<Context> context = Context::New();
+ Context::Scope context_scope(context);
+
+ Local<String> str = String::NewExternal(new MyStringResource);
+
+ Local<FunctionTemplate> ft = FunctionTemplate::New();
+ ft->InstanceTemplate()->SetHasExternalResource(true);
+
+ Local<Object> obj = ft->GetFunction()->NewInstance();
+ obj->SetExternalResource(new MyResource);
+
+ context.Dispose();
+ }
+
+ // while (!v8::V8::IdleNotification()) ;
+ isolate->Exit();
+ isolate->Dispose();
+
+ // ExternalString resources aren't guaranteed to be freed by v8 at this
+ // point. Uncommenting the IdleNotification() line above helps.
+// VERIFY(MyStringResource::wasDestroyed);
+
+ VERIFY(MyResource::wasDestroyed);
+
+cleanup:
+
+ ENDTEST();
+}
bool v8test_eval()
{
@@ -81,6 +134,35 @@ cleanup:
ENDTEST();
}
+bool v8test_globalcall()
+{
+ BEGINTEST();
+
+ HandleScope handle_scope;
+ Persistent<Context> context = Context::New();
+ Context::Scope context_scope(context);
+
+ Local<Object> qmlglobal = Object::New();
+
+#define SOURCE "function func1() { return 1; }\n" \
+ "function func2() { var sum = 0; for (var ii = 0; ii < 10000000; ++ii) { sum += func1(); } return sum; }\n" \
+ "func2();"
+
+ Local<Script> script = Script::Compile(String::New(SOURCE), NULL, NULL,
+ Handle<String>(), Script::QmlMode);
+ Local<Value> result = script->Run(qmlglobal);
+ VERIFY(!result.IsEmpty());
+ VERIFY(result->IsInt32());
+ VERIFY(result->Int32Value() == 10000000);
+
+#undef SOURCE
+
+cleanup:
+ context.Dispose();
+
+ ENDTEST();
+}
+
bool v8test_evalwithinwith()
{
BEGINTEST();
diff --git a/tests/auto/v8/v8test.h b/tests/auto/v8/v8test.h
index fa9bbe9f02..7d389f85a8 100644
--- a/tests/auto/v8/v8test.h
+++ b/tests/auto/v8/v8test.h
@@ -51,6 +51,8 @@
bool v8test_eval();
bool v8test_evalwithinwith();
bool v8test_userobjectcompare();
+bool v8test_externalteardown();
+bool v8test_globalcall();
#endif // V8TEST_H