mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 13:23:56 -07:00
Delete unnecessary unused incomplete profiler scripting support. Clean up some JSAPI code to use newer features. Display simulation script functions in the profiler. This was SVN commit r7503.
106 lines
3.5 KiB
C++
106 lines
3.5 KiB
C++
/* Copyright (C) 2010 Wildfire Games.
|
|
* This file is part of 0 A.D.
|
|
*
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "lib/self_test.h"
|
|
|
|
#include "scriptinterface/ScriptInterface.h"
|
|
|
|
#include "ps/CLogger.h"
|
|
|
|
class TestScriptInterface : public CxxTest::TestSuite
|
|
{
|
|
public:
|
|
void test_loadscript_basic()
|
|
{
|
|
ScriptInterface script("Test");
|
|
TestLogger logger;
|
|
TS_ASSERT(script.LoadScript(L"test.js", L"var x = 1+1;"));
|
|
TS_ASSERT_WSTR_NOT_CONTAINS(logger.GetOutput(), L"JavaScript error");
|
|
TS_ASSERT_WSTR_NOT_CONTAINS(logger.GetOutput(), L"JavaScript warning");
|
|
}
|
|
|
|
void test_loadscript_error()
|
|
{
|
|
ScriptInterface script("Test");
|
|
TestLogger logger;
|
|
TS_ASSERT(!script.LoadScript(L"test.js", L"1+"));
|
|
TS_ASSERT_WSTR_CONTAINS(logger.GetOutput(), L"JavaScript error: test.js line 1\nSyntaxError: syntax error");
|
|
}
|
|
|
|
void test_loadscript_strict_warning()
|
|
{
|
|
ScriptInterface script("Test");
|
|
TestLogger logger;
|
|
TS_ASSERT(script.LoadScript(L"test.js", L"1+1;"));
|
|
TS_ASSERT_WSTR_CONTAINS(logger.GetOutput(), L"JavaScript warning: test.js line 1\nuseless expression");
|
|
}
|
|
|
|
void test_loadscript_strict_error()
|
|
{
|
|
ScriptInterface script("Test");
|
|
TestLogger logger;
|
|
TS_ASSERT(!script.LoadScript(L"test.js", L"with(1){}"));
|
|
TS_ASSERT_WSTR_CONTAINS(logger.GetOutput(), L"JavaScript error: test.js line 1\nSyntaxError: strict mode code may not contain \'with\' statements");
|
|
}
|
|
|
|
void test_clone_basic()
|
|
{
|
|
ScriptInterface script1("Test");
|
|
ScriptInterface script2("Test");
|
|
|
|
CScriptVal obj1;
|
|
TS_ASSERT(script1.Eval("({'x': 123, 'y': [1, 1.5, '2', 'test', undefined, null, true, false]})", obj1));
|
|
|
|
CScriptVal obj2 = script2.CloneValueFromOtherContext(script1, obj1.get());
|
|
|
|
std::string source;
|
|
TS_ASSERT(script2.CallFunction(obj2.get(), "toSource", source));
|
|
TS_ASSERT_STR_EQUALS(source, "({x:123, y:[1, 1.5, \"2\", \"test\", (void 0), null, true, false]})");
|
|
}
|
|
|
|
void test_clone_getters()
|
|
{
|
|
// The tests should be run with JS_SetGCZeal so this can try to find GC bugs
|
|
|
|
ScriptInterface script1("Test");
|
|
ScriptInterface script2("Test");
|
|
|
|
CScriptVal obj1;
|
|
TS_ASSERT(script1.Eval("var s = '?'; var v = ({get x() { return 123 }, 'y': {'w':{get z() { delete v.y; delete v.n; v = null; s += s; return 4 }}}, 'n': 100}); v", obj1));
|
|
|
|
CScriptVal obj2 = script2.CloneValueFromOtherContext(script1, obj1.get());
|
|
|
|
std::string source;
|
|
TS_ASSERT(script2.CallFunction(obj2.get(), "toSource", source));
|
|
TS_ASSERT_STR_EQUALS(source, "({x:123, y:{w:{z:4}}, n:(void 0)})");
|
|
}
|
|
|
|
void test_clone_cyclic()
|
|
{
|
|
ScriptInterface script1("Test");
|
|
ScriptInterface script2("Test");
|
|
|
|
CScriptVal obj1;
|
|
TS_ASSERT(script1.Eval("var x = []; x[0] = x; ({'a': x, 'b': x})", obj1));
|
|
|
|
CScriptVal obj2 = script2.CloneValueFromOtherContext(script1, obj1.get());
|
|
|
|
std::string source;
|
|
TS_ASSERT(script2.CallFunction(obj2.get(), "toSource", source));
|
|
TS_ASSERT_STR_EQUALS(source, "({a:#1=[#1#], b:#1#})");
|
|
}
|
|
};
|