Home | History | Annotate | Download | only in kde
      1 // Copyright 2013 the V8 project authors. All rights reserved.
      2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions
      6 // are met:
      7 // 1.  Redistributions of source code must retain the above copyright
      8 //     notice, this list of conditions and the following disclaimer.
      9 // 2.  Redistributions in binary form must reproduce the above copyright
     10 //     notice, this list of conditions and the following disclaimer in the
     11 //     documentation and/or other materials provided with the distribution.
     12 //
     13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
     14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23 
     24 description("KDE JS Test");
     25 var global = this;
     26 function myfunc() {
     27 }
     28 function throwex() {
     29   throw new Error("test exception");
     30 }
     31 
     32 //---------------------------
     33 var func_ret_with_ex_func = 4;
     34 try {
     35   func_ret_with_ex_func = throwex()();
     36 }
     37 catch (e) {
     38 }
     39 shouldBe("func_ret_with_ex_func", "4");
     40 
     41 // ---------------------------------
     42 
     43 var func_ret_from_ex_throw_args = 4;
     44 try {
     45   func_ret_from_ex_throw_args = Math.abs(throwex());
     46 }
     47 catch (e) {
     48 }
     49 shouldBe("func_ret_from_ex_throw_args", "4");
     50 
     51 // ---------------------------------
     52 
     53 var set_from_throw_func_args = 4;
     54 try {
     55   throwex()(set_from_throw_func_args = 1);
     56 }
     57 catch (e) {
     58 }
     59 shouldBe("set_from_throw_func_args","4");
     60 
     61 // ---------------------------------
     62 
     63 var set_from_func_throw_args = 4;
     64 try {
     65   myfunc(throwex(), set_from_func_throw_args = 1);
     66 }
     67 catch (e) {
     68 }
     69 shouldBe("set_from_func_throw_args","4");
     70 
     71 // ---------------------------------
     72 
     73 var set_from_before_func_throw_args = 4;
     74 try {
     75   myfunc(set_from_before_func_throw_args = 1, throwex());
     76 }
     77 catch (e) {
     78 }
     79 shouldBe("set_from_before_func_throw_args","1");
     80 
     81 // ---------------------------------
     82 
     83 // ### move to function.js
     84 var function_param_order = "";
     85 function aparam() {
     86   function_param_order += "a";
     87 }
     88 function bparam() {
     89   function_param_order += "b";
     90 }
     91 function cparam() {
     92   function_param_order += "c";
     93 }
     94 myfunc(aparam(),bparam(),cparam());
     95 shouldBe("function_param_order","'abc'");
     96 
     97 // ---------------------------------
     98 // ### move to function.js
     99 var new_param_order = "";
    100 function anewparam() {
    101   new_param_order += "a";
    102 }
    103 function bnewparam() {
    104   new_param_order += "b";
    105 }
    106 function cnewparam() {
    107   new_param_order += "c";
    108 }
    109 new myfunc(anewparam(),bnewparam(),cnewparam());
    110 shouldBe("new_param_order","'abc'");
    111 
    112 // ---------------------------------
    113 // ### move to function.js
    114 var elision_param_order = "";
    115 function aelision() {
    116   elision_param_order += "a";
    117 }
    118 function belision() {
    119   elision_param_order += "b";
    120 }
    121 function celision() {
    122   elision_param_order += "c";
    123 }
    124 [aelision(),belision(),celision()];
    125 shouldBe("elision_param_order","'abc'");
    126 
    127 // ---------------------------------
    128 // ### move to function.js
    129 var comma_order = "";
    130 function acomma() {
    131   comma_order += "a";
    132 }
    133 function bcomma() {
    134   comma_order += "b";
    135 }
    136 function ccomma() {
    137   comma_order += "c";
    138 }
    139 acomma(),bcomma(),ccomma();
    140 shouldBe("comma_order","'abc'");
    141 
    142 // ---------------------------------
    143 
    144 function checkOperator(op,name) {
    145   var code =(
    146     "global."+name+"_part1 = 4;\n"+
    147     "try {\n"+
    148     "  ("+name+"_part1 = 1) "+op+" throwex();\n"+
    149     "}\n"+
    150     "catch (e) {\n"+
    151     "}\n"+
    152     "shouldBe('"+name+"_part1', '1');\n"+
    153     "global."+name+"_part2 = 4;\n"+
    154     "try {\n"+
    155     "  throwex() "+op+" ("+name+"_part2 = 1);\n"+
    156     "}\n"+
    157     "catch (e) {\n"+
    158     "}\n"+
    159     "shouldBe('"+name+"_part2', '4');\n");
    160 //  print("\n\n\n");
    161 //  print(code);
    162   eval(code);
    163 }
    164 
    165 checkOperator("==","OpEqEq");
    166 checkOperator("!=","OpNotEq");
    167 checkOperator("===","OpStrEq");
    168 checkOperator("!==","OpStrNEq");
    169 // ### these generate a syntax error in mozilla - kjs should do the same (?)
    170 //checkOperator("+=","OpPlusEq");
    171 //checkOperator("-=","OpMinusEq");
    172 //checkOperator("*=","OpMultEq");
    173 //checkOperator("/=","OpDivEq");
    174 //                  OpPlusPlus,
    175 //    OpMinusMinus,
    176 checkOperator("<","OpLess");
    177 checkOperator("<=","OpLessEq");
    178 checkOperator(">","OpGreater");
    179 checkOperator(">=","OpGreaterEq");
    180 //checkOperator("&=","OpAndEq");
    181 //checkOperator("^=","OpXOrEq");
    182 //checkOperator("|=","OpOrEq");
    183 //checkOperator("%=","OpModEq");
    184 checkOperator("&&","OpAnd");
    185 checkOperator("||","OpOr");
    186 checkOperator("&","OpBitAnd");
    187 checkOperator("^","OpBitXOr");
    188 checkOperator("|","OpBitOr");
    189 checkOperator("<<","OpLShift");
    190 checkOperator(">>","OpRShift");
    191 checkOperator(">>>","OpURShift");
    192 //    OpIn,
    193 checkOperator("instanceof","OpInstanceOf");
    194 
    195 // ---------------------------------
    196 var set_from_if_stmt = 4;
    197 try {
    198   if (throwex()) {
    199     set_from_if_stmt = 1;
    200   }
    201 }
    202 catch (e) {
    203 }
    204 shouldBe("set_from_if_stmt","4");
    205 
    206 // ---------------------------------
    207 var set_from_if_else_stmt = 4;
    208 try {
    209   if (throwex()) {
    210     set_from_if_else_stmt = 1;
    211   }
    212   else {
    213     undefined;
    214   }
    215 }
    216 catch (e) {
    217 }
    218 shouldBe("set_from_if_else_stmt","4");
    219 
    220 // ---------------------------------
    221 
    222 var set_from_else_in_if_else_stmt = 4;
    223 try {
    224   if (throwex()) {
    225     undefined;
    226   }
    227   else {
    228     set_from_else_in_if_else_stmt = 1;
    229   }
    230 }
    231 catch (e) {
    232 }
    233 shouldBe("set_from_else_in_if_else_stmt","4");
    234 
    235 // ---------------------------------
    236 
    237 var comma_left = 4;
    238 try {
    239   comma_left = 1, throwex();
    240 }
    241 catch (e) {
    242 }
    243 shouldBe("comma_left","1");
    244 
    245 // ---------------------------------
    246 
    247 var comma_left = 4;
    248 try {
    249    throwex(), comma_left = 1;
    250 }
    251 catch (e) {
    252 }
    253 shouldBe("comma_left","4");
    254 
    255 var vardecl_assign_throws = 4;
    256 try {
    257   var vardecl_assign_throws = throwex();
    258 }
    259 catch (e) {
    260 }
    261 shouldBe("vardecl_assign_throws","4");
    262 
    263 // ---------------------------------
    264 
    265 var var_assign_before_throw_run = false;
    266 function var_assign_before_throw() {
    267   var_assign_before_throw_run = true;
    268   return 1;
    269 }
    270 
    271 var var_assign_after_throw_run = false;
    272 function var_assign_after_throw() {
    273   var_assign_after_throw_run = true;
    274   return 1;
    275 }
    276 
    277 try {
    278   var var_assign1 = var_assign_before_throw(),
    279       var_assign2 = throwex(),
    280       var_assign1 = var_assign_before_throw();
    281 }
    282 catch (e) {
    283 }
    284 shouldBe("var_assign_before_throw_run","true");
    285 shouldBe("var_assign_after_throw_run","false");
    286 
    287 // ---------------------------------
    288 
    289 var do_val = 4;
    290 try {
    291   do {
    292     do_val++;
    293   }
    294   while (throwex());
    295 }
    296 catch (e) {
    297 }
    298 shouldBe("do_val","5");
    299 
    300 // ---------------------------------
    301 var while_val = 4;
    302 try {
    303   while (throwex()) {
    304     while_val++;
    305   }
    306 }
    307 catch (e) {
    308 }
    309 shouldBe("while_val","4");
    310 
    311 // ---------------------------------
    312 var for_val_part1_throw2 = 4;
    313 try {
    314   for (for_val_part1_throw2 = 1; throwex(); ) {
    315   }
    316 }
    317 catch (e) {
    318 }
    319 shouldBe("for_val_part1_throw2","1");
    320 
    321 // ---------------------------------
    322 var for_val_part1_throw3 = 4;
    323 try {
    324   for (for_val_part1_throw3 = 1; ; throwex()) {
    325   }
    326 }
    327 catch (e) {
    328 }
    329 shouldBe("for_val_part1_throw3","1");
    330 
    331 // ---------------------------------
    332 var for_val_part2_throw1 = 4;
    333 try {
    334   for (throwex(); for_val_part2_throw1 = 1; ) {
    335   }
    336 }
    337 catch (e) {
    338 }
    339 shouldBe("for_val_part2_throw1","4");
    340 
    341 // ---------------------------------
    342 var for_val_part2_throw3 = 4;
    343 try {
    344   for (; for_val_part2_throw3 = 1; throwex()) {
    345   }
    346 }
    347 catch (e) {
    348 }
    349 shouldBe("for_val_part2_throw3","1");
    350 
    351 // ---------------------------------
    352 var for_val_part3_throw1 = 4;
    353 try {
    354   for (throwex(); ; for_val_part3_throw1 = 1) {
    355   }
    356 }
    357 catch (e) {
    358 }
    359 shouldBe("for_val_part3_throw1","4");
    360 
    361 // ---------------------------------
    362 var for_val_part3_throw2 = 4;
    363 try {
    364   for (; throwex(); for_val_part3_throw2 = 1) {
    365   }
    366 }
    367 catch (e) {
    368 }
    369 shouldBe("for_val_part3_throw2","4");
    370 
    371 // ---------------------------------
    372 var for_val_part1_throwbody = 4;
    373 try {
    374   for (for_val_part1_throwbody = 1; ;) {
    375     throwex();
    376   }
    377 }
    378 catch (e) {
    379 }
    380 shouldBe("for_val_part1_throwbody","1");
    381 
    382 // ---------------------------------
    383 var for_val_part2_throwbody = 4;
    384 try {
    385   for (; for_val_part2_throwbody = 1; ) {
    386     throwex();
    387   }
    388 }
    389 catch (e) {
    390 }
    391 shouldBe("for_val_part2_throwbody","1");
    392 
    393 // ---------------------------------
    394 var for_val_part3_throwbody = 4;
    395 try {
    396   for (; ; for_val_part3_throwbody = 1) {
    397     throwex();
    398   }
    399 }
    400 catch (e) {
    401 }
    402 shouldBe("for_val_part3_throwbody","4");
    403 
    404 // ---------------------------------
    405 var forin_test_obj = new Object();
    406 forin_test_obj.a = 1;
    407 forin_test_obj.b = 2;
    408 forin_test_obj.c = 3;
    409 var forin_count = 4;
    410 function forin_lexpr() {
    411 //  if (forincount == 1);
    412 //    throwex();
    413   return new Object();
    414 }
    415 try {
    416   for (throwex() in forin_test_obj) {
    417     forin_count++;
    418   }
    419 }
    420 catch (e) {
    421 }
    422 shouldBe("forin_count","4");
    423 
    424 // ---------------------------------
    425 var set_inside_with_throw = 4;
    426 try {
    427   with (throwex()) {
    428     set_inside_with_throw = 1;
    429   }
    430 }
    431 catch (e) {
    432 }
    433 shouldBe("set_inside_with_throw","4");
    434 
    435 // ---------------------------------
    436 var set_inside_with_cantconverttoobject = 4;
    437 try {
    438   with (undefined) {
    439     print("FAIL. This message should not be displayed");
    440     set_inside_with_cantconverttoobject = 1;
    441   }
    442 }
    443 catch (e) {
    444 }
    445 shouldBe("set_inside_with_cantconverttoobject","4");
    446 // ### test case, sw