tenderlove-rkelly 0.0.0.20080909095845

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. data/CHANGELOG.txt +7 -0
  2. data/Manifest.txt +197 -0
  3. data/README.txt +49 -0
  4. data/Rakefile +85 -0
  5. data/lib/parser.y +870 -0
  6. data/lib/rkelly.rb +8 -0
  7. data/lib/rkelly/constants.rb +3 -0
  8. data/lib/rkelly/js.rb +14 -0
  9. data/lib/rkelly/js/array.rb +15 -0
  10. data/lib/rkelly/js/base.rb +91 -0
  11. data/lib/rkelly/js/boolean.rb +21 -0
  12. data/lib/rkelly/js/function.rb +39 -0
  13. data/lib/rkelly/js/function_prototype.rb +15 -0
  14. data/lib/rkelly/js/global_object.rb +52 -0
  15. data/lib/rkelly/js/math.rb +10 -0
  16. data/lib/rkelly/js/nan.rb +18 -0
  17. data/lib/rkelly/js/number.rb +22 -0
  18. data/lib/rkelly/js/object.rb +30 -0
  19. data/lib/rkelly/js/object_prototype.rb +14 -0
  20. data/lib/rkelly/js/property.rb +20 -0
  21. data/lib/rkelly/js/scope.rb +6 -0
  22. data/lib/rkelly/js/string.rb +21 -0
  23. data/lib/rkelly/lexeme.rb +18 -0
  24. data/lib/rkelly/nodes.rb +5 -0
  25. data/lib/rkelly/nodes/binary_node.rb +18 -0
  26. data/lib/rkelly/nodes/bracket_accessor_node.rb +11 -0
  27. data/lib/rkelly/nodes/case_clause_node.rb +11 -0
  28. data/lib/rkelly/nodes/comma_node.rb +11 -0
  29. data/lib/rkelly/nodes/conditional_node.rb +11 -0
  30. data/lib/rkelly/nodes/dot_accessor_node.rb +11 -0
  31. data/lib/rkelly/nodes/for_in_node.rb +12 -0
  32. data/lib/rkelly/nodes/for_node.rb +13 -0
  33. data/lib/rkelly/nodes/function_call_node.rb +16 -0
  34. data/lib/rkelly/nodes/function_decl_node.rb +6 -0
  35. data/lib/rkelly/nodes/function_expr_node.rb +12 -0
  36. data/lib/rkelly/nodes/if_node.rb +12 -0
  37. data/lib/rkelly/nodes/label_node.rb +11 -0
  38. data/lib/rkelly/nodes/new_expr_node.rb +11 -0
  39. data/lib/rkelly/nodes/node.rb +80 -0
  40. data/lib/rkelly/nodes/not_strict_equal_node.rb +6 -0
  41. data/lib/rkelly/nodes/op_equal_node.rb +16 -0
  42. data/lib/rkelly/nodes/postfix_node.rb +11 -0
  43. data/lib/rkelly/nodes/prefix_node.rb +6 -0
  44. data/lib/rkelly/nodes/property_node.rb +13 -0
  45. data/lib/rkelly/nodes/resolve_node.rb +19 -0
  46. data/lib/rkelly/nodes/strict_equal_node.rb +6 -0
  47. data/lib/rkelly/nodes/try_node.rb +13 -0
  48. data/lib/rkelly/nodes/var_decl_node.rb +15 -0
  49. data/lib/rkelly/parser.rb +98 -0
  50. data/lib/rkelly/runtime.rb +36 -0
  51. data/lib/rkelly/runtime/ruby_function.rb +13 -0
  52. data/lib/rkelly/runtime/scope_chain.rb +57 -0
  53. data/lib/rkelly/token.rb +15 -0
  54. data/lib/rkelly/tokenizer.rb +122 -0
  55. data/lib/rkelly/visitable.rb +16 -0
  56. data/lib/rkelly/visitors.rb +4 -0
  57. data/lib/rkelly/visitors/dot_visitor.rb +228 -0
  58. data/lib/rkelly/visitors/ecma_visitor.rb +314 -0
  59. data/lib/rkelly/visitors/enumerable_visitor.rb +18 -0
  60. data/lib/rkelly/visitors/evaluation_visitor.rb +419 -0
  61. data/lib/rkelly/visitors/function_visitor.rb +46 -0
  62. data/lib/rkelly/visitors/pointcut_visitor.rb +18 -0
  63. data/lib/rkelly/visitors/sexp_visitor.rb +374 -0
  64. data/lib/rkelly/visitors/visitor.rb +136 -0
  65. data/test/ecma_script_test_case.rb +21 -0
  66. data/test/execute_test_case.rb +16 -0
  67. data/test/execution_contexts/test_10_1_3-1.rb +32 -0
  68. data/test/expressions/test_11_3_1.rb +64 -0
  69. data/test/expressions/test_11_3_2.rb +64 -0
  70. data/test/expressions/test_11_4_2.rb +13 -0
  71. data/test/expressions/test_11_4_3.rb +52 -0
  72. data/test/expressions/test_11_4_4.rb +68 -0
  73. data/test/expressions/test_11_4_5.rb +69 -0
  74. data/test/expressions/test_11_4_6.rb +88 -0
  75. data/test/expressions/test_11_4_8.rb +28 -0
  76. data/test/expressions/test_11_4_9.rb +103 -0
  77. data/test/expressions/test_11_5_1.rb +51 -0
  78. data/test/expressions/test_11_5_2.rb +80 -0
  79. data/test/expressions/test_11_5_3.rb +88 -0
  80. data/test/expressions/test_11_6_1-1.rb +19 -0
  81. data/test/expressions/test_11_9_1.rb +19 -0
  82. data/test/function/test_15_3_1_1-1.rb +34 -0
  83. data/test/global_object/test_15_1_1_1.rb +29 -0
  84. data/test/global_object/test_15_1_1_2.rb +17 -0
  85. data/test/global_object/test_15_1_1_3.rb +9 -0
  86. data/test/helper.rb +5 -0
  87. data/test/node_test_case.rb +11 -0
  88. data/test/object/test_15_2_1_1.rb +257 -0
  89. data/test/object/test_15_2_1_2.rb +21 -0
  90. data/test/object/test_15_2_2_1.rb +52 -0
  91. data/test/statements/test_12_5-1.rb +27 -0
  92. data/test/test_add_node.rb +8 -0
  93. data/test/test_arguments_node.rb +8 -0
  94. data/test/test_array_node.rb +9 -0
  95. data/test/test_assign_expr_node.rb +8 -0
  96. data/test/test_automatic_semicolon_insertion.rb +137 -0
  97. data/test/test_bit_and_node.rb +8 -0
  98. data/test/test_bit_or_node.rb +8 -0
  99. data/test/test_bit_x_or_node.rb +8 -0
  100. data/test/test_bitwise_not_node.rb +8 -0
  101. data/test/test_block_node.rb +14 -0
  102. data/test/test_bracket_accessor_node.rb +16 -0
  103. data/test/test_break_node.rb +11 -0
  104. data/test/test_case_block_node.rb +11 -0
  105. data/test/test_case_clause_node.rb +15 -0
  106. data/test/test_comma_node.rb +13 -0
  107. data/test/test_comments.rb +44 -0
  108. data/test/test_conditional_node.rb +17 -0
  109. data/test/test_const_statement_node.rb +14 -0
  110. data/test/test_continue_node.rb +11 -0
  111. data/test/test_delete_node.rb +8 -0
  112. data/test/test_divide_node.rb +8 -0
  113. data/test/test_do_while_node.rb +13 -0
  114. data/test/test_dot_accessor_node.rb +9 -0
  115. data/test/test_ecma_visitor.rb +192 -0
  116. data/test/test_element_node.rb +8 -0
  117. data/test/test_empty_statement_node.rb +8 -0
  118. data/test/test_equal_node.rb +8 -0
  119. data/test/test_evaluation_visitor.rb +66 -0
  120. data/test/test_expression_statement_node.rb +10 -0
  121. data/test/test_false_node.rb +8 -0
  122. data/test/test_for_in_node.rb +17 -0
  123. data/test/test_for_node.rb +24 -0
  124. data/test/test_function_body_node.rb +8 -0
  125. data/test/test_function_call_node.rb +10 -0
  126. data/test/test_function_decl_node.rb +16 -0
  127. data/test/test_function_expr_node.rb +16 -0
  128. data/test/test_function_visitor.rb +26 -0
  129. data/test/test_getter_property_node.rb +10 -0
  130. data/test/test_global_object.rb +49 -0
  131. data/test/test_greater_node.rb +8 -0
  132. data/test/test_greater_or_equal_node.rb +8 -0
  133. data/test/test_if_node.rb +17 -0
  134. data/test/test_in_node.rb +8 -0
  135. data/test/test_instance_of_node.rb +8 -0
  136. data/test/test_label_node.rb +13 -0
  137. data/test/test_left_shift_node.rb +8 -0
  138. data/test/test_less_node.rb +8 -0
  139. data/test/test_less_or_equal_node.rb +8 -0
  140. data/test/test_line_number.rb +23 -0
  141. data/test/test_logical_and_node.rb +8 -0
  142. data/test/test_logical_not_node.rb +8 -0
  143. data/test/test_logical_or_node.rb +8 -0
  144. data/test/test_modulus_node.rb +8 -0
  145. data/test/test_multiply_node.rb +8 -0
  146. data/test/test_new_expr_node.rb +9 -0
  147. data/test/test_not_equal_node.rb +8 -0
  148. data/test/test_not_strict_equal_node.rb +8 -0
  149. data/test/test_null_node.rb +8 -0
  150. data/test/test_number_node.rb +8 -0
  151. data/test/test_object_literal_node.rb +9 -0
  152. data/test/test_op_and_equal_node.rb +10 -0
  153. data/test/test_op_divide_equal_node.rb +10 -0
  154. data/test/test_op_equal_node.rb +10 -0
  155. data/test/test_op_l_shift_equal_node.rb +10 -0
  156. data/test/test_op_minus_equal_node.rb +10 -0
  157. data/test/test_op_mod_equal_node.rb +10 -0
  158. data/test/test_op_multiply_equal_node.rb +10 -0
  159. data/test/test_op_or_equal_node.rb +10 -0
  160. data/test/test_op_plus_equal_node.rb +10 -0
  161. data/test/test_op_r_shift_equal_node.rb +10 -0
  162. data/test/test_op_u_r_shift_equal_node.rb +10 -0
  163. data/test/test_op_x_or_equal_node.rb +10 -0
  164. data/test/test_parameter_node.rb +8 -0
  165. data/test/test_parser.rb +1355 -0
  166. data/test/test_pointcut_visitor.rb +34 -0
  167. data/test/test_postfix_node.rb +8 -0
  168. data/test/test_prefix_node.rb +8 -0
  169. data/test/test_property_node.rb +8 -0
  170. data/test/test_regexp_node.rb +8 -0
  171. data/test/test_resolve_node.rb +22 -0
  172. data/test/test_return_node.rb +11 -0
  173. data/test/test_right_shift_node.rb +8 -0
  174. data/test/test_runtime.rb +12 -0
  175. data/test/test_scope_chain.rb +50 -0
  176. data/test/test_setter_property_node.rb +10 -0
  177. data/test/test_source_elements.rb +9 -0
  178. data/test/test_strict_equal_node.rb +8 -0
  179. data/test/test_string_node.rb +8 -0
  180. data/test/test_subtract_node.rb +8 -0
  181. data/test/test_switch_node.rb +12 -0
  182. data/test/test_this_node.rb +8 -0
  183. data/test/test_throw_node.rb +7 -0
  184. data/test/test_tokenizer.rb +143 -0
  185. data/test/test_true_node.rb +8 -0
  186. data/test/test_try_node.rb +59 -0
  187. data/test/test_type_of_node.rb +8 -0
  188. data/test/test_unary_minus_node.rb +8 -0
  189. data/test/test_unary_plus_node.rb +8 -0
  190. data/test/test_unsigned_right_shift_node.rb +8 -0
  191. data/test/test_var_decl_node.rb +21 -0
  192. data/test/test_var_statement_node.rb +14 -0
  193. data/test/test_void_node.rb +8 -0
  194. data/test/test_while_node.rb +15 -0
  195. data/test/test_with_node.rb +8 -0
  196. metadata +385 -0
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_4_8_Test < ECMAScriptTestCase
4
+ def test_positive_not
5
+ 0.upto(34) do |number|
6
+ js_assert_equal(~to_int_32(2 ** number), "~#{2 ** number}")
7
+ end
8
+ end
9
+
10
+ def test_negative_not
11
+ 0.upto(34) do |number|
12
+ js_assert_equal(~to_int_32(-(2 ** number)), "~(#{-(2 ** number)})")
13
+ end
14
+ end
15
+
16
+ def to_int_32(value)
17
+ return value if value == 0
18
+ if value.respond_to?(:nan?) && (value.nan? || value.infinite?)
19
+ return 0
20
+ end
21
+ value = ((value < 0 ? -1 : 1) * value.abs.floor) % (2 ** 32)
22
+ if value >= 2 ** 31
23
+ value - (2 ** 32)
24
+ else
25
+ value
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,103 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_4_9_Test < ECMAScriptTestCase
4
+ def test_not_null
5
+ js_assert_equal("true", "!(null)")
6
+ end
7
+
8
+ def test_undefined
9
+ js_assert_equal("true", "!(void 0)")
10
+ end
11
+
12
+ def test_false
13
+ js_assert_equal("true", "!(false)")
14
+ end
15
+
16
+ def test_true
17
+ js_assert_equal("false", "!(true)")
18
+ end
19
+
20
+ def test_zero
21
+ js_assert_equal("true", "!(0)")
22
+ end
23
+
24
+ def test_negative_zero
25
+ js_assert_equal("true", "!(-0)")
26
+ end
27
+
28
+ def test_nan
29
+ js_assert_equal("true", "!(NaN)")
30
+ end
31
+
32
+ def test_infinity
33
+ js_assert_equal("false", "!(Infinity)")
34
+ end
35
+
36
+ def test_negative_infinity
37
+ js_assert_equal("false", "!(-Infinity)")
38
+ end
39
+
40
+ def test_math_pi
41
+ js_assert_equal("false", "!(Math.PI)")
42
+ end
43
+
44
+ def test_1
45
+ js_assert_equal("false", "!(1)")
46
+ end
47
+
48
+ def test_negative_1
49
+ js_assert_equal("false", "!(-1)")
50
+ end
51
+
52
+ def test_empty_string
53
+ js_assert_equal("true", "!('')")
54
+ end
55
+
56
+ def test_non_empty_string
57
+ js_assert_equal("false", "!('a string')")
58
+ end
59
+
60
+ def test_empty_string_object
61
+ js_assert_equal("false", "!(new String(''))")
62
+ end
63
+
64
+ def test_non_empty_string_object
65
+ js_assert_equal("false", "!(new String('string'))")
66
+ end
67
+
68
+ def test_string_object
69
+ js_assert_equal("false", "!(new String())")
70
+ end
71
+
72
+ def test_boolean_object
73
+ js_assert_equal("false", "!(new Boolean(true))")
74
+ end
75
+
76
+ def test_false_boolean_object
77
+ js_assert_equal("false", "!(new Boolean(false))")
78
+ end
79
+
80
+ def test_array_object
81
+ js_assert_equal("false", "!(new Array())")
82
+ end
83
+
84
+ def test_stuff_in_array_object
85
+ js_assert_equal("false", "!(new Array(1,2,3))")
86
+ end
87
+
88
+ def test_number_object
89
+ js_assert_equal("false", "!(new Number())")
90
+ end
91
+
92
+ def test_number_object_0
93
+ js_assert_equal("false", "!(new Number(0))")
94
+ end
95
+
96
+ def test_number_object_nan
97
+ js_assert_equal("false", "!(new Number(NaN))")
98
+ end
99
+
100
+ def test_number_object_infinite
101
+ js_assert_equal("false", "!(new Number(Infinity))")
102
+ end
103
+ end
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_5_1_Test < ECMAScriptTestCase
4
+ def test_nan_times_nan
5
+ js_assert_equal("Number.NaN", "Number.NaN * Number.NaN")
6
+ end
7
+
8
+ def test_nan_times_1
9
+ js_assert_equal("Number.NaN", "Number.NaN * 1")
10
+ end
11
+
12
+ def test_nan_1_times
13
+ js_assert_equal("Number.NaN", "1 * Number.NaN")
14
+ end
15
+
16
+ def test_positive_inf_times_0
17
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY * 0")
18
+ end
19
+
20
+ def test_negative_inf_times_0
21
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY * 0")
22
+ end
23
+
24
+ def test_0_times_positive_inf
25
+ js_assert_equal("Number.NaN", "0 * Number.POSITIVE_INFINITY")
26
+ end
27
+
28
+ def test_0_times_negative_inf
29
+ js_assert_equal("Number.NaN", "0 * Number.NEGATIVE_INFINITY")
30
+ end
31
+
32
+ def test_0_times_0
33
+ js_assert_equal("0", "0 * 0")
34
+ end
35
+
36
+ def test_infinity_multiplication
37
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY")
38
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY")
39
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY")
40
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY")
41
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.NEGATIVE_INFINITY * 1")
42
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.NEGATIVE_INFINITY * -1")
43
+ js_assert_equal("Number.NEGATIVE_INFINITY", "1 * Number.NEGATIVE_INFINITY")
44
+ js_assert_equal("Number.POSITIVE_INFINITY", "-1 * Number.NEGATIVE_INFINITY")
45
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.POSITIVE_INFINITY * 1")
46
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.POSITIVE_INFINITY * -1")
47
+ js_assert_equal("Number.POSITIVE_INFINITY", "1 * Number.POSITIVE_INFINITY")
48
+ js_assert_equal("Number.NEGATIVE_INFINITY", "-1 * Number.POSITIVE_INFINITY")
49
+ end
50
+
51
+ end
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_5_2_Test < ECMAScriptTestCase
4
+ def test_nan_divide
5
+ js_assert_equal("Number.NaN", "Number.NaN / Number.NaN")
6
+ js_assert_equal("Number.NaN", "Number.NaN / 1")
7
+ js_assert_equal("Number.NaN", "1 / Number.NaN")
8
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY / Number.NaN")
9
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY / Number.NaN")
10
+ end
11
+
12
+
13
+ def test_infinity_divided_by_infinity
14
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY")
15
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY")
16
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY")
17
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY")
18
+ end
19
+
20
+ def test_infinity_divided_by_0
21
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.POSITIVE_INFINITY / 0")
22
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.NEGATIVE_INFINITY / 0")
23
+ end
24
+
25
+ def test_infinity_divided_by_1
26
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.NEGATIVE_INFINITY / 1")
27
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.NEGATIVE_INFINITY / -1")
28
+ js_assert_equal("Number.POSITIVE_INFINITY", "Number.POSITIVE_INFINITY / 1")
29
+ js_assert_equal("Number.NEGATIVE_INFINITY", "Number.POSITIVE_INFINITY / -1")
30
+ end
31
+
32
+ def test_infinity_divided_by_max
33
+ js_assert_equal("Number.NEGATIVE_INFINITY","Number.NEGATIVE_INFINITY / Number.MAX_VALUE")
34
+ js_assert_equal("Number.POSITIVE_INFINITY","Number.NEGATIVE_INFINITY / -Number.MAX_VALUE")
35
+ js_assert_equal("Number.POSITIVE_INFINITY","Number.POSITIVE_INFINITY / Number.MAX_VALUE")
36
+ js_assert_equal("Number.NEGATIVE_INFINITY","Number.POSITIVE_INFINITY / -Number.MAX_VALUE")
37
+ end
38
+
39
+ def test_number_divided_by_infinity
40
+ js_assert_equal("-0", "1 / Number.NEGATIVE_INFINITY")
41
+ js_assert_equal("0", "1 / Number.POSITIVE_INFINITY")
42
+ js_assert_equal("-0", "-1 / Number.POSITIVE_INFINITY")
43
+ js_assert_equal("0", "-1 / Number.NEGATIVE_INFINITY")
44
+ end
45
+
46
+ def test_max_val_divided_by_infinity
47
+ js_assert_equal("-0", "Number.MAX_VALUE / Number.NEGATIVE_INFINITY")
48
+ js_assert_equal("0", "Number.MAX_VALUE / Number.POSITIVE_INFINITY")
49
+ js_assert_equal("-0", "-Number.MAX_VALUE / Number.POSITIVE_INFINITY")
50
+ js_assert_equal("0", "-Number.MAX_VALUE / Number.NEGATIVE_INFINITY")
51
+ end
52
+
53
+ def test_0_divide_by_0
54
+ js_assert_equal("Number.NaN", "0 / -0")
55
+ js_assert_equal("Number.NaN", "-0 / 0")
56
+ js_assert_equal("Number.NaN", "-0 / -0")
57
+ js_assert_equal("Number.NaN", "0 / 0")
58
+ end
59
+
60
+ def test_0_divide_by_number
61
+ js_assert_equal("0", "0 / 1")
62
+ js_assert_equal("-0", "0 / -1")
63
+ js_assert_equal("-0", "-0 / 1")
64
+ js_assert_equal("0", "-0 / -1")
65
+ end
66
+
67
+ def test_number_divide_by_0
68
+ js_assert_equal("Number.POSITIVE_INFINITY", "1/0")
69
+ js_assert_equal("Number.NEGATIVE_INFINITY", "1/-0")
70
+ js_assert_equal("Number.NEGATIVE_INFINITY", "-1/0")
71
+ js_assert_equal("Number.POSITIVE_INFINITY", "-1/-0")
72
+ end
73
+
74
+ def test_0_divide_by_infinity
75
+ js_assert_equal("0", "0 / Number.POSITIVE_INFINITY")
76
+ js_assert_equal("-0", "0 / Number.NEGATIVE_INFINITY")
77
+ js_assert_equal("-0", "-0 / Number.POSITIVE_INFINITY")
78
+ js_assert_equal("0", "-0 / Number.NEGATIVE_INFINITY")
79
+ end
80
+ end
@@ -0,0 +1,88 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_5_3_Test < ECMAScriptTestCase
4
+ def test_either_is_nan
5
+ js_assert_equal("Number.NaN", "Number.NaN % Number.NaN")
6
+ js_assert_equal("Number.NaN", "Number.NaN % 1")
7
+ js_assert_equal("Number.NaN", "1 % Number.NaN")
8
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % Number.NaN")
9
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % Number.NaN")
10
+ end
11
+
12
+ def test_infinity_mod_infinity
13
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY")
14
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY")
15
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY")
16
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY")
17
+ end
18
+
19
+ def test_infinity_mod_0
20
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % 0")
21
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % 0")
22
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % -0")
23
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % -0")
24
+ end
25
+
26
+ def test_infinity_mod_1
27
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % 1")
28
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % -1")
29
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % 1")
30
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % -1")
31
+ end
32
+
33
+ def test_infinity_mod_max_value
34
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % Number.MAX_VALUE")
35
+ js_assert_equal("Number.NaN", "Number.NEGATIVE_INFINITY % -Number.MAX_VALUE")
36
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % Number.MAX_VALUE")
37
+ js_assert_equal("Number.NaN", "Number.POSITIVE_INFINITY % -Number.MAX_VALUE")
38
+ end
39
+
40
+ def test_0_mod_0
41
+ js_assert_equal("Number.NaN", "0 % -0")
42
+ js_assert_equal("Number.NaN", "-0 % 0")
43
+ js_assert_equal("Number.NaN", "-0 % -0")
44
+ js_assert_equal("Number.NaN", "0 % 0")
45
+ end
46
+
47
+ def test_1_mod_0
48
+ js_assert_equal("Number.NaN", "1%0")
49
+ js_assert_equal("Number.NaN", "1%-0")
50
+ js_assert_equal("Number.NaN", "-1%0")
51
+ js_assert_equal("Number.NaN", "-1%-0")
52
+ end
53
+
54
+ def test_max_value_mod_0
55
+ js_assert_equal("Number.NaN", "Number.MAX_VALUE%0")
56
+ js_assert_equal("Number.NaN", "Number.MAX_VALUE%-0")
57
+ js_assert_equal("Number.NaN", "-Number.MAX_VALUE%0")
58
+ js_assert_equal("Number.NaN", "-Number.MAX_VALUE%-0")
59
+ end
60
+
61
+ def test_number_mod_infinity
62
+ js_assert_equal("1", "1 % Number.NEGATIVE_INFINITY")
63
+ js_assert_equal("1", "1 % Number.POSITIVE_INFINITY")
64
+ js_assert_equal("-1", "-1 % Number.POSITIVE_INFINITY")
65
+ js_assert_equal("-1", "-1 % Number.NEGATIVE_INFINITY")
66
+ end
67
+
68
+ def test_max_val_mod_infinity
69
+ js_assert_equal("Number.MAX_VALUE", "Number.MAX_VALUE % Number.NEGATIVE_INFINITY")
70
+ js_assert_equal("Number.MAX_VALUE", "Number.MAX_VALUE % Number.POSITIVE_INFINITY")
71
+ js_assert_equal("-Number.MAX_VALUE", "-Number.MAX_VALUE % Number.POSITIVE_INFINITY")
72
+ js_assert_equal("-Number.MAX_VALUE", "-Number.MAX_VALUE % Number.NEGATIVE_INFINITY")
73
+ end
74
+
75
+ def test_0_mod_infinity
76
+ js_assert_equal("0", "0 % Number.POSITIVE_INFINITY")
77
+ js_assert_equal("0", "0 % Number.NEGATIVE_INFINITY")
78
+ js_assert_equal("-0", "-0 % Number.POSITIVE_INFINITY")
79
+ js_assert_equal("-0", "-0 % Number.NEGATIVE_INFINITY")
80
+ end
81
+
82
+ def test_0_mod_1
83
+ js_assert_equal("0", "0 % 1")
84
+ js_assert_equal("-0", "0 % -1")
85
+ js_assert_equal("-0", "-0 % 1")
86
+ js_assert_equal("0", "-0 % -1")
87
+ end
88
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_6_1_1_Test < ECMAScriptTestCase
4
+ def test_primitive_boolean
5
+ js_assert_equal("1", "true + false")
6
+ end
7
+
8
+ def test_boolean_object
9
+ js_assert_equal("1", "new Boolean(true) + new Boolean(false)")
10
+ end
11
+
12
+ def test_object_boolean_object
13
+ js_assert_equal("1", "new Object(true) + new Object(false)")
14
+ end
15
+
16
+ def test_object_boolean_object_boolean
17
+ js_assert_equal("1", "new Object(new Boolean(true)) + new Object(new Boolean(false))")
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Expressions_11_9_1_Test < ExecuteTestCase
4
+ def setup
5
+ @runtime = RKelly::Runtime.new
6
+ end
7
+
8
+ def test_void_equal
9
+ assert_execute({ 'x' => true }, "var x = void(0) == void(0);")
10
+ end
11
+
12
+ def test_void_equal_decl
13
+ assert_execute({ 'z' => true }, "var x = 10; var y = 10; var z = x == y;")
14
+ end
15
+
16
+ def test_null_eql
17
+ assert_execute({ 'x' => true }, "var x = null == null;")
18
+ end
19
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ class Functions_15_3_1_1_1_Test < ECMAScriptTestCase
4
+ def setup
5
+ super
6
+ @runtime.execute(<<END
7
+ var MyObject = Function( "value", "this.value = value; this.valueOf = Function( 'return this.value' ); this.toString = Function( 'return String(this.value
8
+ );' )" );
9
+ var myfunc = Function();
10
+ myfunc.toString = Object.prototype.toString;
11
+ END
12
+ )
13
+ end
14
+
15
+ def test_to_string
16
+ js_assert_equal("'[object Function]'", "myfunc.toString()")
17
+ end
18
+
19
+ def test_length
20
+ js_assert_equal("0", "myfunc.length")
21
+ end
22
+
23
+ def test_prototype_to_string
24
+ js_assert_equal("'[object Object]'", "myfunc.prototype.toString()")
25
+ end
26
+
27
+ def test_prototype_constructor
28
+ js_assert_equal("myfunc", "myfunc.prototype.constructor")
29
+ end
30
+
31
+ def test_arguments
32
+ js_assert_equal("null", "myfunc.arguments")
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + "/../helper"
2
+
3
+ # ECMA-262
4
+ # Section 15.1.1.1
5
+ class GlobalObject_15_1_1_1_Test < ECMAScriptTestCase
6
+ def setup
7
+ super
8
+ @object = GlobalObject.new
9
+ end
10
+
11
+ def test_nan
12
+ assert @object.has_property?('NaN')
13
+ assert @object['NaN'].dont_enum?
14
+ assert @object['NaN'].dont_delete?
15
+ assert @object['NaN'].value.nan?
16
+ end
17
+
18
+ def test_global_nan
19
+ js_assert_equal('Number.NaN', 'NaN')
20
+ end
21
+
22
+ def test_this_nan
23
+ js_assert_equal('Number.NaN', 'this.NaN')
24
+ end
25
+
26
+ def test_typeof_nan
27
+ js_assert_equal("'number'", 'typeof NaN')
28
+ end
29
+ end