| /* |
| * Copyright 2010 Jacek Caban for CodeWeavers |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library 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 |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| eval("@_jscript_version"); |
| |
| var tmp; |
| |
| /*@ */ |
| //@cc_on @*/ |
| |
| @_jscript_version; |
| |
| @cc_on |
| @*/ |
| |
| // Standard predefined variabled |
| if(isWin64) { |
| ok(@_win64 === true, "@_win64 = " + @_win64); |
| ok(@_amd64 === true, "@_amd64 = " + @_amd64); |
| ok(isNaN(@_win32), "@_win32 = " + @_win32); |
| ok(isNaN(@_x86), "@_x86 = " + @_x86); |
| }else { |
| ok(@_win32 === true, "@_win32 = " + @_win32); |
| ok(@_x86 === true, "@_x86 = " + @_x86); |
| ok(isNaN(@_win64), "@_win64 = " + @_win64); |
| ok(isNaN(@_amd64), "@_amd64 = " + @_amd64); |
| } |
| |
| ok(@_jscript === true, "@_jscript = " + @_jscript); |
| ok(@_jscript_build === ScriptEngineBuildVersion(), |
| "@_jscript_build = " + @_jscript_build + " expected " + ScriptEngineBuildVersion()); |
| tmp = ScriptEngineMajorVersion() + ScriptEngineMinorVersion()/10; |
| ok(@_jscript_version === tmp, "@_jscript_version = " + @_jscript_version + " expected " + tmp); |
| ok(isNaN(@_win16), "@_win16 = " + @_win16); |
| ok(isNaN(@_mac), "@_mac = " + @_mac); |
| ok(isNaN(@_alpha), "@_alpha = " + @_alpha); |
| ok(isNaN(@_mc680x0), "@_mc680x0 = " + @_mc680x0); |
| ok(isNaN(@_PowerPC), "@_PowerPC = " + @_PowerPC); |
| |
| // Undefined variable |
| ok(isNaN(@xxx), "@xxx = " + @xxx); |
| ok(isNaN(@x$_xx), "@x$_xx = " + @x$_xx); |
| |
| tmp = false; |
| try { |
| eval("/*@cc_on */"); |
| }catch(e) { |
| tmp = true; |
| } |
| ok(tmp, "expected syntax exception"); |
| |
| tmp = false; |
| try { |
| eval("/*@_jscript_version */"); |
| }catch(e) { |
| tmp = true; |
| } |
| ok(tmp, "expected syntax exception"); |
| |
| ok(isNaN(@test), "@test = " + @test); |
| |
| @set @test = 1 |
| ok(@test === 1, "@test = " + @test); |
| |
| @set @test = 0 |
| ok(@test === 0, "@test = " + @test); |
| |
| tmp = false |
| @set @test = @test tmp=true |
| ok(@test === 0, "@test = " + @test); |
| ok(tmp, "expr after @set not evaluated"); |
| |
| @set @test = !@test |
| ok(@test === true, "@test = " + @test); |
| |
| @set @test = (@test+1+true) |
| ok(@test === 3, "@test = " + @test); |
| |
| @set |
| @test |
| = |
| 2 |
| ok(@test === 2, "@test = " + @test); |
| |
| @set |
| @test |
| = |
| ( |
| 2 |
| + |
| 2 |
| ) |
| ok(@test === 4, "@test = " + @test); |
| |
| @set @test = 2.5 |
| ok(@test === 2.5, "@test = " + @test); |
| |
| @set @test = 0x4 |
| ok(@test === 4, "@test = " + @test); |
| |
| @set @test = (2 + 2/2) |
| ok(@test === 3, "@test = " + @test); |
| |
| @set @test = (false+false) |
| ok(@test === 0, "@test = " + @test); |
| |
| @set @test = ((1+1)*((3)+1)) |
| ok(@test === 8, "@test = " + @test); |
| |
| @set @_test = true |
| ok(@_test === true, "@_test = " + @_test); |
| |
| @set @$test = true |
| ok(@$test === true, "@$test = " + @$test); |
| |
| @set @newtest = (@newtest != @newtest) |
| ok(@newtest === true, "@newtest = " + @newtest); |
| |
| @set @test = (false != 0) |
| ok(@test === false, "@test = " + @test); |
| |
| @set @test = (1 != true) |
| ok(@test === false, "@test = " + @test); |
| |
| @set @test = (0 != true) |
| ok(@test === true, "@test = " + @test); |
| |
| @set @test = (true-2) |
| ok(@test === -1, "@test = " + @test); |
| |
| @set @test = (true-@_jscript) |
| ok(@test === 0, "@test = " + @test); |
| |
| @set @test = (true==1) |
| ok(@test === true, "@test = " + @test); |
| |
| @set @test = (1==false+1) |
| ok(@test === true, "@test = " + @test); |
| |
| function expect(val, exval) { |
| ok(val === exval, "got " + val + " expected " + exval); |
| } |
| |
| @set @test = (false < 0.5) |
| expect(@test, true); |
| |
| @set @test = (true == 0 < 0.5) |
| expect(@test, true); |
| |
| @set @test = (false < 0) |
| expect(@test, false); |
| |
| @set @test = (false > 0.5) |
| expect(@test, false); |
| |
| @set @test = (1 < true) |
| expect(@test, false); |
| |
| @set @test = (1 <= true) |
| expect(@test, true); |
| |
| @set @test = (1 >= true) |
| expect(@test, true); |
| |
| @set @test = (1 >= true-1) |
| expect(@test, true); |
| |
| @if (false) |
| this wouldn not parse |
| "@end |
| |
| @if (false) "@end |
| |
| tmp = "@if (false) @end"; |
| ok(tmp.length === 16, "tmp.length = " + tmp.length); |
| |
| @if(true) |
| tmp = true |
| @end |
| ok(tmp === true, "tmp = " + tmp); |
| |
| @if(false) |
| @if this would not CC parse |
| this will not parse |
| @elif(true) |
| this will also not parse |
| @else |
| this also will not parse |
| @if let me complicate things a bit |
| @end enough |
| @end |
| @end |
| |
| @if(false) |
| this will not parse |
| @else |
| tmp = 2 |
| @else |
| this will not be parsed |
| @else |
| also this |
| @end |
| ok(tmp === 2, "tmp = " + tmp); |
| |
| @if(true) |
| tmp = 3; |
| @else |
| just skip this |
| @end |
| ok(tmp === 3, "tmp = " + tmp); |
| |
| @if(true) |
| tmp = 4; |
| @elif(true) |
| this will not parse |
| @elif nor this |
| @else |
| just skip this |
| @end |
| ok(tmp === 4, "tmp = " + tmp); |
| |
| @if(false) |
| this will not parse |
| @elif(false) |
| nor this would |
| @elif(true) |
| tmp = 5; |
| @elif nor this |
| @else |
| just skip this |
| @end |
| ok(tmp === 5, "tmp = " + tmp); |
| |
| @if (!@_jscript) |
| this would not parse |
| @if(true) |
| @else |
| @if(false) |
| @end |
| @end |
| @elif (@_jscript) |
| tmp = 6; |
| @elif (true) |
| @if xxx |
| @else |
| @if @elif @elif @else @end |
| @end |
| @else |
| this would not parse |
| @end |
| ok(tmp === 6, "tmp = " + tmp); |
| |
| @if(true) |
| @if(false) |
| @else |
| tmp = 7; |
| @end |
| @else |
| this would not parse |
| @end |
| ok(tmp === 7, "tmp = " + tmp); |
| |
| var exception_map = { |
| JS_E_SYNTAX: {type: "SyntaxError", number: -2146827286}, |
| JS_E_MISSING_LBRACKET: {type: "SyntaxError", number: -2146827283}, |
| JS_E_EXPECTED_IDENTIFIER: {type: "SyntaxError", number: -2146827278}, |
| JS_E_EXPECTED_ASSIGN: {type: "SyntaxError", number: -2146827277}, |
| JS_E_EXPECTED_CCEND: {type: "SyntaxError", number: -2146827259}, |
| JS_E_EXPECTED_AT: {type: "SyntaxError", number: -2146827256} |
| }; |
| |
| function testException(src, id) { |
| var ex = exception_map[id]; |
| var ret = "", num = ""; |
| |
| try { |
| eval(src); |
| } catch(e) { |
| ret = e.name; |
| num = e.number; |
| } |
| |
| ok(ret === ex.type, "Exception test, ret = " + ret + ", expected " + ex.type +". Executed code: " + src); |
| ok(num === ex.number, "Exception test, num = " + num + ", expected " + ex.number + ". Executed function: " + src); |
| } |
| |
| testException("@set test=true", "JS_E_EXPECTED_AT"); |
| testException("@set @1=true", "JS_E_EXPECTED_IDENTIFIER"); |
| testException("@set @test x=true", "JS_E_EXPECTED_ASSIGN"); |
| testException("@if false\n@end", "JS_E_MISSING_LBRACKET"); |
| testException("@if (false)\n", "JS_E_EXPECTED_CCEND"); |
| testException("@end\n", "JS_E_SYNTAX"); |
| testException("@elif\n", "JS_E_SYNTAX"); |
| testException("@else\n", "JS_E_SYNTAX"); |
| testException("@if false\n@elif true\n@end", "JS_E_MISSING_LBRACKET"); |
| |
| reportSuccess(); |