/**************************************************************************** ** ** 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; \ } \ } 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() { BEGINTEST(); HandleScope handle_scope; Persistent context = Context::New(); Context::Scope context_scope(context); Local qmlglobal = Object::New(); qmlglobal->Set(String::New("a"), Integer::New(1922)); Local