/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, 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, Digia gives you certain additional ** rights. These rights are described in the Digia 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. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "v8test.h" #ifndef NONQT_TESTING #include #endif 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; \ } \ } static inline Local CompileRun(const char* source) { return Script::Compile(String::New(source))->Run(); } 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); 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