From 7dc5973bf12919d2d35230844beabe558d4faa00 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 11 Oct 2011 15:06:25 +1000 Subject: Update V8 Change-Id: I7a9da7dbb2116a441788407d60ed10155cded941 Reviewed-by: Kent Hansen --- tests/auto/v8/tst_v8.cpp | 6 ++++++ tests/auto/v8/v8main.cpp | 3 +++ tests/auto/v8/v8test.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/auto/v8/v8test.h | 1 + 4 files changed, 63 insertions(+) (limited to 'tests') diff --git a/tests/auto/v8/tst_v8.cpp b/tests/auto/v8/tst_v8.cpp index c753806518..fcb49f84e0 100644 --- a/tests/auto/v8/tst_v8.cpp +++ b/tests/auto/v8/tst_v8.cpp @@ -57,6 +57,7 @@ private slots: void eval(); void evalwithinwith(); void userobjectcompare(); + void externalteardown(); }; void tst_v8::eval() @@ -74,6 +75,11 @@ void tst_v8::userobjectcompare() QVERIFY(v8test_userobjectcompare()); } +void tst_v8::externalteardown() +{ + QVERIFY(v8test_externalteardown()); +} + 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..882c2b99bb 100644 --- a/tests/auto/v8/v8main.cpp +++ b/tests/auto/v8/v8main.cpp @@ -45,6 +45,8 @@ #define RUN_TEST(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 +56,7 @@ int main(int argc, char *argv[]) RUN_TEST(eval); RUN_TEST(evalwithinwith); RUN_TEST(userobjectcompare); + RUN_TEST(externalteardown); return -1; } diff --git a/tests/auto/v8/v8test.cpp b/tests/auto/v8/v8test.cpp index 0b299ed23c..b2734af8c3 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::New(); + Context::Scope context_scope(context); + + Local str = String::NewExternal(new MyStringResource); + + Local ft = FunctionTemplate::New(); + ft->InstanceTemplate()->SetHasExternalResource(true); + + Local 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() { diff --git a/tests/auto/v8/v8test.h b/tests/auto/v8/v8test.h index fa9bbe9f02..cb737971cb 100644 --- a/tests/auto/v8/v8test.h +++ b/tests/auto/v8/v8test.h @@ -51,6 +51,7 @@ bool v8test_eval(); bool v8test_evalwithinwith(); bool v8test_userobjectcompare(); +bool v8test_externalteardown(); #endif // V8TEST_H -- cgit v1.2.3