/* * 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();