Rubber stamped by Geoff.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Dec 2005 23:07:31 +0000 (23:07 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Dec 2005 23:07:31 +0000 (23:07 +0000)
- land JavaScript tests from the kde version of kjs

        * fast/js/kde/Array-expected.txt: Added.
        * fast/js/kde/Array.html: Added.
        * fast/js/kde/Boolean-expected.txt: Added.
        * fast/js/kde/Boolean.html: Added.
        * fast/js/kde/Date-expected.txt: Added.
        * fast/js/kde/Date.html: Added.
        * fast/js/kde/Error-expected.txt: Added.
        * fast/js/kde/Error.html: Added.
        * fast/js/kde/GlobalObject-expected.txt: Added.
        * fast/js/kde/GlobalObject.html: Added.
        * fast/js/kde/Number-expected.txt: Added.
        * fast/js/kde/Number.html: Added.
        * fast/js/kde/Object-expected.txt: Added.
        * fast/js/kde/Object.html: Added.
        * fast/js/kde/Prototype-expected.txt: Added.
        * fast/js/kde/Prototype.html: Added.
        * fast/js/kde/RegExp-expected.txt: Added.
        * fast/js/kde/RegExp.html: Added.
        * fast/js/kde/StringObject-expected.txt: Added.
        * fast/js/kde/StringObject.html: Added.
        * fast/js/kde/assignments-expected.txt: Added.
        * fast/js/kde/assignments.html: Added.
        * fast/js/kde/cast-expected.txt: Added.
        * fast/js/kde/cast.html: Added.
        * fast/js/kde/comment-1-expected.txt: Added.
        * fast/js/kde/comment-1.html: Added.
        * fast/js/kde/comment-2-expected.txt: Added.
        * fast/js/kde/comment-2.html: Added.
        * fast/js/kde/completion-expected.txt: Added.
        * fast/js/kde/completion.html: Added.
        * fast/js/kde/conditional-expected.txt: Added.
        * fast/js/kde/conditional.html: Added.
        * fast/js/kde/const-expected.txt: Added.
        * fast/js/kde/const.html: Added.
        * fast/js/kde/constructor_length-expected.txt: Added.
        * fast/js/kde/constructor_length.html: Added.
        * fast/js/kde/crash-1-expected.txt: Added.
        * fast/js/kde/crash-1.html: Added.
        * fast/js/kde/crash-2-expected.txt: Added.
        * fast/js/kde/crash-2.html: Added.
        * fast/js/kde/delete-expected.txt: Added.
        * fast/js/kde/delete.html: Added.
        * fast/js/kde/empty-expected.txt: Added.
        * fast/js/kde/empty.html: Added.
        * fast/js/kde/encode_decode_uri-expected.txt: Added.
        * fast/js/kde/encode_decode_uri.html: Added.
        * fast/js/kde/eval-expected.txt: Added.
        * fast/js/kde/eval.html: Added.
        * fast/js/kde/evil-n-expected.txt: Added.
        * fast/js/kde/evil-n.html: Added.
        * fast/js/kde/exception_propagation-expected.txt: Added.
        * fast/js/kde/exception_propagation.html: Added.
        * fast/js/kde/exceptions-expected.txt: Added.
        * fast/js/kde/exceptions.html: Added.
        * fast/js/kde/function-expected.txt: Added.
        * fast/js/kde/function.html: Added.
        * fast/js/kde/function_arguments-expected.txt: Added.
        * fast/js/kde/function_arguments.html: Added.
        * fast/js/kde/function_constructor-expected.txt: Added.
        * fast/js/kde/function_constructor.html: Added.
        * fast/js/kde/function_length-expected.txt: Added.
        * fast/js/kde/function_length.html: Added.
        * fast/js/kde/garbage-n-expected.txt: Added.
        * fast/js/kde/garbage-n.html: Added.
        * fast/js/kde/inbuilt_function_proto-expected.txt: Added.
        * fast/js/kde/inbuilt_function_proto.html: Added.
        * fast/js/kde/inbuilt_function_tostring-expected.txt: Added.
        * fast/js/kde/inbuilt_function_tostring.html: Added.
        * fast/js/kde/iteration-expected.txt: Added.
        * fast/js/kde/iteration.html: Added.
        * fast/js/kde/j-comment-3-expected.txt: Added.
        * fast/js/kde/j-comment-3.html: Added.
        * fast/js/kde/j-comment-4-expected.txt: Added.
        * fast/js/kde/j-comment-4.html: Added.
        * fast/js/kde/literals-expected.txt: Added.
        * fast/js/kde/literals.html: Added.
        * fast/js/kde/math-expected.txt: Added.
        * fast/js/kde/math.html: Added.
        * fast/js/kde/md5-1-expected.txt: Added.
        * fast/js/kde/md5-1.html: Added.
        * fast/js/kde/md5-2-expected.txt: Added.
        * fast/js/kde/md5-2.html: Added.
        * fast/js/kde/object_prototype-expected.txt: Added.
        * fast/js/kde/object_prototype.html: Added.
        * fast/js/kde/object_prototype_tostring-expected.txt: Added.
        * fast/js/kde/object_prototype_tostring.html: Added.
        * fast/js/kde/operators-expected.txt: Added.
        * fast/js/kde/operators.html: Added.
        * fast/js/kde/parse-expected.txt: Added.
        * fast/js/kde/parse.html: Added.
        * fast/js/kde/prototype_length-expected.txt: Added.
        * fast/js/kde/prototype_length.html: Added.
        * fast/js/kde/prototype_proto-expected.txt: Added.
        * fast/js/kde/prototype_proto.html: Added.
        * fast/js/kde/resources/Array.js: Added.
        * fast/js/kde/resources/Boolean.js: Added.
        * fast/js/kde/resources/Date.js: Added.
        * fast/js/kde/resources/Error.js: Added.
        * fast/js/kde/resources/GlobalObject.js: Added.
        * fast/js/kde/resources/KNOWN_FAILURES: Added.
        * fast/js/kde/resources/Number.js: Added.
        * fast/js/kde/resources/Object.js: Added.
        * fast/js/kde/resources/Prototype.js: Added.
        * fast/js/kde/resources/README: Added.
        * fast/js/kde/resources/RegExp.js: Added.
        * fast/js/kde/resources/StringObject.js: Added.
        * fast/js/kde/resources/assignments.js: Added.
        * fast/js/kde/resources/base.js: Added.
        * fast/js/kde/resources/cast.js: Added.
        * fast/js/kde/resources/comment-1.js: Added.
        * fast/js/kde/resources/comment-2.js: Added.
        * fast/js/kde/resources/completion.js: Added.
        * fast/js/kde/resources/conditional.js: Added.
        * fast/js/kde/resources/const.js: Added.
        * fast/js/kde/resources/constructor_length.js: Added.
        * fast/js/kde/resources/crash-1.js: Added.
        * fast/js/kde/resources/crash-2.js: Added.
        * fast/js/kde/resources/delete.js: Added.
        * fast/js/kde/resources/empty.js: Added.
        * fast/js/kde/resources/encode_decode_uri.js: Added.
        * fast/js/kde/resources/eval.js: Added.
        * fast/js/kde/resources/evil-n.js: Added.
        * fast/js/kde/resources/exception_propagation.js: Added.
        * fast/js/kde/resources/exceptions.js: Added.
        * fast/js/kde/resources/function.js: Added.
        * fast/js/kde/resources/function_arguments.js: Added.
        * fast/js/kde/resources/function_constructor.js: Added.
        * fast/js/kde/resources/function_length.js: Added.
        * fast/js/kde/resources/garbage-n.js: Added.
        * fast/js/kde/resources/inbuilt_function_proto.js: Added.
        * fast/js/kde/resources/inbuilt_function_tostring.js: Added.
        * fast/js/kde/resources/iteration.js: Added.
        * fast/js/kde/resources/j-comment-3.js: Added.
        * fast/js/kde/resources/j-comment-4.js: Added.
        * fast/js/kde/resources/literals.js: Added.
        * fast/js/kde/resources/math.js: Added.
        * fast/js/kde/resources/md5-1.js: Added.
        * fast/js/kde/resources/md5-2.js: Added.
        * fast/js/kde/resources/object_prototype.js: Added.
        * fast/js/kde/resources/object_prototype_tostring.js: Added.
        * fast/js/kde/resources/operators.js: Added.
        * fast/js/kde/resources/parse.js: Added.
        * fast/js/kde/resources/prototype_length.js: Added.
        * fast/js/kde/resources/prototype_proto.js: Added.
        * fast/js/kde/resources/scope.js: Added.
        * fast/js/kde/resources/shell.js: Added.
        * fast/js/kde/resources/statements.js: Added.
        * fast/js/kde/resources/string-1-n.js: Added.
        * fast/js/kde/resources/string-2-n.js: Added.
        * fast/js/kde/resources/var_decl_init.js: Added.
        * fast/js/kde/scope-expected.txt: Added.
        * fast/js/kde/scope.html: Added.
        * fast/js/kde/statements-expected.txt: Added.
        * fast/js/kde/statements.html: Added.
        * fast/js/kde/string-1-n-expected.txt: Added.
        * fast/js/kde/string-1-n.html: Added.
        * fast/js/kde/string-2-n-expected.txt: Added.
        * fast/js/kde/string-2-n.html: Added.
        * fast/js/kde/var_decl_init-expected.txt: Added.
        * fast/js/kde/var_decl_init.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@11771 268f45cc-cd09-0410-ab3c-d52691b4dbfc

161 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/js/kde/Array-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Array.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Boolean-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Boolean.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Date-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Date.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Error-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Error.html [new file with mode: 0644]
LayoutTests/fast/js/kde/GlobalObject-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/GlobalObject.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Number-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Number.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Object-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Object.html [new file with mode: 0644]
LayoutTests/fast/js/kde/Prototype-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/Prototype.html [new file with mode: 0644]
LayoutTests/fast/js/kde/RegExp-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/RegExp.html [new file with mode: 0644]
LayoutTests/fast/js/kde/StringObject-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/StringObject.html [new file with mode: 0644]
LayoutTests/fast/js/kde/assignments-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/assignments.html [new file with mode: 0644]
LayoutTests/fast/js/kde/cast-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/cast.html [new file with mode: 0644]
LayoutTests/fast/js/kde/comment-1-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/comment-1.html [new file with mode: 0644]
LayoutTests/fast/js/kde/comment-2-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/comment-2.html [new file with mode: 0644]
LayoutTests/fast/js/kde/completion-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/completion.html [new file with mode: 0644]
LayoutTests/fast/js/kde/conditional-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/conditional.html [new file with mode: 0644]
LayoutTests/fast/js/kde/const-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/const.html [new file with mode: 0644]
LayoutTests/fast/js/kde/constructor_length-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/constructor_length.html [new file with mode: 0644]
LayoutTests/fast/js/kde/crash-1-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/crash-1.html [new file with mode: 0644]
LayoutTests/fast/js/kde/crash-2-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/crash-2.html [new file with mode: 0644]
LayoutTests/fast/js/kde/delete-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/delete.html [new file with mode: 0644]
LayoutTests/fast/js/kde/empty-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/empty.html [new file with mode: 0644]
LayoutTests/fast/js/kde/encode_decode_uri-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/encode_decode_uri.html [new file with mode: 0644]
LayoutTests/fast/js/kde/eval-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/eval.html [new file with mode: 0644]
LayoutTests/fast/js/kde/evil-n-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/evil-n.html [new file with mode: 0644]
LayoutTests/fast/js/kde/exception_propagation-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/exception_propagation.html [new file with mode: 0644]
LayoutTests/fast/js/kde/exceptions-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/exceptions.html [new file with mode: 0644]
LayoutTests/fast/js/kde/function-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/function.html [new file with mode: 0644]
LayoutTests/fast/js/kde/function_arguments-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/function_arguments.html [new file with mode: 0644]
LayoutTests/fast/js/kde/function_constructor-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/function_constructor.html [new file with mode: 0644]
LayoutTests/fast/js/kde/function_length-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/function_length.html [new file with mode: 0644]
LayoutTests/fast/js/kde/garbage-n-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/garbage-n.html [new file with mode: 0644]
LayoutTests/fast/js/kde/inbuilt_function_proto-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/inbuilt_function_proto.html [new file with mode: 0644]
LayoutTests/fast/js/kde/inbuilt_function_tostring-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/inbuilt_function_tostring.html [new file with mode: 0644]
LayoutTests/fast/js/kde/iteration-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/iteration.html [new file with mode: 0644]
LayoutTests/fast/js/kde/j-comment-3-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/j-comment-3.html [new file with mode: 0644]
LayoutTests/fast/js/kde/j-comment-4-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/j-comment-4.html [new file with mode: 0644]
LayoutTests/fast/js/kde/literals-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/literals.html [new file with mode: 0644]
LayoutTests/fast/js/kde/math-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/math.html [new file with mode: 0644]
LayoutTests/fast/js/kde/md5-1-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/md5-1.html [new file with mode: 0644]
LayoutTests/fast/js/kde/md5-2-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/md5-2.html [new file with mode: 0644]
LayoutTests/fast/js/kde/object_prototype-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/object_prototype.html [new file with mode: 0644]
LayoutTests/fast/js/kde/object_prototype_tostring-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/object_prototype_tostring.html [new file with mode: 0644]
LayoutTests/fast/js/kde/operators-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/operators.html [new file with mode: 0644]
LayoutTests/fast/js/kde/parse-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/parse.html [new file with mode: 0644]
LayoutTests/fast/js/kde/prototype_length-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/prototype_length.html [new file with mode: 0644]
LayoutTests/fast/js/kde/prototype_proto-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/prototype_proto.html [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Array.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Boolean.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Date.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Error.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/GlobalObject.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/KNOWN_FAILURES [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Number.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Object.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/Prototype.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/README [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/RegExp.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/StringObject.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/assignments.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/base.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/cast.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/comment-1.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/comment-2.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/completion.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/conditional.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/const.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/constructor_length.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/crash-1.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/crash-2.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/delete.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/empty.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/encode_decode_uri.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/eval.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/evil-n.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/exception_propagation.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/exceptions.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/function.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/function_arguments.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/function_constructor.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/function_length.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/garbage-n.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/inbuilt_function_proto.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/inbuilt_function_tostring.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/iteration.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/j-comment-3.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/j-comment-4.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/literals.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/math.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/md5-1.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/md5-2.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/object_prototype.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/object_prototype_tostring.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/operators.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/parse.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/prototype_length.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/prototype_proto.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/scope.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/shell.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/statements.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/string-1-n.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/string-2-n.js [new file with mode: 0644]
LayoutTests/fast/js/kde/resources/var_decl_init.js [new file with mode: 0644]
LayoutTests/fast/js/kde/scope-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/scope.html [new file with mode: 0644]
LayoutTests/fast/js/kde/statements-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/statements.html [new file with mode: 0644]
LayoutTests/fast/js/kde/string-1-n-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/string-1-n.html [new file with mode: 0644]
LayoutTests/fast/js/kde/string-2-n-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/string-2-n.html [new file with mode: 0644]
LayoutTests/fast/js/kde/var_decl_init-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/kde/var_decl_init.html [new file with mode: 0644]

index 5e31d67cc0f7a9c2bddf36733e913d59e6bf4a45..463cb68415f68445ae8eedf8bc294f96993d40ca 100644 (file)
@@ -1,3 +1,170 @@
+2005-12-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Geoff.
+
+       - land JavaScript tests from the kde version of kjs
+
+        * fast/js/kde/Array-expected.txt: Added.
+        * fast/js/kde/Array.html: Added.
+        * fast/js/kde/Boolean-expected.txt: Added.
+        * fast/js/kde/Boolean.html: Added.
+        * fast/js/kde/Date-expected.txt: Added.
+        * fast/js/kde/Date.html: Added.
+        * fast/js/kde/Error-expected.txt: Added.
+        * fast/js/kde/Error.html: Added.
+        * fast/js/kde/GlobalObject-expected.txt: Added.
+        * fast/js/kde/GlobalObject.html: Added.
+        * fast/js/kde/Number-expected.txt: Added.
+        * fast/js/kde/Number.html: Added.
+        * fast/js/kde/Object-expected.txt: Added.
+        * fast/js/kde/Object.html: Added.
+        * fast/js/kde/Prototype-expected.txt: Added.
+        * fast/js/kde/Prototype.html: Added.
+        * fast/js/kde/RegExp-expected.txt: Added.
+        * fast/js/kde/RegExp.html: Added.
+        * fast/js/kde/StringObject-expected.txt: Added.
+        * fast/js/kde/StringObject.html: Added.
+        * fast/js/kde/assignments-expected.txt: Added.
+        * fast/js/kde/assignments.html: Added.
+        * fast/js/kde/cast-expected.txt: Added.
+        * fast/js/kde/cast.html: Added.
+        * fast/js/kde/comment-1-expected.txt: Added.
+        * fast/js/kde/comment-1.html: Added.
+        * fast/js/kde/comment-2-expected.txt: Added.
+        * fast/js/kde/comment-2.html: Added.
+        * fast/js/kde/completion-expected.txt: Added.
+        * fast/js/kde/completion.html: Added.
+        * fast/js/kde/conditional-expected.txt: Added.
+        * fast/js/kde/conditional.html: Added.
+        * fast/js/kde/const-expected.txt: Added.
+        * fast/js/kde/const.html: Added.
+        * fast/js/kde/constructor_length-expected.txt: Added.
+        * fast/js/kde/constructor_length.html: Added.
+        * fast/js/kde/crash-1-expected.txt: Added.
+        * fast/js/kde/crash-1.html: Added.
+        * fast/js/kde/crash-2-expected.txt: Added.
+        * fast/js/kde/crash-2.html: Added.
+        * fast/js/kde/delete-expected.txt: Added.
+        * fast/js/kde/delete.html: Added.
+        * fast/js/kde/empty-expected.txt: Added.
+        * fast/js/kde/empty.html: Added.
+        * fast/js/kde/encode_decode_uri-expected.txt: Added.
+        * fast/js/kde/encode_decode_uri.html: Added.
+        * fast/js/kde/eval-expected.txt: Added.
+        * fast/js/kde/eval.html: Added.
+        * fast/js/kde/evil-n-expected.txt: Added.
+        * fast/js/kde/evil-n.html: Added.
+        * fast/js/kde/exception_propagation-expected.txt: Added.
+        * fast/js/kde/exception_propagation.html: Added.
+        * fast/js/kde/exceptions-expected.txt: Added.
+        * fast/js/kde/exceptions.html: Added.
+        * fast/js/kde/function-expected.txt: Added.
+        * fast/js/kde/function.html: Added.
+        * fast/js/kde/function_arguments-expected.txt: Added.
+        * fast/js/kde/function_arguments.html: Added.
+        * fast/js/kde/function_constructor-expected.txt: Added.
+        * fast/js/kde/function_constructor.html: Added.
+        * fast/js/kde/function_length-expected.txt: Added.
+        * fast/js/kde/function_length.html: Added.
+        * fast/js/kde/garbage-n-expected.txt: Added.
+        * fast/js/kde/garbage-n.html: Added.
+        * fast/js/kde/inbuilt_function_proto-expected.txt: Added.
+        * fast/js/kde/inbuilt_function_proto.html: Added.
+        * fast/js/kde/inbuilt_function_tostring-expected.txt: Added.
+        * fast/js/kde/inbuilt_function_tostring.html: Added.
+        * fast/js/kde/iteration-expected.txt: Added.
+        * fast/js/kde/iteration.html: Added.
+        * fast/js/kde/j-comment-3-expected.txt: Added.
+        * fast/js/kde/j-comment-3.html: Added.
+        * fast/js/kde/j-comment-4-expected.txt: Added.
+        * fast/js/kde/j-comment-4.html: Added.
+        * fast/js/kde/literals-expected.txt: Added.
+        * fast/js/kde/literals.html: Added.
+        * fast/js/kde/math-expected.txt: Added.
+        * fast/js/kde/math.html: Added.
+        * fast/js/kde/md5-1-expected.txt: Added.
+        * fast/js/kde/md5-1.html: Added.
+        * fast/js/kde/md5-2-expected.txt: Added.
+        * fast/js/kde/md5-2.html: Added.
+        * fast/js/kde/object_prototype-expected.txt: Added.
+        * fast/js/kde/object_prototype.html: Added.
+        * fast/js/kde/object_prototype_tostring-expected.txt: Added.
+        * fast/js/kde/object_prototype_tostring.html: Added.
+        * fast/js/kde/operators-expected.txt: Added.
+        * fast/js/kde/operators.html: Added.
+        * fast/js/kde/parse-expected.txt: Added.
+        * fast/js/kde/parse.html: Added.
+        * fast/js/kde/prototype_length-expected.txt: Added.
+        * fast/js/kde/prototype_length.html: Added.
+        * fast/js/kde/prototype_proto-expected.txt: Added.
+        * fast/js/kde/prototype_proto.html: Added.
+        * fast/js/kde/resources/Array.js: Added.
+        * fast/js/kde/resources/Boolean.js: Added.
+        * fast/js/kde/resources/Date.js: Added.
+        * fast/js/kde/resources/Error.js: Added.
+        * fast/js/kde/resources/GlobalObject.js: Added.
+        * fast/js/kde/resources/KNOWN_FAILURES: Added.
+        * fast/js/kde/resources/Number.js: Added.
+        * fast/js/kde/resources/Object.js: Added.
+        * fast/js/kde/resources/Prototype.js: Added.
+        * fast/js/kde/resources/README: Added.
+        * fast/js/kde/resources/RegExp.js: Added.
+        * fast/js/kde/resources/StringObject.js: Added.
+        * fast/js/kde/resources/assignments.js: Added.
+        * fast/js/kde/resources/base.js: Added.
+        * fast/js/kde/resources/cast.js: Added.
+        * fast/js/kde/resources/comment-1.js: Added.
+        * fast/js/kde/resources/comment-2.js: Added.
+        * fast/js/kde/resources/completion.js: Added.
+        * fast/js/kde/resources/conditional.js: Added.
+        * fast/js/kde/resources/const.js: Added.
+        * fast/js/kde/resources/constructor_length.js: Added.
+        * fast/js/kde/resources/crash-1.js: Added.
+        * fast/js/kde/resources/crash-2.js: Added.
+        * fast/js/kde/resources/delete.js: Added.
+        * fast/js/kde/resources/empty.js: Added.
+        * fast/js/kde/resources/encode_decode_uri.js: Added.
+        * fast/js/kde/resources/eval.js: Added.
+        * fast/js/kde/resources/evil-n.js: Added.
+        * fast/js/kde/resources/exception_propagation.js: Added.
+        * fast/js/kde/resources/exceptions.js: Added.
+        * fast/js/kde/resources/function.js: Added.
+        * fast/js/kde/resources/function_arguments.js: Added.
+        * fast/js/kde/resources/function_constructor.js: Added.
+        * fast/js/kde/resources/function_length.js: Added.
+        * fast/js/kde/resources/garbage-n.js: Added.
+        * fast/js/kde/resources/inbuilt_function_proto.js: Added.
+        * fast/js/kde/resources/inbuilt_function_tostring.js: Added.
+        * fast/js/kde/resources/iteration.js: Added.
+        * fast/js/kde/resources/j-comment-3.js: Added.
+        * fast/js/kde/resources/j-comment-4.js: Added.
+        * fast/js/kde/resources/literals.js: Added.
+        * fast/js/kde/resources/math.js: Added.
+        * fast/js/kde/resources/md5-1.js: Added.
+        * fast/js/kde/resources/md5-2.js: Added.
+        * fast/js/kde/resources/object_prototype.js: Added.
+        * fast/js/kde/resources/object_prototype_tostring.js: Added.
+        * fast/js/kde/resources/operators.js: Added.
+        * fast/js/kde/resources/parse.js: Added.
+        * fast/js/kde/resources/prototype_length.js: Added.
+        * fast/js/kde/resources/prototype_proto.js: Added.
+        * fast/js/kde/resources/scope.js: Added.
+        * fast/js/kde/resources/shell.js: Added.
+        * fast/js/kde/resources/statements.js: Added.
+        * fast/js/kde/resources/string-1-n.js: Added.
+        * fast/js/kde/resources/string-2-n.js: Added.
+        * fast/js/kde/resources/var_decl_init.js: Added.
+        * fast/js/kde/scope-expected.txt: Added.
+        * fast/js/kde/scope.html: Added.
+        * fast/js/kde/statements-expected.txt: Added.
+        * fast/js/kde/statements.html: Added.
+        * fast/js/kde/string-1-n-expected.txt: Added.
+        * fast/js/kde/string-1-n.html: Added.
+        * fast/js/kde/string-2-n-expected.txt: Added.
+        * fast/js/kde/string-2-n.html: Added.
+        * fast/js/kde/var_decl_init-expected.txt: Added.
+        * fast/js/kde/var_decl_init.html: Added.
+
 2005-12-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
         Reviewed by eseidel.
diff --git a/LayoutTests/fast/js/kde/Array-expected.txt b/LayoutTests/fast/js/kde/Array-expected.txt
new file mode 100644 (file)
index 0000000..b8b2aa3
--- /dev/null
@@ -0,0 +1,68 @@
+PASS Array().length is 0
+PASS (new Array()).length is 0
+PASS (new Array(3)).length is 3
+PASS (new Array(11, 22)).length is 2
+PASS (new Array(11, 22))[0] is 11
+PASS Array(11, 22)[1] is 22
+PASS (new Array(11, 22))[3] is undefined.
+PASS String(new Array(11, 22)) is '11,22'
+PASS var a = []; a[0] = 33; a[0] is 33
+PASS var a = []; a[0] = 33; a.length is 1
+PASS var a = [11, 22]; a.length = 1; String(a); is '11'
+PASS var a = [11, 22]; a.length = 1; a.length; is 1
+FAIL caught; should be true. Was false
+FAIL ename should be RangeError. Was 
+PASS caught; is true
+PASS ename is 'RangeError'
+PASS var a = [11, 22]; a.length = 1; a[1]; is undefined.
+PASS Array().toString() is ''
+PASS Array(3).toString() is ',,'
+PASS Array(11, 22).toString() is '11,22'
+PASS String(Array(11, 22).concat(33)) is '11,22,33'
+PASS String(Array(2).concat(33, 44)) is ',,33,44'
+PASS String(Array(2).concat(Array(2))) is ',,,'
+PASS String(Array(11,22).concat(Array(33,44))) is '11,22,33,44'
+PASS String(Array(1,2).concat(3,Array(4,5))) is '1,2,3,4,5'
+PASS var a = new Array(1,2,3); delete a[1]; String(a.concat(4)) is '1,,3,4'
+PASS [1,2,3,4].slice(1, 3).toString() is '2,3'
+PASS [1,2,3,4].slice(-3, -1).toString() is '2,3'
+PASS [1,2].slice(-9, 0).length is 0
+PASS [1,2].slice(1).toString() is '2'
+PASS [1,2].slice().toString() is '1,2'
+PASS (new Array('a')).length is 1
+PASS (new Array('a'))[0] is 'a'
+PASS (new Array('a'))[1] is undefined.
+PASS Array('a').length is 1
+PASS Array('a')[0] is 'a'
+PASS String(Array()) is ''
+PASS String(Array('a','b')) is 'a,b'
+PASS [].length is 0
+PASS ['a'].length is 1
+PASS ['a'][0] is 'a'
+PASS ['a',,'c'][2] is 'c'
+PASS forInSum([]) is ''
+PASS forInSum(Array()) is ''
+PASS forInSum(Array('a')) is 'a'
+PASS forInSum(a0) is ''
+PASS forInSum(a1) is 'a'
+PASS String([3,1,'2'].sort()) is '1,2,3'
+PASS String([,'x','aa'].sort()) is 'aa,x,'
+PASS var a = ['aa', 'b', 'cccc', 'ddd']; String(a.sort(comp)) is 'b,aa,ddd,cccc'
+PASS [0, Infinity].sort(function(a, b) { return a - b }).toString() is '0,Infinity'
+PASS [].unshift('a') is 1
+PASS ['c'].unshift('a', 'b') is 3
+PASS var a = []; a.unshift('a'); String(a) is 'a'
+PASS var a = ['c']; a.unshift('a', 'b'); String(a) is 'a,b,c'
+PASS String(['a', 'b', 'c'].splice(1, 2, 'x', 'y')) is 'b,c'
+FAIL arr.length should be 40. Was 0
+FAIL arr[maxint] should be test. Was undefined
+FAIL arr.length should be 40. Was 0
+PASS arr[maxint] is undefined
+PASS arr.length is maxint
+PASS arr[maxint-1] is "test2"
+FAIL propnames.length should be 3. Was 4
+PASS propnames[0] is '0'
+PASS propnames[1] is '1'
+FAIL propnames[2] should be 2. Was 1
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Array.html b/LayoutTests/fast/js/kde/Array.html
new file mode 100644 (file)
index 0000000..8f64e67
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Array.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Boolean-expected.txt b/LayoutTests/fast/js/kde/Boolean-expected.txt
new file mode 100644 (file)
index 0000000..99fe094
--- /dev/null
@@ -0,0 +1,10 @@
+PASS Boolean() is false
+PASS Boolean(true) is true
+PASS Boolean(false) is false
+PASS (new Boolean(true)).valueOf() is true
+PASS (new Boolean(false)).valueOf() is false
+PASS (new Boolean(Boolean(true))).valueOf() is true
+PASS true.valueOf() === true is true
+PASS false.toString() === 'false' is true
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Boolean.html b/LayoutTests/fast/js/kde/Boolean.html
new file mode 100644 (file)
index 0000000..a4d650d
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Boolean.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Date-expected.txt b/LayoutTests/fast/js/kde/Date-expected.txt
new file mode 100644 (file)
index 0000000..b610c72
--- /dev/null
@@ -0,0 +1,168 @@
+Start Of Test
+
+PASS isNaN(Date.prototype.valueOf()) is true
+PASS d.getMinutes() is 45
+PASS d.getUTCMinutes() is 45
+PASS d.getDay() is 6
+PASS d.getMonth() is 2
+PASS d.getFullYear() is 2002
+PASS Number(d) is 1017492323515
+PASS Boolean(d) is true
+PASS (new Date(100)).valueOf() is 100
+PASS (new Date(true)).valueOf() is 1
+PASS (new Date(false)).valueOf() is 0
+PASS typeof (new Date()).toString() is 'string'
+PASS typeof ('' + new Date()) is 'string'
+PASS typeof (new Date() + new Date()) is 'string'
+PASS isNaN(Number(new Date('foo'))) is true
+PASS new Date(10001) - new Date(10000) is 1
+PASS '' - new Date(10000) is -10000
+PASS 2 * new Date(10000) is 20000
+PASS var d = new Date(); d == String(d) is true
+PASS d0.getHours() is 0
+PASS d1.getUTCHours() is 0
+PASS d1.getUTCHours() is 11
+PASS d2.getMilliseconds() is 11
+PASS d2.getSeconds() is 11
+PASS d2.getMilliseconds() is 22
+PASS d2.getMinutes() is 11
+PASS d2.getSeconds() is 22
+PASS d2.getMilliseconds() is 33
+PASS d2.getHours() is 11
+PASS d2.getMinutes() is 22
+PASS d2.getSeconds() is 33
+PASS d2.getMilliseconds() is 44
+PASS d2.getMonth() is 3
+PASS d2.getDate() is 20
+PASS d2.getFullYear() is 1976
+PASS d2.getMonth() is 3
+PASS d2.getDate() is 20
+PASS d2.setYear(0), d2.getFullYear() is 1900
+PASS d2.setYear(1), d2.getFullYear() is 1901
+PASS d2.setYear(99), d2.getFullYear() is 1999
+FAIL d2.setYear(100), d2.getFullYear() should be 100. Was 2000
+PASS d2.setYear(2050), d2.getFullYear() is 2050
+FAIL d2.setYear(1899), d2.getFullYear() should be 1899. Was 3799
+PASS d2.setYear(2000), d2.getFullYear() is 2000
+PASS d2.setYear(2100), d2.getFullYear() is 2100
+PASS dateRef.getDay() is 6
+PASS dateRef.getDate() is 5
+PASS dateRef.getMonth() is 10
+PASS dateRef.getYear() is 94
+PASS dateRef.getFullYear() is 1994
+PASS dateRef.getMinutes() is 15
+PASS dateRef.getSeconds() is 30
+PASS dateRef.getUTCDay() is 6
+PASS dateRef.getUTCDate() is 5
+PASS dateRef.getUTCMonth() is 10
+PASS dateRef.getUTCFullYear() is 1994
+PASS dateRef.getUTCHours() is 13
+PASS dateRef.getUTCMinutes() is 15
+PASS dateRef.getUTCSeconds() is 30
+FAIL d.toUTCString() should be Sat, 05 Nov 1994 13:15:30 GMT. Was Invalid Date
+FAIL d.toUTCString().replace('GMT', '+0000') should be Sat, 05 Nov 1994 13:15:30 +0000. Was Invalid Date
+FAIL dateRef.getDay() should be 4. Was 3
+FAIL dateRef.getDate() should be 5. Was 4
+PASS dateRef.getMonth() is 10
+PASS dateRef.getFullYear() is 2065
+PASS dateRef.getMinutes() is 15
+PASS dateRef.getSeconds() is 30
+FAIL dateRef.getUTCDay() should be 4. Was 3
+FAIL dateRef.getUTCDate() should be 5. Was 4
+PASS dateRef.getUTCMonth() is 10
+PASS dateRef.getUTCFullYear() is 2065
+PASS dateRef.getUTCHours() is 13
+PASS dateRef.getUTCMinutes() is 15
+PASS dateRef.getUTCSeconds() is 30
+FAIL dateRef.getDay() should be 3. Was 2
+FAIL dateRef.getDate() should be 5. Was 4
+PASS dateRef.getMonth() is 10
+PASS dateRef.getFullYear() is 2064
+PASS dateRef.getMinutes() is 15
+PASS dateRef.getSeconds() is 30
+FAIL dateRef.getUTCDay() should be 3. Was 2
+FAIL dateRef.getUTCDate() should be 5. Was 4
+PASS dateRef.getUTCMonth() is 10
+PASS dateRef.getUTCFullYear() is 2064
+PASS dateRef.getUTCHours() is 13
+PASS dateRef.getUTCMinutes() is 15
+PASS dateRef.getUTCSeconds() is 30
+FAIL d.toUTCString().replace('GMT', '+0000') should be Tue, 05 Nov 2024 13:15:30 +0000. Was Invalid Date
+FAIL d.toUTCString().replace('GMT', '+0000') should be Mon, 05 Nov 2040 13:15:30 +0000. Was Invalid Date
+FAIL d.toUTCString().replace('GMT', '+0000') should be Fri, 05 Nov 2100 13:15:30 +0000. Was Invalid Date
+FAIL d.toUTCString().replace('GMT', '+0000') should be Thu, 04 Nov 2004 22:15:30 +0000. Was Invalid Date
+PASS (new Date('Dec 25 1995 1:30 PM UTC')).valueOf() is 819898200000
+PASS (new Date('Dec 25 1995 1:30 pm UTC')).valueOf() is 819898200000
+PASS (new Date('Dec 25 1995 1:30 AM UTC')).valueOf() is 819855000000
+PASS (new Date('Dec 25 1995 1:30 am UTC')).valueOf() is 819855000000
+PASS (new Date('Dec 25 1995 12:00 PM UTC')).valueOf() is 819892800000
+PASS (new Date('Dec 25 1995 12:00 AM UTC')).valueOf() is 819849600000
+PASS (new Date('Dec 25 1995 00:00 AM UTC')).valueOf() is 819849600000
+PASS (new Date('Dec 25 1995 00:00 PM UTC')).valueOf() is 819892800000
+PASS isNaN(new Date('Dec 25 1995 13:30 AM UTC')).valueOf() is true
+PASS new Date('Sat, 01 Dec 2000 08:00:00 GMT').getMonth() is 11
+PASS new Date('01 Jan 99 22:00 +0100').getFullYear() is 1999
+PASS new Date('May 09 1999 13:12:40 GMT').getDate() is 9
+PASS new Date('Wednesday February 09 1999 13:12:40 GMT').getMonth() is 1
+PASS new Date('Wednesday January 09 1999 13:12:40 GMT').getFullYear() is 1999
+PASS new Date('Wednesday January 09 13:12:40 GMT 1999').getFullYear() is 1999
+PASS new Date('Wednesday January 06 13:12:40 GMT 2100').getFullYear() is 2100
+PASS (new Date('\n21\rFeb\f\v\t 2004')).getFullYear() is 2004
+PASS (new Date('Dec 25 1995 gmt')).valueOf() is 819849600000
+PASS (new Date('Dec 25 1995 utc')).valueOf() is 819849600000
+PASS new Date('3/31/2005').getDate() is 31
+PASS new Date('3/31/2005').getHours() is 0
+PASS new Date('7/31/2005').getHours() is 0
+PASS new Date('3/31/2005 GMT').getFullYear() is 2005
+PASS new Date('3/31/2005 12:45:15').getDate() is 31
+PASS new Date('3/31/2005 12:45:15').getMonth() is 2
+PASS new Date('3/31/2005 12:45:15').getSeconds() is 15
+PASS new Date('2003/02/03').getMonth() is 1
+PASS new Date('2003/02/03 02:01:04 UTC').getSeconds() is 4
+PASS jul27Num is Date.parse(jul27Str).valueOf()
+PASS typeof Date.parse(0) is 'number'
+PASS isNaN(Date.parse(0)) is true
+PASS Date.parse(new String(jul27Str)).valueOf() is jul27Num
+PASS isNaN(Number(new Date('01 ANF 2000'))) is true
+PASS isNaN(Number(new Date('ANF 01 2000'))) is true
+PASS oldHours is d.getHours()
+PASS Date.UTC(1800, 0, 1) is -5364662400000
+PASS Date.UTC(1800, 2, 1) is -5359564800000
+PASS Date.UTC(1899, 0, 1) is -2240524800000
+PASS Date.UTC(1900, 0, 1) is -2208988800000
+PASS Date.UTC(1960, 0, 1) is -315619200000
+PASS Date.UTC(1970, 0, 1) is 0
+PASS Date.UTC(3000, 0, 1) is 32503680000000
+PASS (new Date(-5364662400000)).valueOf() is -5364662400000
+PASS (new Date(-2240524800000)).valueOf() is -2240524800000
+PASS (new Date(-2208988800000)).valueOf() is -2208988800000
+PASS (new Date(-315619200000)).valueOf() is -315619200000
+PASS (new Date(0)).valueOf() is 0
+PASS (new Date(32503680000000)).valueOf() is 32503680000000
+PASS d.getDay() is 5
+PASS d.getYear() == 1100 || d.getYear() == 3000 is true
+PASS d.getFullYear() is 3000
+PASS d.getDay() is 3
+PASS d.getHours() is 0
+PASS new Date('3/31/2099').getFullYear() is 2099
+PASS new Date('3/31/2099').getMonth() is 2
+PASS d.valueOf() is 32503680000000
+PASS d.getUTCDay() is 3
+PASS d.getUTCHours() is 0
+PASS d.getFullYear() is 1899
+PASS d.getYear() == -1 || d.getYear() == 1899 is true
+PASS d.getDay() is 0
+PASS d.getHours() is 0
+PASS d.getUTCDay() is 3
+PASS d.getUTCDay() is 0
+PASS d.toUTCString().replace('GMT', '+0000') is 'Sun, 01 Jan 1899 00:00:00 +0000'
+PASS Number(new Date(8.64E15)) is 8.64E15
+PASS Number(new Date(-8.64E15)) is -8.64E15
+PASS isNaN(new Date(8.6400001E15)) is true
+PASS isNaN(new Date(-8.6400001E15)) is true
+PASS (new Date('January29,2005')).getDate() is 29
+FAIL (new Date('12/25/1995 ::')).valueOf() should be 819874800000. Was NaN
+End Of Test
+
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Date.html b/LayoutTests/fast/js/kde/Date.html
new file mode 100644 (file)
index 0000000..10ebbb9
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Date.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Error-expected.txt b/LayoutTests/fast/js/kde/Error-expected.txt
new file mode 100644 (file)
index 0000000..58a4550
--- /dev/null
@@ -0,0 +1,8 @@
+PASS Error('msg').message is 'msg'
+PASS (new Error('msg')).message is 'msg'
+PASS (new Error('msg')).name is 'Error'
+PASS Object.prototype.toString.apply(Error()) is '[object Error]'
+PASS Object.prototype.toString.apply(Error) is '[object Function]'
+PASS Object.prototype.toString.apply(EvalError) is '[object Function]'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Error.html b/LayoutTests/fast/js/kde/Error.html
new file mode 100644 (file)
index 0000000..859dcdd
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Error.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/GlobalObject-expected.txt b/LayoutTests/fast/js/kde/GlobalObject-expected.txt
new file mode 100644 (file)
index 0000000..a16e773
--- /dev/null
@@ -0,0 +1,61 @@
+PASS h.charCodeAt(1) is 239
+PASS u.charCodeAt(1) is 4660
+PASS escape(h) is 'a%EFc'
+PASS escape(u) is 'a%u1234c'
+PASS escape(z) is '%00'
+PASS unescape(escape(h)) is h
+PASS unescape(escape(u)) is u
+PASS unescape(escape(z)) is z
+PASS isNaN(NaN) is true
+PASS isNaN('NaN') is true
+PASS isNaN('1') is false
+PASS isFinite(1) is true
+PASS isFinite('1') is true
+PASS isFinite('a') is false
+PASS isNaN(parseInt("Hello", 8)) is true
+PASS isNaN(parseInt("FFF", 10)) is true
+PASS isNaN(parseInt(".5", 10)) is true
+PASS isFinite(Infinity) is false
+PASS isFinite('Infinity') is false
+PASS isNaN(parseInt()) is true
+PASS isNaN(parseInt('')) is true
+PASS isNaN(parseInt(' ')) is true
+PASS isNaN(parseInt('a')) is true
+PASS parseInt(1) is 1
+PASS parseInt(1234567890123456) is 1234567890123456
+PASS parseInt(1.2) is 1
+PASS parseInt(' 2.3') is 2
+PASS parseInt('0x10') is 16
+PASS parseInt('11', 0) is 11
+PASS parseInt('F', 16) is 15
+PASS isNaN(parseInt('10', 40)) is true
+PASS parseInt('3x') is 3
+PASS parseInt('3 x') is 3
+PASS isNaN(parseInt('Infinity')) is true
+PASS parseInt("15") is 15
+PASS parseInt("017") is 15
+PASS parseInt("0xf") is 15
+PASS parseInt("15", 0) is 15
+PASS parseInt("15", 10) is 15
+PASS parseInt("F", 16) is 15
+PASS parseInt("17", 8) is 15
+PASS parseInt("15.99", 10) is 15
+PASS parseInt("FXX123", 16) is 15
+PASS parseInt("1111", 2) is 15
+PASS parseInt("15*3", 10) is 15
+PASS parseInt("0x7", 10) is 0
+PASS parseInt("1x7", 10) is 1
+PASS isNaN(parseFloat()) is true
+PASS isNaN(parseFloat('')) is true
+PASS isNaN(parseFloat(' ')) is true
+PASS isNaN(parseFloat('a')) is true
+PASS parseFloat(1) is 1
+PASS parseFloat(' 2.3') is 2.3
+PASS parseFloat('3.1 x', 3) is 3.1
+PASS parseFloat('3.1x', 3) is 3.1
+PASS isFinite(parseFloat('Infinity')) is false
+PASS delete NaN is false
+PASS delete Infinity is false
+PASS delete undefined is false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/GlobalObject.html b/LayoutTests/fast/js/kde/GlobalObject.html
new file mode 100644 (file)
index 0000000..25b0ec3
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/GlobalObject.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Number-expected.txt b/LayoutTests/fast/js/kde/Number-expected.txt
new file mode 100644 (file)
index 0000000..729dfd5
--- /dev/null
@@ -0,0 +1,25 @@
+PASS Number() is 0
+PASS Number(1) is 1
+PASS Number(1.1) is 1.1
+PASS Number('1.2') is 1.2
+PASS isNaN(Number('a')) is true
+PASS (new Number()).valueOf() is 0
+PASS (new Number(.4)).valueOf() is 0.4
+PASS (new Number('1.')).valueOf() is 1
+PASS isNaN(new Number('a')) is true
+PASS isNaN(Number.NaN) is true
+PASS Number.NEGATIVE_INFINITY is -Infinity
+PASS Number.POSITIVE_INFINITY is Infinity
+PASS (1).toString() is '1'
+PASS typeof (1).toString() is 'string'
+PASS (10).toString(16) is 'a'
+FAIL (8.5).toString(16) should be 8.8. Was 8
+FAIL (-8.5).toString(16) should be -8.8. Was fffffff8
+FAIL Number.NaN.toString(16) should be NaN. Was 0
+FAIL Number.POSITIVE_INFINITY.toString(16) should be Infinity. Was 0
+FAIL Number.NEGATIVE_INFINITY.toString(16) should be -Infinity. Was 0
+FAIL Number.MAX_VALUE.toString(2).length should be 1024. Was 1
+PASS (1).valueOf() is 1
+PASS typeof (1).valueOf() is 'number'
+PASS Number(1234.567).toFixed(0) is "1235"
+
diff --git a/LayoutTests/fast/js/kde/Number.html b/LayoutTests/fast/js/kde/Number.html
new file mode 100644 (file)
index 0000000..a3a3b1c
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Number.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Object-expected.txt b/LayoutTests/fast/js/kde/Object-expected.txt
new file mode 100644 (file)
index 0000000..940b355
--- /dev/null
@@ -0,0 +1,14 @@
+PASS typeof Object() is 'object'
+PASS var o = Object(); o.x = 11; o.x; is 11
+PASS Object(1).valueOf() is 1
+PASS Object(true).valueOf() is true
+PASS Object('s').valueOf() is 's'
+PASS typeof (new Object()) is 'object'
+PASS (new Object(1)).valueOf() is 1
+PASS (new Object(true)).valueOf() is true
+PASS (new Object('s')).valueOf() is 's'
+PASS String(Object()) is '[object Object]'
+PASS Object().toString() is '[object Object]'
+PASS String(Object().valueOf()) is '[object Object]'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Object.html b/LayoutTests/fast/js/kde/Object.html
new file mode 100644 (file)
index 0000000..2868921
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Object.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/Prototype-expected.txt b/LayoutTests/fast/js/kde/Prototype-expected.txt
new file mode 100644 (file)
index 0000000..f39e711
--- /dev/null
@@ -0,0 +1,6 @@
+PASS s.area() is 9
+PASS b.name is 'a book'
+PASS b.author is 'Fred'
+PASS delete Boolean.prototype is false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/Prototype.html b/LayoutTests/fast/js/kde/Prototype.html
new file mode 100644 (file)
index 0000000..73a8175
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/Prototype.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/RegExp-expected.txt b/LayoutTests/fast/js/kde/RegExp-expected.txt
new file mode 100644 (file)
index 0000000..271168c
--- /dev/null
@@ -0,0 +1,87 @@
+PASS (new RegExp()).source is ''
+PASS Boolean(new RegExp()) is true
+PASS isNaN(Number(new RegExp())) is true
+PASS RegExp(/x/).source is 'x'
+PASS RegExp('x', 'g').global is true
+PASS RegExp('x').source is 'x'
+PASS new RegExp('x').source is 'x'
+PASS (/a/).global is false
+PASS typeof (/a/).global is 'boolean'
+PASS rg.global is true
+PASS (/a/).ignoreCase is false
+PASS ri.ignoreCase is true
+PASS (/a/).multiline is false
+PASS rm.multiline is true
+PASS rg.toString() is '/a/g'
+PASS ri.toString() is '/a/i'
+PASS rm.toString() is '/a/m'
+PASS rg.global is true
+PASS ri.ignoreCase is true
+PASS rm.multiline is true
+PASS Boolean(/a/.test) is true
+PASS /(b)c/.exec('abcd').toString() is "bc,b"
+PASS /(b)c/.exec('abcd').length is 2
+PASS /(b)c/.exec('abcd').index is 1
+PASS /(b)c/.exec('abcd').input is 'abcd'
+PASS rs.source is 'foo'
+PASS var r = new RegExp(/x/); r.global=true; r.lastIndex = -1; typeof r.test('a') is 'boolean'
+PASS 'abcdefghi'.match(/(abc)def(ghi)/).toString() is 'abcdefghi,abc,ghi'
+PASS /(abc)def(ghi)/.exec('abcdefghi').toString() is 'abcdefghi,abc,ghi'
+PASS RegExp.$1 is 'abc'
+PASS RegExp.$2 is 'ghi'
+PASS RegExp.$3 is ''
+PASS 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/).toString() is 'abcdefghi,abcdefghi,bcdefgh,cdefg,def,e'
+PASS RegExp.$1 is 'abcdefghi'
+PASS RegExp.$2 is 'bcdefgh'
+PASS RegExp.$3 is 'cdefg'
+PASS RegExp.$4 is 'def'
+PASS RegExp.$5 is 'e'
+PASS RegExp.$6 is ''
+PASS '(100px 200px 150px 15px)'.match(/\((\d+)(px)* (\d+)(px)* (\d+)(px)* (\d+)(px)*\)/).toString() is '(100px 200px 150px 15px),100,px,200,px,150,px,15,px'
+PASS RegExp.$1 is '100'
+PASS RegExp.$3 is '200'
+PASS RegExp.$5 is '150'
+PASS RegExp.$7 is '15'
+PASS ''.match(/((\d+)(px)* (\d+)(px)* (\d+)(px)* (\d+)(px)*)/) is null
+FAIL RegExp.$1 should be . Was 100
+FAIL RegExp.$3 should be . Was 200
+FAIL RegExp.$5 should be . Was 150
+FAIL RegExp.$7 should be . Was 15
+PASS 'faure@kde.org'.match(invalidChars) == null is true
+PASS 'faure-kde@kde.org'.match(invalidChars) == null is false
+PASS 'test1test2'.replace('test','X') is 'X1test2'
+PASS 'test1test2'.replace(/\d/,'X') is 'testXtest2'
+PASS '1test2test3'.replace(/\d/,'') is 'test2test3'
+PASS 'test1test2'.replace(/test/g,'X') is 'X1X2'
+PASS '1test2test3'.replace(/\d/g,'') is 'testtest'
+PASS '1test2test3'.replace(/x/g,'') is '1test2test3'
+PASS 'test1test2'.replace(/(te)(st)/g,'$2$1') is 'stte1stte2'
+PASS 'foo+bar'.replace(/\+/g,'%2B') is 'foo%2Bbar'
+FAIL caught should be true. Was false
+PASS 'foo'.replace(/z?/g,'x') is 'xfxoxox'
+PASS 'test test'.replace(/\s*/g,'') is 'testtest'
+PASS 'abc$%@'.replace(/[^0-9a-z]*/gi,'') is 'abc'
+PASS 'ab'.replace(/[^\d\.]*/gi,'') is ''
+PASS '1ab'.replace(/[^\d\.]*/gi,'') is '1'
+PASS '1test2test3blah'.split(/test/).toString() is '1,2,3blah'
+PASS reg.exec(str).toString() is '98 ,98 '
+PASS reg.lastIndex is 3
+PASS RegExp.$1 is '98 '
+PASS RegExp.$2 is ''
+PASS reg.exec(str).toString() is '76 ,76 '
+PASS reg.lastIndex is 6
+PASS RegExp.$1 is '76 '
+PASS RegExp.$2 is ''
+PASS reg.exec(str) is null
+PASS reg.lastIndex is 0
+PASS myRe=/d(b+)d/g; myArray = myRe.exec('cdbbdbsbz'); myRe.lastIndex is 5
+PASS reg.ignoreCase == true is true
+PASS reg.global === false is true
+PASS reg.multiline === false is true
+PASS reg.test('UGO') is true
+PASS reg.x = 1; reg.x is 1
+PASS var r2 = reg; r2.x = 2; reg.x is 2
+PASS str.match(re).toString() is 'Chapter 3.4.5.1,Chapter 3.4.5.1,.1'
+PASS str.match(/d/gi).toString() is 'D,d'
+PASS /\u0061/.source is '\\u0061'
+
diff --git a/LayoutTests/fast/js/kde/RegExp.html b/LayoutTests/fast/js/kde/RegExp.html
new file mode 100644 (file)
index 0000000..79cf0fd
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/RegExp.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/StringObject-expected.txt b/LayoutTests/fast/js/kde/StringObject-expected.txt
new file mode 100644 (file)
index 0000000..d04e348
--- /dev/null
@@ -0,0 +1,72 @@
+PASS 'abc'.length is 3
+PASS (new String('abcd')).length is 4
+PASS String('abcde').length is 5
+PASS 'abc'.charAt(0) is 'a'
+PASS 'abc'.charAt(1) is 'b'
+PASS 'abc'.charAt(-1) is ''
+PASS 'abc'.charAt(99) is ''
+PASS 'abc'.charAt() is 'a'
+PASS 'ab'.indexOf('a') is 0
+PASS 'ab'.indexOf('b') is 1
+PASS 'ab'.indexOf('x') is -1
+PASS 'ab'.indexOf('') is 0
+PASS ''.indexOf('') is 0
+PASS 'ab'.indexOf('a', -1) is 0
+PASS 'ab'.indexOf('b', 1) is 1
+PASS 'ab'.indexOf('a', 1) is -1
+PASS ' '.indexOf('', 1) is 1
+PASS String('abc').search(/b/) is 1
+PASS String('xyz').search(/b/) is -1
+PASS String('abcb').match(/b/) + '' is 'b'
+PASS typeof String('abc').match(/b/) is 'object'
+PASS 'xyz'.match(/b/) is null
+PASS 'xyz'.match(/b/g) is null
+PASS String('aabab'.match(/ab/g)) is 'ab,ab'
+PASS String('aabab'.match(/(a)(b)/)) is 'ab,a,b'
+PASS String('aabab'.match(/(a)(b)/g)) is 'ab,ab'
+PASS String('abc'.match(/./g)) is 'a,b,c'
+PASS String('abc'.match(/.*/g)) is 'abc,'
+PASS var reg = /ab/g; 'aabab'.match(reg); reg.lastIndex is 0
+PASS var reg = /ab/g; 'aabab'.match(reg).length is 2
+PASS var reg = /ab/g; 'xxx'.match(reg); reg.lastIndex is 0
+PASS var reg = /ab/g; 'xxx'.match(reg) is null
+PASS myRe=/d(b+)d/g; 'cdbbdbsbz'.match(myRe)[0] is 'dbbd'
+PASS 'abcd'.replace(/b./, 'xy') is 'axyd'
+PASS 'abcd'.replace('bc', 'x') is 'axd'
+PASS 'abcd'.replace('x', 'y') is 'abcd'
+PASS 'abcd'.replace(/(ab)(cd)/,'$2$1') is 'cdab'
+PASS 'abcd'.replace(/(ab)(cd)/,'$2$1$') is 'cdab$'
+PASS 'BEGINabcEND'.replace(/abc/,'x$') is 'BEGINx$END'
+PASS f2c('The value is 212F') is 'The value is 100C'
+PASS f2c_str is '212F'
+PASS f2c_p1 is '212'
+PASS f2c_offset is 13
+PASS f2c_s is 'The value is 212F'
+PASS 'axb'.split('x').length is 2
+PASS 'axb'.split('x')[0] is 'a'
+PASS 'axb'.split('x')[1] is 'b'
+PASS String('abc'.split('')) is 'a,b,c'
+PASS String('abc'.split(new RegExp())) is 'a,b,c'
+PASS ''.split('').length is 0
+PASS 'axb'.split('x', 0).length is 0
+PASS 'axb'.split('x', 0)[0] is undefined
+PASS 'axb'.split('x', 1).length is 1
+PASS 'axb'.split('x', 99).length is 2
+PASS 'axb'.split('y') + '' is 'axb'
+PASS 'axb'.split('y').length is 1
+PASS ''.split('x') + '' is ''
+PASS 'abc'.split() + '' is 'abc'
+PASS 'axxb'.split(/x/) + '' is 'a,,b'
+PASS 'axxb'.split(/x+/) + '' is 'a,b'
+PASS 'axxb'.split(/x*/) + '' is 'a,b'
+PASS 'abcdef'.slice(2, 5) is 'cde'
+PASS 'abcdefghijklmnopqrstuvwxyz1234567890'.slice(-32, -6) is 'efghijklmnopqrstuvwxyz1234'
+PASS 'abC1'.toUpperCase() is 'ABC1'
+PASS 'AbC2'.toLowerCase() is 'abc2'
+PASS 'abc'[0] is 'a'
+PASS 'abc'[-1] is undefined.
+PASS 'abc'[10] is undefined.
+FAIL 'abc'[10] should be x. Was undefined
+PASS bar is html
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/StringObject.html b/LayoutTests/fast/js/kde/StringObject.html
new file mode 100644 (file)
index 0000000..573008c
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/StringObject.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/assignments-expected.txt b/LayoutTests/fast/js/kde/assignments-expected.txt
new file mode 100644 (file)
index 0000000..523c273
--- /dev/null
@@ -0,0 +1,11 @@
+PASS var i = 1; i is 1
+PASS j = k = 2 is 2
+PASS var i; i is undefined.
+PASS var i = 1; i <<= 2 is 4
+PASS var i = 8; i >>= 1 is 4
+PASS var i = 1; i >>= 2 is 0
+PASS var i = -8; i >>= 24 is -1
+PASS var i = 8; i >>>= 2 is 2
+PASS var i = -8; i >>>= 24 is 255
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/assignments.html b/LayoutTests/fast/js/kde/assignments.html
new file mode 100644 (file)
index 0000000..c63e95f
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/assignments.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/cast-expected.txt b/LayoutTests/fast/js/kde/cast-expected.txt
new file mode 100644 (file)
index 0000000..95e04a2
--- /dev/null
@@ -0,0 +1,6 @@
+PASS Boolean(1) === true is true
+PASS var s = String; s(1) === '1' is true
+PASS n = Number; n(true) === 1 is true
+PASS String(Array('a', 'b'     )) is 'a,b'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/cast.html b/LayoutTests/fast/js/kde/cast.html
new file mode 100644 (file)
index 0000000..f790d86
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/cast.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/comment-1-expected.txt b/LayoutTests/fast/js/kde/comment-1-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/comment-1.html b/LayoutTests/fast/js/kde/comment-1.html
new file mode 100644 (file)
index 0000000..8641b7b
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/comment-1.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/comment-2-expected.txt b/LayoutTests/fast/js/kde/comment-2-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/comment-2.html b/LayoutTests/fast/js/kde/comment-2.html
new file mode 100644 (file)
index 0000000..9d796cd
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/comment-2.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/completion-expected.txt b/LayoutTests/fast/js/kde/completion-expected.txt
new file mode 100644 (file)
index 0000000..f84a665
--- /dev/null
@@ -0,0 +1,4 @@
+PASS foo(), i is 2
+PASS caught is true
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/completion.html b/LayoutTests/fast/js/kde/completion.html
new file mode 100644 (file)
index 0000000..9baeb4a
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/completion.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/conditional-expected.txt b/LayoutTests/fast/js/kde/conditional-expected.txt
new file mode 100644 (file)
index 0000000..bc0b4c8
--- /dev/null
@@ -0,0 +1,8 @@
+PASS true ? 1 : 2 is 1
+PASS false ? 1 : 2 is 2
+PASS 'abc' ? 1 : 2 is 1
+PASS null ? 1 : 2 is 2
+PASS undefined ? 1 : 2 is 2
+PASS /*var a=1;if (undefined) a = 2;*/ a is 1
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/conditional.html b/LayoutTests/fast/js/kde/conditional.html
new file mode 100644 (file)
index 0000000..ac44ef2
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/conditional.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/const-expected.txt b/LayoutTests/fast/js/kde/const-expected.txt
new file mode 100644 (file)
index 0000000..8ed88e8
--- /dev/null
@@ -0,0 +1,5 @@
+PASS c is 11
+PASS c is 11
+PASS v is 1
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/const.html b/LayoutTests/fast/js/kde/const.html
new file mode 100644 (file)
index 0000000..5ce30b2
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/const.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/constructor_length-expected.txt b/LayoutTests/fast/js/kde/constructor_length-expected.txt
new file mode 100644 (file)
index 0000000..6ea848f
--- /dev/null
@@ -0,0 +1,17 @@
+PASS Object.length is 1
+PASS Function.length is 1
+PASS Array.length is 1
+PASS String.length is 1
+PASS Boolean.length is 1
+PASS Number.length is 1
+PASS Date.length is 7
+PASS RegExp.length is 2
+PASS Error.length is 1
+PASS EvalError.length is 1
+PASS RangeError.length is 1
+PASS ReferenceError.length is 1
+PASS SyntaxError.length is 1
+PASS TypeError.length is 1
+PASS URIError.length is 1
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/constructor_length.html b/LayoutTests/fast/js/kde/constructor_length.html
new file mode 100644 (file)
index 0000000..81b9f32
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/constructor_length.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/crash-1-expected.txt b/LayoutTests/fast/js/kde/crash-1-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/crash-1.html b/LayoutTests/fast/js/kde/crash-1.html
new file mode 100644 (file)
index 0000000..55f46c6
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/crash-1.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/crash-2-expected.txt b/LayoutTests/fast/js/kde/crash-2-expected.txt
new file mode 100644 (file)
index 0000000..bb22f44
--- /dev/null
@@ -0,0 +1,4 @@
+OK. Caught an exception
+
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/crash-2.html b/LayoutTests/fast/js/kde/crash-2.html
new file mode 100644 (file)
index 0000000..6e926cb
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/crash-2.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/delete-expected.txt b/LayoutTests/fast/js/kde/delete-expected.txt
new file mode 100644 (file)
index 0000000..d2b6a19
--- /dev/null
@@ -0,0 +1,5 @@
+PASS a = 1; delete a; is true
+PASS delete nonexistant; is true
+PASS delete NaN is false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/delete.html b/LayoutTests/fast/js/kde/delete.html
new file mode 100644 (file)
index 0000000..8a2bb62
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/delete.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/empty-expected.txt b/LayoutTests/fast/js/kde/empty-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/empty.html b/LayoutTests/fast/js/kde/empty.html
new file mode 100644 (file)
index 0000000..0889521
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/empty.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/encode_decode_uri-expected.txt b/LayoutTests/fast/js/kde/encode_decode_uri-expected.txt
new file mode 100644 (file)
index 0000000..fa792f9
--- /dev/null
@@ -0,0 +1,4 @@
+FAIL checkWithFunctions(encodeURI,decodeURI) should be true. Was false
+FAIL checkWithFunctions(encodeURIComponent,decodeURIComponent) should be true. Was false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/encode_decode_uri.html b/LayoutTests/fast/js/kde/encode_decode_uri.html
new file mode 100644 (file)
index 0000000..77bee12
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/encode_decode_uri.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/eval-expected.txt b/LayoutTests/fast/js/kde/eval-expected.txt
new file mode 100644 (file)
index 0000000..2f30efc
--- /dev/null
@@ -0,0 +1,8 @@
+PASS eval.length is 1
+PASS eval('this') is this
+PASS bx is 99
+PASS cx is 99
+PASS Skipping test for deprecated Object.prototype.eval()
+PASS lotto() is 0
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/eval.html b/LayoutTests/fast/js/kde/eval.html
new file mode 100644 (file)
index 0000000..c398d4a
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/eval.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/evil-n-expected.txt b/LayoutTests/fast/js/kde/evil-n-expected.txt
new file mode 100644 (file)
index 0000000..d078868
--- /dev/null
@@ -0,0 +1,4 @@
+FAIL (new Error()).message should be undefined. Was Unknown error
+PASS ''.split(/.*/).length is 0
+FAIL window.successfullyParsed should be undefined. Was true
+
diff --git a/LayoutTests/fast/js/kde/evil-n.html b/LayoutTests/fast/js/kde/evil-n.html
new file mode 100644 (file)
index 0000000..7a6c7a2
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/evil-n.js"></script>
+<script>
+shouldBeUndefined("window.successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/exception_propagation-expected.txt b/LayoutTests/fast/js/kde/exception_propagation-expected.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/LayoutTests/fast/js/kde/exception_propagation.html b/LayoutTests/fast/js/kde/exception_propagation.html
new file mode 100644 (file)
index 0000000..b0d0464
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/exception_propagation.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/exceptions-expected.txt b/LayoutTests/fast/js/kde/exceptions-expected.txt
new file mode 100644 (file)
index 0000000..30388ae
--- /dev/null
@@ -0,0 +1,21 @@
+Except a lot of errors. They should all be caught and lead to PASS
+
+testing throw() .......... PASS
+
+testing throw() .......... PASS
+
+ReferenceError .......... PASS
+
+error propagation in functions .......... PASS
+
+catch
+
+finally
+
+Math() error .......... PASS
+
+Abort while() on error .......... PASS
+
+undefined .......... FAIL
+
+
diff --git a/LayoutTests/fast/js/kde/exceptions.html b/LayoutTests/fast/js/kde/exceptions.html
new file mode 100644 (file)
index 0000000..9782543
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/exceptions.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/function-expected.txt b/LayoutTests/fast/js/kde/function-expected.txt
new file mode 100644 (file)
index 0000000..a42e591
--- /dev/null
@@ -0,0 +1,39 @@
+PASS empty1() is undefined
+PASS empty2() is undefined
+PASS obj.func(11) is 66
+PASS c.x is 11
+PASS f('bbbbb') is 'bbbbb'
+PASS foo() is '|'
+PASS foo('bar') is '|bar|'
+PASS foo('bar', 'x') is '|bar|x|'
+PASS foo2(7) is 0
+PASS foo3(0, 99) is 2
+PASS foo3(1, 99).length is 2
+PASS nest0(2,3) is 36
+PASS (new Function('return 11;'))() is 11
+PASS (new Function('', 'return 22;'))() is 22
+PASS (new Function('a', 'b', 'return a*b;'))(11, 3) is 33
+PASS (new Function(' a ', ' b ', 'return a*b;'))(11, 4) is 44
+PASS (new Function(' a,b ', ' c ', 'return a*b;'))(11, 5) is 55
+PASS (new Function(' a,b ', ' c3 ', 'return a*b;'))(11, 6) is 66
+PASS funcp3.length is 3
+PASS (function(a, b, c, d) { }).length is 4
+PASS (new Function('a', 'b', '')).length is 2
+PASS f4(4) is 24
+PASS f5(11) is 11
+PASS f5.arguments is null
+PASS arr[0] is 99
+PASS arr[0] is 99
+PASS typeof orgFuncClone is 'function'
+PASS orgFuncClone('world') is 'Hello world'
+PASS groupClone(1, 2) is 9
+FAIL String(Math.sin) should be function sin() { [native code] } . Was (Internal Function)
+PASS shadow() is 2
+PASS nestedret is 'outer nest'
+PASS not_nestedret is 'global nest'
+PASS sample.prototype.prototype is undefined.
+PASS sample.prototype.constructor == sample is true
+PASS caught is true
+PASS functionWithVarOverride(1) is 2
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/function.html b/LayoutTests/fast/js/kde/function.html
new file mode 100644 (file)
index 0000000..2d79577
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/function.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/function_arguments-expected.txt b/LayoutTests/fast/js/kde/function_arguments-expected.txt
new file mode 100644 (file)
index 0000000..4ab3be8
--- /dev/null
@@ -0,0 +1,23 @@
+PASS mf.arguments is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments[0] is expected[expno++]
+PASS mf.arguments is expected[expno++]
+PASS ReadOnlyOK is true
+PASS DontDeleteOK is true
+PASS DontEnumOK is true
+PASS arg0 is 1
+PASS arg1 is 2
+PASS arg2 is 3
+PASS arglength is 3
+PASS newarg0 is 1
+PASS newarg1 is 2
+PASS newarg2 is 999
+PASS newx is 888
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/function_arguments.html b/LayoutTests/fast/js/kde/function_arguments.html
new file mode 100644 (file)
index 0000000..0969b73
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/function_arguments.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/function_constructor-expected.txt b/LayoutTests/fast/js/kde/function_constructor-expected.txt
new file mode 100644 (file)
index 0000000..81d96b8
--- /dev/null
@@ -0,0 +1,8 @@
+PASS myfunc.prototype.constructor.__proto__ == Function.prototype is true
+PASS myfunc.prototype.constructor.__proto__.__proto__ == Object.prototype is true
+PASS myfunc.prototype.constructor == myfunc is true
+PASS Function.prototype.constructor == Function is true
+PASS myfunc.prototype.toString == Object.prototype.toString is true
+PASS myfunc.toString == Function.prototype.toString is true
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/function_constructor.html b/LayoutTests/fast/js/kde/function_constructor.html
new file mode 100644 (file)
index 0000000..84bd639
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/function_constructor.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/function_length-expected.txt b/LayoutTests/fast/js/kde/function_length-expected.txt
new file mode 100644 (file)
index 0000000..0f1a09c
--- /dev/null
@@ -0,0 +1,124 @@
+PASS Array.prototype.toString.length is 0
+PASS Array.prototype.toLocaleString.length is 0
+FAIL Array.prototype.concat.length should be 0. Was 1
+PASS Array.prototype.join.length is 1
+PASS Array.prototype.pop.length is 0
+PASS Array.prototype.push.length is 1
+PASS Array.prototype.reverse.length is 0
+PASS Array.prototype.shift.length is 0
+PASS Array.prototype.slice.length is 2
+PASS Array.prototype.sort.length is 1
+PASS Array.prototype.splice.length is 2
+PASS Array.prototype.unshift.length is 1
+PASS Boolean.prototype.toString.length is 0
+PASS Boolean.prototype.valueOf.length is 0
+PASS Date.prototype.toString.length is 0
+PASS Date.prototype.toUTCString.length is 0
+PASS Date.prototype.toDateString.length is 0
+PASS Date.prototype.toTimeString.length is 0
+PASS Date.prototype.toLocaleString.length is 0
+PASS Date.prototype.toLocaleDateString.length is 0
+PASS Date.prototype.toLocaleTimeString.length is 0
+PASS Date.prototype.valueOf.length is 0
+PASS Date.prototype.getTime.length is 0
+PASS Date.prototype.getFullYear.length is 0
+PASS Date.prototype.getUTCFullYear.length is 0
+PASS Date.prototype.toGMTString.length is 0
+PASS Date.prototype.getMonth.length is 0
+PASS Date.prototype.getUTCMonth.length is 0
+PASS Date.prototype.getDate.length is 0
+PASS Date.prototype.getUTCDate.length is 0
+PASS Date.prototype.getDay.length is 0
+PASS Date.prototype.getUTCDay.length is 0
+PASS Date.prototype.getHours.length is 0
+PASS Date.prototype.getUTCHours.length is 0
+PASS Date.prototype.getMinutes.length is 0
+PASS Date.prototype.getUTCMinutes.length is 0
+PASS Date.prototype.getSeconds.length is 0
+PASS Date.prototype.getUTCSeconds.length is 0
+PASS Date.prototype.getMilliseconds.length is 0
+PASS Date.prototype.getUTCMilliseconds.length is 0
+PASS Date.prototype.getTimezoneOffset.length is 0
+PASS Date.prototype.setTime.length is 1
+PASS Date.prototype.setMilliseconds.length is 1
+PASS Date.prototype.setUTCMilliseconds.length is 1
+PASS Date.prototype.setSeconds.length is 2
+PASS Date.prototype.setUTCSeconds.length is 2
+PASS Date.prototype.setMinutes.length is 3
+PASS Date.prototype.setUTCMinutes.length is 3
+PASS Date.prototype.setHours.length is 4
+PASS Date.prototype.setUTCHours.length is 4
+PASS Date.prototype.setDate.length is 1
+PASS Date.prototype.setUTCDate.length is 1
+PASS Date.prototype.setMonth.length is 2
+PASS Date.prototype.setUTCMonth.length is 2
+PASS Date.prototype.setFullYear.length is 3
+PASS Date.prototype.setUTCFullYear.length is 3
+PASS Date.prototype.setYear.length is 1
+PASS Date.prototype.getYear.length is 0
+PASS Date.prototype.toGMTString.length is 0
+PASS Error.prototype.toString.length is 0
+PASS eval.length is 1
+PASS parseInt.length is 2
+PASS parseFloat.length is 1
+PASS isNaN.length is 1
+PASS isFinite.length is 1
+PASS escape.length is 1
+PASS unescape.length is 1
+PASS Math.abs.length is 1
+PASS Math.acos.length is 1
+PASS Math.asin.length is 1
+PASS Math.atan.length is 1
+PASS Math.atan2.length is 2
+PASS Math.ceil.length is 1
+PASS Math.cos.length is 1
+PASS Math.exp.length is 1
+PASS Math.floor.length is 1
+PASS Math.log.length is 1
+PASS Math.max.length is 2
+PASS Math.min.length is 2
+PASS Math.pow.length is 2
+PASS Math.random.length is 0
+PASS Math.round.length is 1
+PASS Math.sin.length is 1
+PASS Math.sqrt.length is 1
+PASS Math.tan.length is 1
+PASS Object.prototype.toString.length is 0
+PASS Object.prototype.valueOf.length is 0
+PASS RegExp.prototype.exec.length is 0
+PASS RegExp.prototype.test.length is 0
+PASS RegExp.prototype.toString.length is 0
+PASS String.fromCharCode.length is 1
+PASS String.prototype.toString.length is 0
+PASS String.prototype.valueOf.length is 0
+PASS String.prototype.charAt.length is 1
+PASS String.prototype.charCodeAt.length is 1
+PASS String.prototype.indexOf.length is 1
+PASS String.prototype.lastIndexOf.length is 1
+PASS String.prototype.match.length is 1
+PASS String.prototype.replace.length is 2
+PASS String.prototype.search.length is 1
+PASS String.prototype.slice.length is 2
+PASS String.prototype.split.length is 2
+PASS String.prototype.substr.length is 2
+PASS String.prototype.substring.length is 2
+PASS String.prototype.toLowerCase.length is 0
+PASS String.prototype.toUpperCase.length is 0
+PASS String.prototype.big.length is 0
+PASS String.prototype.small.length is 0
+PASS String.prototype.blink.length is 0
+PASS String.prototype.bold.length is 0
+PASS String.prototype.fixed.length is 0
+PASS String.prototype.italics.length is 0
+PASS String.prototype.strike.length is 0
+PASS String.prototype.sub.length is 0
+PASS String.prototype.sup.length is 0
+PASS String.prototype.fontcolor.length is 1
+PASS String.prototype.fontsize.length is 1
+PASS String.prototype.anchor.length is 1
+PASS String.prototype.link.length is 1
+PASS Number.prototype.toString.length is 1
+PASS Number.prototype.valueOf.length is 0
+PASS Number.prototype.toFixed.length is 1
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/function_length.html b/LayoutTests/fast/js/kde/function_length.html
new file mode 100644 (file)
index 0000000..57155dc
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/function_length.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/garbage-n-expected.txt b/LayoutTests/fast/js/kde/garbage-n-expected.txt
new file mode 100644 (file)
index 0000000..a47af02
--- /dev/null
@@ -0,0 +1,2 @@
+PASS window.successfullyParsed is undefined.
+
diff --git a/LayoutTests/fast/js/kde/garbage-n.html b/LayoutTests/fast/js/kde/garbage-n.html
new file mode 100644 (file)
index 0000000..290f653
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/garbage-n.js"></script>
+<script>
+shouldBeUndefined("window.successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/inbuilt_function_proto-expected.txt b/LayoutTests/fast/js/kde/inbuilt_function_proto-expected.txt
new file mode 100644 (file)
index 0000000..3587ef4
--- /dev/null
@@ -0,0 +1,95 @@
+PASS Object.prototype.toString.__proto__ is Function.prototype
+PASS Object.prototype.valueOf.__proto__ is Function.prototype
+PASS Array.prototype.toString.__proto__ is Function.prototype
+PASS Array.prototype.toLocaleString.__proto__ is Function.prototype
+PASS Array.prototype.concat.__proto__ is Function.prototype
+PASS Array.prototype.join.__proto__ is Function.prototype
+PASS Array.prototype.pop.__proto__ is Function.prototype
+PASS Array.prototype.push.__proto__ is Function.prototype
+PASS Array.prototype.reverse.__proto__ is Function.prototype
+PASS Array.prototype.shift.__proto__ is Function.prototype
+PASS Array.prototype.slice.__proto__ is Function.prototype
+PASS Array.prototype.sort.__proto__ is Function.prototype
+PASS Array.prototype.splice.__proto__ is Function.prototype
+PASS Array.prototype.unshift.__proto__ is Function.prototype
+PASS String.prototype.toString.__proto__ is Function.prototype
+PASS String.prototype.valueOf.__proto__ is Function.prototype
+PASS String.prototype.charAt.__proto__ is Function.prototype
+PASS String.prototype.charCodeAt.__proto__ is Function.prototype
+PASS String.prototype.indexOf.__proto__ is Function.prototype
+PASS String.prototype.lastIndexOf.__proto__ is Function.prototype
+PASS String.prototype.match.__proto__ is Function.prototype
+PASS String.prototype.replace.__proto__ is Function.prototype
+PASS String.prototype.search.__proto__ is Function.prototype
+PASS String.prototype.slice.__proto__ is Function.prototype
+PASS String.prototype.split.__proto__ is Function.prototype
+PASS String.prototype.substr.__proto__ is Function.prototype
+PASS String.prototype.substring.__proto__ is Function.prototype
+PASS String.prototype.toLowerCase.__proto__ is Function.prototype
+PASS String.prototype.toUpperCase.__proto__ is Function.prototype
+PASS String.prototype.big.__proto__ is Function.prototype
+PASS String.prototype.small.__proto__ is Function.prototype
+PASS String.prototype.blink.__proto__ is Function.prototype
+PASS String.prototype.bold.__proto__ is Function.prototype
+PASS String.prototype.fixed.__proto__ is Function.prototype
+PASS String.prototype.italics.__proto__ is Function.prototype
+PASS String.prototype.strike.__proto__ is Function.prototype
+PASS String.prototype.sub.__proto__ is Function.prototype
+PASS String.prototype.sup.__proto__ is Function.prototype
+PASS String.prototype.fontcolor.__proto__ is Function.prototype
+PASS String.prototype.fontsize.__proto__ is Function.prototype
+PASS String.prototype.anchor.__proto__ is Function.prototype
+PASS String.prototype.link.__proto__ is Function.prototype
+PASS Boolean.prototype.toString.__proto__ is Function.prototype
+PASS Boolean.prototype.valueOf.__proto__ is Function.prototype
+PASS Date.prototype.toString.__proto__ is Function.prototype
+PASS Date.prototype.toUTCString.__proto__ is Function.prototype
+PASS Date.prototype.toDateString.__proto__ is Function.prototype
+PASS Date.prototype.toTimeString.__proto__ is Function.prototype
+PASS Date.prototype.toLocaleString.__proto__ is Function.prototype
+PASS Date.prototype.toLocaleDateString.__proto__ is Function.prototype
+PASS Date.prototype.toLocaleTimeString.__proto__ is Function.prototype
+PASS Date.prototype.valueOf.__proto__ is Function.prototype
+PASS Date.prototype.getTime.__proto__ is Function.prototype
+PASS Date.prototype.getFullYear.__proto__ is Function.prototype
+PASS Date.prototype.getUTCFullYear.__proto__ is Function.prototype
+PASS Date.prototype.toGMTString.__proto__ is Function.prototype
+PASS Date.prototype.getMonth.__proto__ is Function.prototype
+PASS Date.prototype.getUTCMonth.__proto__ is Function.prototype
+PASS Date.prototype.getDate.__proto__ is Function.prototype
+PASS Date.prototype.getUTCDate.__proto__ is Function.prototype
+PASS Date.prototype.getDay.__proto__ is Function.prototype
+PASS Date.prototype.getUTCDay.__proto__ is Function.prototype
+PASS Date.prototype.getHours.__proto__ is Function.prototype
+PASS Date.prototype.getUTCHours.__proto__ is Function.prototype
+PASS Date.prototype.getMinutes.__proto__ is Function.prototype
+PASS Date.prototype.getUTCMinutes.__proto__ is Function.prototype
+PASS Date.prototype.getSeconds.__proto__ is Function.prototype
+PASS Date.prototype.getUTCSeconds.__proto__ is Function.prototype
+PASS Date.prototype.getMilliseconds.__proto__ is Function.prototype
+PASS Date.prototype.getUTCMilliseconds.__proto__ is Function.prototype
+PASS Date.prototype.getTimezoneOffset.__proto__ is Function.prototype
+PASS Date.prototype.setTime.__proto__ is Function.prototype
+PASS Date.prototype.setMilliseconds.__proto__ is Function.prototype
+PASS Date.prototype.setUTCMilliseconds.__proto__ is Function.prototype
+PASS Date.prototype.setSeconds.__proto__ is Function.prototype
+PASS Date.prototype.setUTCSeconds.__proto__ is Function.prototype
+PASS Date.prototype.setMinutes.__proto__ is Function.prototype
+PASS Date.prototype.setUTCMinutes.__proto__ is Function.prototype
+PASS Date.prototype.setHours.__proto__ is Function.prototype
+PASS Date.prototype.setUTCHours.__proto__ is Function.prototype
+PASS Date.prototype.setDate.__proto__ is Function.prototype
+PASS Date.prototype.setUTCDate.__proto__ is Function.prototype
+PASS Date.prototype.setMonth.__proto__ is Function.prototype
+PASS Date.prototype.setUTCMonth.__proto__ is Function.prototype
+PASS Date.prototype.setFullYear.__proto__ is Function.prototype
+PASS Date.prototype.setUTCFullYear.__proto__ is Function.prototype
+PASS Date.prototype.setYear.__proto__ is Function.prototype
+PASS Date.prototype.getYear.__proto__ is Function.prototype
+PASS Date.prototype.toGMTString.__proto__ is Function.prototype
+PASS RegExp.prototype.exec.__proto__ is Function.prototype
+PASS RegExp.prototype.test.__proto__ is Function.prototype
+PASS RegExp.prototype.toString.__proto__ is Function.prototype
+PASS Error.prototype.toString.__proto__ is Function.prototype
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/inbuilt_function_proto.html b/LayoutTests/fast/js/kde/inbuilt_function_proto.html
new file mode 100644 (file)
index 0000000..8178423
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/inbuilt_function_proto.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/inbuilt_function_tostring-expected.txt b/LayoutTests/fast/js/kde/inbuilt_function_tostring-expected.txt
new file mode 100644 (file)
index 0000000..174fc75
--- /dev/null
@@ -0,0 +1,135 @@
+FAIL StripSpaces(eval.toString()) should be functioneval(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(parseInt.toString()) should be functionparseInt(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(parseFloat.toString()) should be functionparseFloat(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(isNaN.toString()) should be functionisNaN(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(isFinite.toString()) should be functionisFinite(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(escape.toString()) should be functionescape(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(unescape.toString()) should be functionunescape(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(kjsprint.toString()) should be functionkjsprint(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.toLocaleString.toString()) should be functiontoLocaleString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.valueOf.toString()) should be functionvalueOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.hasOwnProperty.toString()) should be functionhasOwnProperty(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.isPrototypeOf.toString()) should be functionisPrototypeOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Object.prototype.propertyIsEnumerable.toString()) should be functionpropertyIsEnumerable(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Function.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Function.prototype.apply.toString()) should be functionapply(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Function.prototype.call.toString()) should be functioncall(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.toLocaleString.toString()) should be functiontoLocaleString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.concat.toString()) should be functionconcat(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.join.toString()) should be functionjoin(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.pop.toString()) should be functionpop(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.push.toString()) should be functionpush(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.reverse.toString()) should be functionreverse(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.shift.toString()) should be functionshift(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.slice.toString()) should be functionslice(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.sort.toString()) should be functionsort(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.splice.toString()) should be functionsplice(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Array.prototype.unshift.toString()) should be functionunshift(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.valueOf.toString()) should be functionvalueOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.charAt.toString()) should be functioncharAt(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.charCodeAt.toString()) should be functioncharCodeAt(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.concat.toString()) should be functionconcat(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.indexOf.toString()) should be functionindexOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.lastIndexOf.toString()) should be functionlastIndexOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.match.toString()) should be functionmatch(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.replace.toString()) should be functionreplace(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.search.toString()) should be functionsearch(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.slice.toString()) should be functionslice(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.split.toString()) should be functionsplit(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.substr.toString()) should be functionsubstr(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.substring.toString()) should be functionsubstring(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.toLowerCase.toString()) should be functiontoLowerCase(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.toUpperCase.toString()) should be functiontoUpperCase(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.big.toString()) should be functionbig(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.small.toString()) should be functionsmall(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.blink.toString()) should be functionblink(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.bold.toString()) should be functionbold(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.fixed.toString()) should be functionfixed(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.italics.toString()) should be functionitalics(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.strike.toString()) should be functionstrike(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.sub.toString()) should be functionsub(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.sup.toString()) should be functionsup(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.fontcolor.toString()) should be functionfontcolor(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.fontsize.toString()) should be functionfontsize(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.anchor.toString()) should be functionanchor(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(String.prototype.link.toString()) should be functionlink(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Boolean.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Boolean.prototype.valueOf.toString()) should be functionvalueOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.toLocaleString.toString()) should be functiontoLocaleString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.valueOf.toString()) should be functionvalueOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.toFixed.toString()) should be functiontoFixed(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.toExponential.toString()) should be functiontoExponential(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Number.prototype.toPrecision.toString()) should be functiontoPrecision(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.abs.toString()) should be functionabs(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.acos.toString()) should be functionacos(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.asin.toString()) should be functionasin(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.atan.toString()) should be functionatan(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.atan2.toString()) should be functionatan2(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.ceil.toString()) should be functionceil(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.cos.toString()) should be functioncos(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.exp.toString()) should be functionexp(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.floor.toString()) should be functionfloor(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.log.toString()) should be functionlog(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.max.toString()) should be functionmax(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.min.toString()) should be functionmin(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.pow.toString()) should be functionpow(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.random.toString()) should be functionrandom(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.round.toString()) should be functionround(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.sin.toString()) should be functionsin(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.sqrt.toString()) should be functionsqrt(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Math.tan.toString()) should be functiontan(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toUTCString.toString()) should be functiontoUTCString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toDateString.toString()) should be functiontoDateString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toTimeString.toString()) should be functiontoTimeString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toLocaleString.toString()) should be functiontoLocaleString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toLocaleDateString.toString()) should be functiontoLocaleDateString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toLocaleTimeString.toString()) should be functiontoLocaleTimeString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.valueOf.toString()) should be functionvalueOf(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getTime.toString()) should be functiongetTime(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getFullYear.toString()) should be functiongetFullYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCFullYear.toString()) should be functiongetUTCFullYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toGMTString.toString()) should be functiontoGMTString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getMonth.toString()) should be functiongetMonth(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCMonth.toString()) should be functiongetUTCMonth(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getDate.toString()) should be functiongetDate(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCDate.toString()) should be functiongetUTCDate(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getDay.toString()) should be functiongetDay(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCDay.toString()) should be functiongetUTCDay(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getHours.toString()) should be functiongetHours(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCHours.toString()) should be functiongetUTCHours(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getMinutes.toString()) should be functiongetMinutes(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCMinutes.toString()) should be functiongetUTCMinutes(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getSeconds.toString()) should be functiongetSeconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCSeconds.toString()) should be functiongetUTCSeconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getMilliseconds.toString()) should be functiongetMilliseconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getUTCMilliseconds.toString()) should be functiongetUTCMilliseconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getTimezoneOffset.toString()) should be functiongetTimezoneOffset(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setTime.toString()) should be functionsetTime(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setMilliseconds.toString()) should be functionsetMilliseconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCMilliseconds.toString()) should be functionsetUTCMilliseconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setSeconds.toString()) should be functionsetSeconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCSeconds.toString()) should be functionsetUTCSeconds(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setMinutes.toString()) should be functionsetMinutes(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCMinutes.toString()) should be functionsetUTCMinutes(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setHours.toString()) should be functionsetHours(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCHours.toString()) should be functionsetUTCHours(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setDate.toString()) should be functionsetDate(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCDate.toString()) should be functionsetUTCDate(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setMonth.toString()) should be functionsetMonth(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCMonth.toString()) should be functionsetUTCMonth(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setFullYear.toString()) should be functionsetFullYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setUTCFullYear.toString()) should be functionsetUTCFullYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.setYear.toString()) should be functionsetYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.getYear.toString()) should be functiongetYear(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Date.prototype.toGMTString.toString()) should be functiontoGMTString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(RegExp.prototype.exec.toString()) should be functionexec(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(RegExp.prototype.test.toString()) should be functiontest(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(RegExp.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+FAIL StripSpaces(Error.prototype.toString.toString()) should be functiontoString(){[nativecode]}. Was (InternalFunction)
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/inbuilt_function_tostring.html b/LayoutTests/fast/js/kde/inbuilt_function_tostring.html
new file mode 100644 (file)
index 0000000..9623bf5
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/inbuilt_function_tostring.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/iteration-expected.txt b/LayoutTests/fast/js/kde/iteration-expected.txt
new file mode 100644 (file)
index 0000000..445d988
--- /dev/null
@@ -0,0 +1,8 @@
+PASS count is 10
+PASS count is 5
+PASS count is 10
+PASS properties is 'a=11;b=22;'
+PASS list is '[0]=100;[1]=101;'
+PASS list is '123'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/iteration.html b/LayoutTests/fast/js/kde/iteration.html
new file mode 100644 (file)
index 0000000..10c2808
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/iteration.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/j-comment-3-expected.txt b/LayoutTests/fast/js/kde/j-comment-3-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/j-comment-3.html b/LayoutTests/fast/js/kde/j-comment-3.html
new file mode 100644 (file)
index 0000000..3ad018d
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/j-comment-3.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/j-comment-4-expected.txt b/LayoutTests/fast/js/kde/j-comment-4-expected.txt
new file mode 100644 (file)
index 0000000..d4b0a13
--- /dev/null
@@ -0,0 +1,2 @@
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/j-comment-4.html b/LayoutTests/fast/js/kde/j-comment-4.html
new file mode 100644 (file)
index 0000000..291c038
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/j-comment-4.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/literals-expected.txt b/LayoutTests/fast/js/kde/literals-expected.txt
new file mode 100644 (file)
index 0000000..2d47c2b
--- /dev/null
@@ -0,0 +1,10 @@
+PASS x is 1
+PASS 0x0 is 0
+PASS 0xF is 15
+PASS 0xFF is 255
+PASS 01 is 1
+PASS 010 is 8
+PASS 09 is 9
+PASS 019 is 19
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/literals.html b/LayoutTests/fast/js/kde/literals.html
new file mode 100644 (file)
index 0000000..934d381
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/literals.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/math-expected.txt b/LayoutTests/fast/js/kde/math-expected.txt
new file mode 100644 (file)
index 0000000..0a22a89
--- /dev/null
@@ -0,0 +1,61 @@
+PASS isNegativeZero(negativeZero) is true
+PASS isNegativeZero(0) is false
+PASS String()+Math.E is '2.718281828459045'
+PASS String()+Math.LN2 is '0.6931471805599453'
+PASS String()+Math.LN10 is '2.302585092994046'
+PASS String()+Math.LOG2E is '1.4426950408889634'
+PASS String()+Math.LOG10E is '0.43429448190325176'
+PASS String()+Math.PI is '3.141592653589793'
+PASS String()+Math.SQRT1_2 is '0.7071067811865476'
+PASS String()+Math.SQRT2 is '1.4142135623730951'
+PASS String()+Number.NaN is 'NaN'
+PASS String()+Number.NEGATIVE_INFINITY is '-Infinity'
+PASS String()+Number.POSITIVE_INFINITY is 'Infinity'
+PASS Math.abs(-5) is 5
+PASS Math.acos(0) is Math.PI/2
+PASS Math.acos(1) is 0
+PASS Math.ceil(1.1) is 2
+PASS String()+Math.sqrt(2) is String()+Math.SQRT2
+PASS Math.ceil(1.6) is 2
+PASS Math.round(0) is 0
+PASS isNegativeZero(Math.round(0)) is false
+PASS isNegativeZero(Math.round(negativeZero)) is true
+PASS Math.round(0.2) is 0
+PASS isNegativeZero(Math.round(-0.2)) is true
+PASS isNegativeZero(Math.round(-0.5)) is true
+PASS Math.round(1.1) is 1
+PASS Math.round(1.6) is 2
+PASS Math.round(-3.5) is -3
+PASS Math.round(-3.6) is -4
+PASS isNaN(Math.round()) is true
+PASS isNaN(Math.round(NaN)) is true
+PASS Math.round(-Infinity) is -Infinity
+PASS Math.round(Infinity) is Infinity
+PASS Math.round(99999999999999999999.99) is 100000000000000000000
+PASS Math.round(-99999999999999999999.99) is -100000000000000000000
+PASS Math.log(Math.E*Math.E) is 2
+PASS isNaN(Math.log(NaN)) is true
+PASS isNaN(Math.log(-1)) is true
+PASS isFinite(Math.log(0)) is false
+PASS Math.log(1) is 0
+PASS isFinite(Math.log(Infinity)) is false
+PASS isNegativeZero(Math.min(negativeZero, 0)) is true
+PASS isFinite(Math.max()) is false
+PASS Math.max(1) is 1
+PASS Math.max(1, 2, 3) is 3
+PASS isNaN(Math.max(1,NaN,3)) is true
+PASS !isNegativeZero(Math.max(negativeZero, 0)) is true
+PASS list is ''
+PASS delete my.v is true
+PASS my.v is undefined.
+PASS delete Math.PI is false
+PASS my = myfunc, myfunc(4) is 5
+PASS Boolean(Math) is true
+PASS isNaN(Number(Math)); is true
+PASS Math.abs===Math.abs is true
+PASS Math.abs===Math.round is false
+PASS list is 'a,b,'
+PASS list is ''
+PASS list is 'myprop,'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/math.html b/LayoutTests/fast/js/kde/math.html
new file mode 100644 (file)
index 0000000..6cf8944
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/math.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/md5-1-expected.txt b/LayoutTests/fast/js/kde/md5-1-expected.txt
new file mode 100644 (file)
index 0000000..611f819
--- /dev/null
@@ -0,0 +1,3 @@
+PASS MD5('kde') is '186cf28b76f2264e9fea8fcf91cb4f5d'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/md5-1.html b/LayoutTests/fast/js/kde/md5-1.html
new file mode 100644 (file)
index 0000000..aa06a0c
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/md5-1.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/md5-2-expected.txt b/LayoutTests/fast/js/kde/md5-2-expected.txt
new file mode 100644 (file)
index 0000000..21e697f
--- /dev/null
@@ -0,0 +1,3 @@
+PASS hexMD5('kde') is '186cf28b76f2264e9fea8fcf91cb4f5d'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/md5-2.html b/LayoutTests/fast/js/kde/md5-2.html
new file mode 100644 (file)
index 0000000..18c94a8
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/md5-2.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/object_prototype-expected.txt b/LayoutTests/fast/js/kde/object_prototype-expected.txt
new file mode 100644 (file)
index 0000000..44f97b6
--- /dev/null
@@ -0,0 +1,32 @@
+PASS sub.x is 1
+PASS sub.y is 2
+PASS sub.hasOwnProperty('x') is false
+PASS sub.hasOwnProperty('y') is true
+PASS sub.x is 6
+PASS sub.hasOwnProperty('x') is true
+PASS sub.y is undefined
+PASS sub.hasOwnProperty('y') is false
+PASS obj.hasClass1 is true
+PASS obj.hasClass2 is true
+PASS obj.hasClass3 is true
+PASS Class1.prototype.isPrototypeOf(obj) is true
+PASS Class2.prototype.isPrototypeOf(obj) is true
+PASS Class3.prototype.isPrototypeOf(obj) is true
+PASS obj.isPrototypeOf(Class1.prototype) is false
+PASS obj.isPrototypeOf(Class2.prototype) is false
+PASS obj.isPrototypeOf(Class3.prototype) is false
+PASS Class1.prototype.isPrototypeOf(Class2.prototype) is true
+PASS Class2.prototype.isPrototypeOf(Class1.prototype) is false
+PASS Class1.prototype.isPrototypeOf(Class3.prototype) is true
+PASS Class3.prototype.isPrototypeOf(Class1.prototype) is false
+PASS Class2.prototype.isPrototypeOf(Class3.prototype) is true
+PASS Class3.prototype.isPrototypeOf(Class2.prototype) is false
+PASS Class1.prototype.prototype is undefined.
+PASS myfunc.length is 3
+PASS myfunc.someproperty is 4
+PASS myfunc.propertyIsEnumerable('length') is false
+PASS myfunc.propertyIsEnumerable('someproperty') is true
+PASS checkEnumerable(myfunc,'length') is false
+PASS checkEnumerable(myfunc,'someproperty') is true
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/object_prototype.html b/LayoutTests/fast/js/kde/object_prototype.html
new file mode 100644 (file)
index 0000000..5dc1da0
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/object_prototype.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/object_prototype_tostring-expected.txt b/LayoutTests/fast/js/kde/object_prototype_tostring-expected.txt
new file mode 100644 (file)
index 0000000..4b79fdd
--- /dev/null
@@ -0,0 +1,11 @@
+PASS _array.toString() is "[object Array]"
+PASS _string.toString() is "[object String]"
+PASS _boolean.toString() is "[object Boolean]"
+PASS _number.toString() is "[object Number]"
+PASS _object.toString() is "[object Object]"
+PASS _date.toString() is "[object Date]"
+PASS _regexp.toString() is "[object RegExp]"
+PASS _error.toString() is "[object Error]"
+PASS _function.toString() is "[object Function]"
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/object_prototype_tostring.html b/LayoutTests/fast/js/kde/object_prototype_tostring.html
new file mode 100644 (file)
index 0000000..3432d55
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/object_prototype_tostring.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/operators-expected.txt b/LayoutTests/fast/js/kde/operators-expected.txt
new file mode 100644 (file)
index 0000000..9a5c7db
--- /dev/null
@@ -0,0 +1,177 @@
+PASS !undefined is true
+PASS !null is true
+PASS !!true is true
+PASS !false is true
+PASS !!1 is true
+PASS !0 is true
+PASS !!'a' is true
+PASS !'' is true
+PASS var i = 0; ++i; is 1
+PASS var i = 0; ++i; i is 1
+PASS var i = 0; i++; is 0
+PASS var i = 0; i++; i is 1
+PASS var i = true; i++ is 1
+PASS var i = true; i++; i is 2
+PASS var i = 0; --i; is -1
+PASS var i = 0; --i; i is -1
+PASS var i = 0; i--; is 0
+PASS var i = 0; i--; i is -1
+PASS var i = true; i-- is 1
+PASS var i = true; i--; i is 0
+PASS ~0 is -1
+PASS ~1 is -2
+PASS ~Math.pow(2, 33) is -1
+PASS ~(Math.pow(2, 32) + Math.pow(2, 31) + 2) is 2147483645
+PASS ~null is -1
+PASS 3 & 1 is 1
+PASS 2 | true is 3
+PASS '3' ^ 1 is 2
+PASS 3^4&5 is 7
+PASS 2|4^5 is 3
+PASS 1 << 2 is 4
+PASS 8 >> 1 is 4
+PASS 1 >> 2 is 0
+PASS -8 >> 24 is -1
+PASS 8 >>> 2 is 2
+PASS -8 >>> 24 is 255
+PASS (-2200000000 >> 1) << 1 is 2094967296
+PASS 1+2 is 3
+PASS 'a'+'b' is 'ab'
+PASS 'a'+2 is 'a2'
+PASS '2'+'-1' is '2-1'
+PASS true+'a' is 'truea'
+PASS 'a' + null is 'anull'
+PASS true+1 is 2
+PASS false+null is 0
+PASS 1-3 is -2
+PASS isNaN('a'-3) is true
+PASS '3'-'-1' is 4
+PASS '4'-2 is 2
+PASS true-false is 1
+PASS false-1 is -1
+PASS null-true is -1
+PASS 2 * 3 is 6
+PASS true * 3 is 3
+PASS 2 * '3' is 6
+PASS 6 / 4 is 1.5
+PASS '6' / '2' is 3
+PASS isNaN('x' / 1) is true
+PASS isNaN(1 / NaN) is true
+PASS isNaN(Infinity / Infinity) is true
+PASS Infinity / 0 is Infinity
+PASS -Infinity / 0 is -Infinity
+PASS Infinity / 1 is Infinity
+PASS -Infinity / 1 is -Infinity
+PASS 1 / Infinity == +0 is true
+PASS 1 / -Infinity == -0 is true
+PASS isNaN(0/0) is true
+PASS 0 / 1 === 0 is true
+PASS 0 / -1 === -0 is true
+PASS 1 / 0 is Infinity
+PASS -1 / 0 is -Infinity
+PASS 6 % 4 is 2
+PASS '-6' % 4 is -2
+PASS 2==2 is true
+PASS 1==2 is false
+PASS 1<2 is true
+PASS 1<=2 is true
+PASS 2<1 is false
+PASS 2<=1 is false
+PASS 2>1 is true
+PASS 2>=1 is true
+PASS 1>=2 is false
+PASS 1>2 is false
+PASS 'abc' == 'abc' is true
+PASS 'abc' != 'xyz' is true
+PASS true == true is true
+PASS false == false is true
+PASS true != false is true
+PASS 'a' != null is true
+PASS 'a' != undefined is true
+PASS null == null is true
+PASS null == undefined is true
+PASS undefined == undefined is true
+PASS NaN != NaN is true
+PASS true != undefined is true
+PASS true != null is true
+PASS false != undefined is true
+PASS false != null is true
+PASS '0' == 0 is true
+PASS 1 == '1' is true
+PASS NaN != NaN is true
+PASS NaN != 0 is true
+PASS NaN != undefined is true
+PASS true == 1 is true
+PASS true != 2 is true
+PASS 1 == true is true
+PASS false == 0 is true
+PASS 0 == false is true
+PASS 'abc' < 'abx' is true
+PASS 'abc' < 'abcd' is true
+PASS 'abc' < 'abc' is false
+PASS 'abcd' < 'abcd' is false
+PASS 'abx' < 'abc' is false
+PASS 'abc' <= 'abc' is true
+PASS 'abc' <= 'abx' is true
+PASS 'abx' <= 'abc' is false
+PASS 'abcd' <= 'abc' is false
+PASS 'abc' <= 'abcd' is true
+PASS 'abc' > 'abx' is false
+PASS 'abc' > 'abc' is false
+PASS 'abcd' > 'abc' is true
+PASS 'abx' > 'abc' is true
+PASS 'abc' > 'abcd' is false
+PASS 'abc' >= 'abc' is true
+PASS 'abcd' >= 'abc' is true
+PASS 'abx' >= 'abc' is true
+PASS 'abc' >= 'abx' is false
+PASS 'abc' >= 'abx' is false
+PASS 'abc' >= 'abcd' is false
+PASS 'abc' <= 0 is false
+PASS '' <= 0 is true
+PASS ' ' <= 0 is true
+PASS null <= 0 is true
+PASS 0 <= 'abc' is false
+PASS 0 <= '' is true
+PASS 0 <= null is true
+PASS null <= null is true
+PASS 6 < '52' is true
+PASS 6 < '72' is true
+PASS NaN < 0 is false
+PASS NaN <= 0 is false
+PASS NaN > 0 is false
+PASS NaN >= 0 is false
+PASS 0 === false is false
+PASS null === null is true
+PASS NaN === NaN is false
+PASS 0.0 === 0 is true
+PASS 'abc' === 'abc' is true
+PASS 'a' === 'x' is false
+PASS true === true is true
+PASS false === false is true
+PASS true === false is false
+PASS Math === Math is true
+PASS Math === Boolean is false
+PASS Infinity === Infinity is true
+PASS 0 !== 0 is false
+PASS 0 !== 1 is true
+PASS typeof undefined is 'undefined'
+PASS typeof null is 'object'
+PASS typeof true is 'boolean'
+PASS typeof false is 'boolean'
+PASS typeof 1 is 'number'
+PASS typeof 'a' is 'string'
+PASS typeof shouldBe is 'function'
+PASS typeof Number.NaN is 'number'
+PASS 11 && 22 is 22
+PASS null && true is null
+PASS 11 || 22 is 11
+PASS null || 'a' is 'a'
+PASS void 1 is undefined.
+PASS 1 in [1, 2] is true
+PASS 3 in [1, 2] is false
+PASS 'a' in { a:1, b:2 } is true
+PASS (new Boolean()) instanceof Boolean is true
+PASS (new Boolean()) instanceof Number is false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/operators.html b/LayoutTests/fast/js/kde/operators.html
new file mode 100644 (file)
index 0000000..24ca057
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/operators.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/parse-expected.txt b/LayoutTests/fast/js/kde/parse-expected.txt
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/LayoutTests/fast/js/kde/parse.html b/LayoutTests/fast/js/kde/parse.html
new file mode 100644 (file)
index 0000000..d88c17f
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/parse.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/prototype_length-expected.txt b/LayoutTests/fast/js/kde/prototype_length-expected.txt
new file mode 100644 (file)
index 0000000..818a4f2
--- /dev/null
@@ -0,0 +1,20 @@
+PASS Object.prototype.length is undefined
+PASS Function.prototype.length is 0
+PASS Array.prototype.length is 0
+PASS String.prototype.length is 0
+PASS Boolean.prototype.length is undefined
+PASS Number.prototype.length is undefined
+PASS Date.prototype.length is undefined
+PASS RegExp.prototype.length is undefined
+PASS Error.prototype.length is undefined
+PASS Array.prototype.length is 6
+PASS Function.prototype.length is 0
+PASS String.prototype.length is 0
+PASS delete Array.prototype.length is false
+PASS delete Function.prototype.length is false
+PASS delete String.prototype.length is false
+PASS foundArrayPrototypeLength is false
+PASS foundFunctionPrototypeLength is false
+PASS foundStringPrototypeLength is false
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/prototype_length.html b/LayoutTests/fast/js/kde/prototype_length.html
new file mode 100644 (file)
index 0000000..0a0db46
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/prototype_length.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/prototype_proto-expected.txt b/LayoutTests/fast/js/kde/prototype_proto-expected.txt
new file mode 100644 (file)
index 0000000..6d12a44
--- /dev/null
@@ -0,0 +1,11 @@
+PASS Object.prototype.__proto__ == Object.prototype is false
+PASS Function.prototype.__proto__ is Object.prototype
+PASS Array.prototype.__proto__ is Object.prototype
+PASS String.prototype.__proto__ is Object.prototype
+PASS Boolean.prototype.__proto__ is Object.prototype
+PASS Number.prototype.__proto__ is Object.prototype
+PASS Date.prototype.__proto__ is Object.prototype
+PASS RegExp.prototype.__proto__ is Object.prototype
+PASS Error.prototype.__proto__ is Object.prototype
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/prototype_proto.html b/LayoutTests/fast/js/kde/prototype_proto.html
new file mode 100644 (file)
index 0000000..a0de6eb
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/prototype_proto.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/resources/Array.js b/LayoutTests/fast/js/kde/resources/Array.js
new file mode 100644 (file)
index 0000000..fae7e3b
--- /dev/null
@@ -0,0 +1,189 @@
+// 15.4 Array Objects
+// (c) 2001 Harri Porten <porten@kde.org>
+
+shouldBe("Array().length", "0");
+shouldBe("(new Array()).length", "0");
+shouldBe("(new Array(3)).length", "3");
+shouldBe("(new Array(11, 22)).length", "2");
+shouldBe("(new Array(11, 22))[0]", "11");
+shouldBe("Array(11, 22)[1]", "22");
+shouldBeUndefined("(new Array(11, 22))[3]");
+shouldBe("String(new Array(11, 22))", "'11,22'");
+shouldBe("var a = []; a[0] = 33; a[0]", "33");
+shouldBe("var a = []; a[0] = 33; a.length", "1");
+shouldBe("var a = [11, 22]; a.length = 1; String(a);", "'11'");
+shouldBe("var a = [11, 22]; a.length = 1; a.length;", "1");
+
+// range checks
+var caught = false;
+var ename = "";
+try {
+  [].length = -1;
+} catch (e) {
+  // expect Range Error
+  caught = true;
+  ename = e.name;
+}
+
+shouldBeTrue("caught;");
+shouldBe("ename", "'RangeError'");
+
+caught = false;
+ename = "";
+try {
+  new Array(Infinity);
+} catch (e) {
+  // expect Range Error
+  caught = true;
+  ename = e.name;
+}
+shouldBeTrue("caught;");
+shouldBe("ename", "'RangeError'");
+
+shouldBeUndefined("var a = [11, 22]; a.length = 1; a[1];");
+shouldBe("Array().toString()", "''");
+shouldBe("Array(3).toString()", "',,'");
+shouldBe("Array(11, 22).toString()", "'11,22'");
+shouldBe("String(Array(11, 22).concat(33))", "'11,22,33'");
+shouldBe("String(Array(2).concat(33, 44))", "',,33,44'");
+shouldBe("String(Array(2).concat(Array(2)))", "',,,'");
+shouldBe("String(Array(11,22).concat(Array(33,44)))", "'11,22,33,44'");
+shouldBe("String(Array(1,2).concat(3,Array(4,5)))", "'1,2,3,4,5'");
+shouldBe("var a = new Array(1,2,3); delete a[1]; String(a.concat(4))", "'1,,3,4'");
+
+shouldBe("[1,2,3,4].slice(1, 3).toString()", "'2,3'");
+shouldBe("[1,2,3,4].slice(-3, -1).toString()", "'2,3'");
+shouldBe("[1,2].slice(-9, 0).length", "0");
+shouldBe("[1,2].slice(1).toString()", "'2'");
+shouldBe("[1,2].slice().toString()", "'1,2'");
+
+// 2nd set.
+shouldBe("(new Array('a')).length", "1");
+shouldBe("(new Array('a'))[0]", "'a'");
+shouldBeUndefined("(new Array('a'))[1]");
+
+shouldBe("Array('a').length", "1");
+shouldBe("Array('a')[0]", "'a'");
+
+shouldBe("String(Array())", "''");
+shouldBe("String(Array('a','b'))", "'a,b'");
+
+shouldBe("[].length", "0");
+shouldBe("['a'].length", "1");
+shouldBe("['a'][0]", "'a'");
+shouldBe("['a',,'c'][2]", "'c'");
+
+function forInSum(_a) {
+  var s = '';
+  for (i in _a)
+    s += _a[i];
+  return s;
+}
+
+shouldBe("forInSum([])", "''");
+shouldBe("forInSum(Array())", "''");
+shouldBe("forInSum(Array('a'))", "'a'");
+
+var a0 = [];
+shouldBe("forInSum(a0)", "''");
+
+var a1 = [ 'a' ];
+shouldBe("forInSum(a1)", "'a'");
+
+shouldBe("String([3,1,'2'].sort())", "'1,2,3'");
+shouldBe("String([,'x','aa'].sort())", "'aa,x,'"); // don't assume 'x'>undefined !
+
+// sort by length
+function comp(a, b) {
+  var la = String(a).length;
+  var lb = String(b).length;
+  if (la < lb)
+    return -1;
+  else if (la > lb)
+    return 1;
+  else
+    return 0;
+}
+shouldBe("var a = ['aa', 'b', 'cccc', 'ddd']; String(a.sort(comp))", "'b,aa,ddd,cccc'");
+
+// +/-Infinity as function return value
+shouldBe("[0, Infinity].sort(function(a, b) { return a - b }).toString()",
+        "'0,Infinity'");
+
+// Array.unshift()
+shouldBe("[].unshift('a')", "1");
+shouldBe("['c'].unshift('a', 'b')", "3");
+shouldBe("var a = []; a.unshift('a'); String(a)", "'a'");
+shouldBe("var a = ['c']; a.unshift('a', 'b'); String(a)", "'a,b,c'");
+
+// Array.splice()
+shouldBe("String(['a', 'b', 'c'].splice(1, 2, 'x', 'y'))", "'b,c'");
+
+var maxint = Math.pow(2,32)-1;
+var arr = new Array();
+
+// 2^32 should not be treated as a valid array index, i.e.
+// setting the property on the array should not result in
+// the length being modified
+
+arr.length = 40;
+arr[maxint] = "test";
+shouldBe("arr.length","40");
+shouldBe("arr[maxint]","\"test\"");
+delete arr[maxint];
+shouldBe("arr.length","40");
+shouldBe("arr[maxint]","undefined");
+arr[maxint-1] = "test2";
+shouldBe("arr.length","maxint");
+shouldBe("arr[maxint-1]","\"test2\"");
+
+arr = new Array('a','b','c');
+arr.__proto__ = { 1: 'x' };
+var propnames = new Array();
+for (i in arr)
+  propnames.push(i);
+propnames.sort();
+shouldBe("propnames.length","3");
+shouldBe("propnames[0]","'0'");
+shouldBe("propnames[1]","'1'");
+shouldBe("propnames[2]","'2'");
+
+function testToString() {
+  // backup
+  var backupNumberToString = Number.prototype.toString;
+  var backupNumberToLocaleString = Number.prototype.toLocaleString;
+  var backupRegExpToString = RegExp.prototype.toString;
+  var backupRegExpToLocaleString = RegExp.prototype.toLocaleString;
+
+  // change functions
+  Number.prototype.toString = function() { return "toString"; }
+  Number.prototype.toLocaleString = function() { return "toLocaleString"; }
+  RegExp.prototype.toString = function() { return "toString2"; }
+  RegExp.prototype.toLocaleString = function() { return "toLocaleString2"; }
+
+  // the tests
+  shouldBe("[1].toString()", "'1'");
+  shouldBe("[1].toLocaleString()", "'toLocaleString'");
+  Number.prototype.toLocaleString = "invalid";
+  shouldBe("[1].toLocaleString()", "'1'");
+  shouldBe("[/r/].toString()", "'toString2'");
+  shouldBe("[/r/].toLocaleString()", "'toLocaleString2'");
+  RegExp.prototype.toLocaleString = "invalid";
+  shouldBe("[/r/].toLocaleString()", "'toString2'");
+
+  var caught = false;
+  try {
+    [{ toString : 0 }].toString();
+  } catch (e) {
+    caught = true;
+  }
+  shouldBeTrue("caught");
+
+  // restore
+  Number.prototype.toString = backupNumberToString;
+  Number.prototype.toLocaleString = backupNumberToLocaleString;
+  RegExp.prototype.toString = backupRegExpToString;
+  RegExp.prototype.toLocaleString = backupRegExpToLocaleString;
+}
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/Boolean.js b/LayoutTests/fast/js/kde/resources/Boolean.js
new file mode 100644 (file)
index 0000000..53c149e
--- /dev/null
@@ -0,0 +1,9 @@
+shouldBe("Boolean()", "false");
+shouldBe("Boolean(true)", "true");
+shouldBe("Boolean(false)", "false");
+shouldBe("(new Boolean(true)).valueOf()", "true");
+shouldBe("(new Boolean(false)).valueOf()", "false");
+shouldBe("(new Boolean(Boolean(true))).valueOf()", "true");
+shouldBeTrue("true.valueOf() === true");
+shouldBeTrue("false.toString() === 'false'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/Date.js b/LayoutTests/fast/js/kde/resources/Date.js
new file mode 100644 (file)
index 0000000..300c3c7
--- /dev/null
@@ -0,0 +1,302 @@
+debug("Start Of Test");
+
+shouldBeTrue("isNaN(Date.prototype.valueOf())");
+
+var d = new Date(1017492323515); // Sat Mar 30 13:45:23 GMT+0100 (CET) 2002
+// shouldBe("d.getUTCHours()", "12");
+// shouldBe("d.getHours()", "12");
+shouldBe("d.getMinutes()", "45");
+shouldBe("d.getUTCMinutes()", "45");
+shouldBe("d.getDay()", "6");
+shouldBe("d.getMonth()", "2");
+shouldBe("d.getFullYear()", "2002");
+
+// string/number conversions
+shouldBe("Number(d)", "1017492323515");
+shouldBe("Boolean(d)", "true");
+shouldBe("(new Date(100)).valueOf()", "100");
+shouldBe("(new Date(true)).valueOf()", "1");
+shouldBe("(new Date(false)).valueOf()", "0");
+shouldBe("typeof (new Date()).toString()", "'string'");
+shouldBe("typeof ('' + new Date())", "'string'");
+shouldBe("typeof (new Date() + new Date())", "'string'");
+shouldBeTrue("isNaN(Number(new Date('foo')))");
+shouldBe("new Date(10001) - new Date(10000)", "1");
+shouldBe("'' - new Date(10000)", "-10000");
+shouldBe("2 * new Date(10000)", "20000");
+shouldBe("var d = new Date(); d == String(d)", "true");
+
+var d0 = new Date(2004, 0, 1, 0, 0, 0, 0);
+shouldBe("d0.getHours()","0");
+
+var d1 = new Date(Date.UTC(2004, 0, 1, 0, 0, 0, 0));
+shouldBe("d1.getUTCHours()","0");
+d1.setUTCHours(1999,6,9);
+d1.setUTCHours(11,22,33);
+shouldBe("d1.getUTCHours()","11");
+
+var d2 = new Date();
+d2.setMilliseconds(11);
+shouldBe("d2.getMilliseconds()", "11");
+d2.setSeconds(11, 22);
+shouldBe("d2.getSeconds()", "11");
+shouldBe("d2.getMilliseconds()", "22");
+d2.setMinutes(11, 22, 33);
+shouldBe("d2.getMinutes()", "11");
+shouldBe("d2.getSeconds()", "22");
+shouldBe("d2.getMilliseconds()", "33");
+d2.setHours(11, 22, 33, 44);
+shouldBe("d2.getHours()", "11");
+shouldBe("d2.getMinutes()", "22");
+shouldBe("d2.getSeconds()", "33");
+shouldBe("d2.getMilliseconds()", "44");
+d2.setMonth(3, 20);
+shouldBe("d2.getMonth()", "3");
+shouldBe("d2.getDate()", "20");
+d2.setFullYear(1976, 3, 20);
+shouldBe("d2.getFullYear()", "1976");
+shouldBe("d2.getMonth()", "3");
+shouldBe("d2.getDate()", "20");
+
+// ### fix: shouldBe("d2.setYear(-1), d2.getFullYear()", "-1");
+shouldBe("d2.setYear(0), d2.getFullYear()", "1900");
+shouldBe("d2.setYear(1), d2.getFullYear()", "1901");
+shouldBe("d2.setYear(99), d2.getFullYear()", "1999");
+shouldBe("d2.setYear(100), d2.getFullYear()", "100");
+shouldBe("d2.setYear(2050), d2.getFullYear()", "2050");
+shouldBe("d2.setYear(1899), d2.getFullYear()", "1899");
+shouldBe("d2.setYear(2000), d2.getFullYear()", "2000");
+shouldBe("d2.setYear(2100), d2.getFullYear()", "2100");
+
+// date parsing
+// from kdelibs/kdecore/tests/krfcdatetest.cpp
+  var dateRef = new Date('Thu Nov 5 1994 18:15:30 GMT+0500');
+  //  debug(dateRef);
+  shouldBe( "dateRef.getDay()", "6"); // It was in fact a Saturday
+  shouldBe( "dateRef.getDate()", "5");
+  shouldBe( "dateRef.getMonth()", "10");
+  shouldBe( "dateRef.getYear()", "94"); // like NS, and unlike IE, by default
+  shouldBe( "dateRef.getFullYear()", "1994");
+  shouldBe( "dateRef.getMinutes()", "15");
+  shouldBe( "dateRef.getSeconds()", "30");
+  shouldBe( "dateRef.getUTCDay()", "6"); // It was in fact a Saturday
+  shouldBe( "dateRef.getUTCDate()", "5");
+  shouldBe( "dateRef.getUTCMonth()", "10");
+  shouldBe( "dateRef.getUTCFullYear()", "1994");
+  shouldBe( "dateRef.getUTCHours()", "13");
+  shouldBe( "dateRef.getUTCMinutes()", "15");
+  shouldBe( "dateRef.getUTCSeconds()", "30");
+
+  d = new Date('Thu Nov 5 1994 18:15:30 GMT+05:00');
+  shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
+  shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Sat, 05 Nov 1994 13:15:30 +0000'"); // It was in fact a Saturday
+
+  dateRef = new Date('Thu Nov 5 2065 18:15:30 GMT+0500');
+  //  debug(dateRef);
+  shouldBe( "dateRef.getDay()", "4");
+  shouldBe( "dateRef.getDate()", "5");
+  shouldBe( "dateRef.getMonth()", "10");
+//  shouldBe( "dateRef.getYear()", "65"); // Should this be 65 or 165 ??
+  shouldBe( "dateRef.getFullYear()", "2065");
+  shouldBe( "dateRef.getMinutes()", "15");
+  shouldBe( "dateRef.getSeconds()", "30");
+  shouldBe( "dateRef.getUTCDay()", "4");
+  shouldBe( "dateRef.getUTCDate()", "5");
+  shouldBe( "dateRef.getUTCMonth()", "10");
+  shouldBe( "dateRef.getUTCFullYear()", "2065");
+  shouldBe( "dateRef.getUTCHours()", "13");
+  shouldBe( "dateRef.getUTCMinutes()", "15");
+  shouldBe( "dateRef.getUTCSeconds()", "30");
+
+  dateRef = new Date('Wed Nov 5 2064 18:15:30 GMT+0500'); // Leap year
+  //  debug(dateRef);
+  shouldBe( "dateRef.getDay()", "3");
+  shouldBe( "dateRef.getDate()", "5");
+  shouldBe( "dateRef.getMonth()", "10");
+//  shouldBe( "dateRef.getYear()", "64"); // Should this be 64 or 164 ??
+  shouldBe( "dateRef.getFullYear()", "2064");
+  shouldBe( "dateRef.getMinutes()", "15");
+  shouldBe( "dateRef.getSeconds()", "30");
+  shouldBe( "dateRef.getUTCDay()", "3");
+  shouldBe( "dateRef.getUTCDate()", "5");
+  shouldBe( "dateRef.getUTCMonth()", "10");
+  shouldBe( "dateRef.getUTCFullYear()", "2064");
+  shouldBe( "dateRef.getUTCHours()", "13");
+  shouldBe( "dateRef.getUTCMinutes()", "15");
+  shouldBe( "dateRef.getUTCSeconds()", "30");
+
+/*
+  // Shouldn't this work?
+  dateRef = new Date('Sat Nov 5 1864 18:15:30 GMT+0500');
+  //  debug(dateRef);
+  shouldBe( "dateRef.getDay()", "6");
+  shouldBe( "dateRef.getDate()", "5");
+  shouldBe( "dateRef.getMonth()", "10");
+//  shouldBe( "dateRef.getYear()", "64"); // Should this be 64 ??
+  shouldBe( "dateRef.getFullYear()", "1864");
+  shouldBe( "dateRef.getMinutes()", "15");
+  shouldBe( "dateRef.getSeconds()", "30");
+  shouldBe( "dateRef.getUTCDay()", "3");
+  shouldBe( "dateRef.getUTCDate()", "5");
+  shouldBe( "dateRef.getUTCMonth()", "10");
+  shouldBe( "dateRef.getUTCFullYear()", "1864");
+  shouldBe( "dateRef.getUTCHours()", "13");
+  shouldBe( "dateRef.getUTCMinutes()", "15");
+  shouldBe( "dateRef.getUTCSeconds()", "30");
+*/
+
+  d = new Date('Tue Nov 5 2024 18:15:30 GMT+05:00');
+  shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Tue, 05 Nov 2024 13:15:30 +0000'");
+  d = new Date('Mon Nov 5 2040 18:15:30 GMT+05:00');
+  shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Mon, 05 Nov 2040 13:15:30 +0000'");
+  d = new Date('Fri Nov 5 2100 18:15:30 GMT+05:00');
+  shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Fri, 05 Nov 2100 13:15:30 +0000'");
+  d = new Date('Fri Nov 5 2004 03:15:30 GMT+05:00'); // Timezone crosses day barrier
+  shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Thu, 04 Nov 2004 22:15:30 +0000'");
+
+// AM/PM
+shouldBe("(new Date('Dec 25 1995 1:30 PM UTC')).valueOf()", "819898200000");
+shouldBe("(new Date('Dec 25 1995 1:30 pm UTC')).valueOf()", "819898200000");
+shouldBe("(new Date('Dec 25 1995 1:30 AM UTC')).valueOf()", "819855000000");
+shouldBe("(new Date('Dec 25 1995 1:30 am UTC')).valueOf()", "819855000000");
+shouldBe("(new Date('Dec 25 1995 12:00 PM UTC')).valueOf()", "819892800000");
+shouldBe("(new Date('Dec 25 1995 12:00 AM UTC')).valueOf()", "819849600000");
+shouldBe("(new Date('Dec 25 1995 00:00 AM UTC')).valueOf()", "819849600000");
+shouldBe("(new Date('Dec 25 1995 00:00 PM UTC')).valueOf()", "819892800000");
+shouldBeTrue("isNaN(new Date('Dec 25 1995 13:30 AM UTC')).valueOf()");
+
+/*
+  // Don't work in any other browsers
+  d = new Date('Wednesday, 05-Nov-94 13:15:30 GMT');
+  shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
+
+  d = new Date('Wed, 05-Nov-1994 13:15:30 GMT');
+  shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
+
+  d = new Date('Wed, 05-November-1994 13:15:30 GMT');
+  shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
+
+  // Works only in EST/EDT
+  d = new Date('November 5, 1994 08:15:30');
+  debug(d);
+  shouldBe( "d.toUTCString()", "dateRef.toUTCString()");
+
+  var dateRef2 = new Date('July 1, 2004 10:00 EDT');
+  d = new Date('July 1, 2004 10:00');
+  debug(d);
+  shouldBe( "d.toUTCString()", "dateRef2.toUTCString()");
+
+  shouldBe("new Date('Wednesday 09-Nov-99 13:12:40 GMT').getMonth()", "10"); // not parsed in moz
+  shouldBe("new Date('Sat, 01-Dec-2000 08:00:00 GMT').getMonth()", "11"); // not parsed in moz
+*/
+
+shouldBe("new Date('Sat, 01 Dec 2000 08:00:00 GMT').getMonth()", "11");
+shouldBe("new Date('01 Jan 99 22:00 +0100').getFullYear()", "1999");
+shouldBe("new Date('May 09 1999 13:12:40 GMT').getDate()", "9");
+shouldBe("new Date('Wednesday February 09 1999 13:12:40 GMT').getMonth()", "1");
+shouldBe("new Date('Wednesday January 09 1999 13:12:40 GMT').getFullYear()", "1999");
+shouldBe("new Date('Wednesday January 09 13:12:40 GMT 1999').getFullYear()", "1999");
+shouldBe("new Date('Wednesday January 06 13:12:40 GMT 2100').getFullYear()", "2100");
+shouldBe("(new Date('\\n21\\rFeb\\f\\v\\t 2004')).getFullYear()", "2004"); // ws
+shouldBe("(new Date('Dec 25 1995 gmt')).valueOf()", "819849600000");
+shouldBe("(new Date('Dec 25 1995 utc')).valueOf()", "819849600000");
+
+// Those two fail in Konqueror, due to time_t being limited to 2037 !
+// moved to evil-n.js shouldBe("new Date('3/31/2099').getFullYear()", "2099");
+// moved to evil-n.js shouldBe("new Date('3/31/2099').getMonth()", "2");
+//shouldBe("new Date('3/31/2099').getDate()",31);
+
+shouldBe("new Date('3/31/2005').getDate()", "31");
+shouldBe("new Date('3/31/2005').getHours()", "0");
+shouldBe("new Date('7/31/2005').getHours()", "0"); // DST
+shouldBe("new Date('3/31/2005 GMT').getFullYear()", "2005");
+shouldBe("new Date('3/31/2005 12:45:15').getDate()", "31");
+shouldBe("new Date('3/31/2005 12:45:15').getMonth()", "2");
+shouldBe("new Date('3/31/2005 12:45:15').getSeconds()", "15");
+shouldBe("new Date('2003/02/03').getMonth()", "1");
+// ### not sure how to interpret this: new Date('25/12/2005') 
+// ### shouldBe("new Date('1950/02/03').getFullYear()", "1950");
+shouldBe("new Date('2003/02/03 02:01:04 UTC').getSeconds()", "4");
+
+var jul27Str = 'July 27, 2003'
+var jul27Num = new Date(jul27Str).valueOf();
+shouldBe("jul27Num", "Date.parse(jul27Str).valueOf()");
+// expect NaN, not undefined
+shouldBe("typeof Date.parse(0)", "'number'");
+shouldBeTrue("isNaN(Date.parse(0))");
+// parse string *object*
+shouldBe("Date.parse(new String(jul27Str)).valueOf()", "jul27Num");
+
+// invalid dates
+shouldBeTrue("isNaN(Number(new Date('01 ANF 2000')))"); // middle of JANFEB :)
+shouldBeTrue("isNaN(Number(new Date('ANF 01 2000')))");
+
+d = new Date("January 1, 2000");
+var oldHours = d.getHours();
+d.setMonth(8);
+shouldBe("oldHours", "d.getHours()");
+
+// some time values in different (implementation) ranges
+shouldBe("Date.UTC(1800, 0, 1)", "-5364662400000");
+shouldBe("Date.UTC(1800, 2, 1)", "-5359564800000"); // one day after Feb 28th
+shouldBe("Date.UTC(1899, 0, 1)", "-2240524800000");
+shouldBe("Date.UTC(1900, 0, 1)", "-2208988800000");
+shouldBe("Date.UTC(1960, 0, 1)", "-315619200000");
+shouldBe("Date.UTC(1970, 0, 1)", "0");
+shouldBe("Date.UTC(3000, 0, 1)", "32503680000000");
+
+// same dates as above
+shouldBe("(new Date(-5364662400000)).valueOf()", "-5364662400000");
+shouldBe("(new Date(-2240524800000)).valueOf()", "-2240524800000");
+shouldBe("(new Date(-2208988800000)).valueOf()", "-2208988800000");
+shouldBe("(new Date(-315619200000)).valueOf()", "-315619200000");
+shouldBe("(new Date(0)).valueOf()", "0");
+shouldBe("(new Date(32503680000000)).valueOf()", "32503680000000");
+
+d = new Date(2010, 0, 1);
+//shouldBe("d.valueOf()", "32503676400000");
+shouldBe("d.getDay()", "5");
+
+// large and small year numbers
+d = new Date(3000, 0, 1);
+//shouldBe("d.valueOf()", "32503676400000");
+//shouldBe("(new Date(3000, 0, 1)).valueOf()", "Date.UTC(3000, 0, 1)");
+shouldBeTrue("d.getYear() == 1100 || d.getYear() == 3000");
+shouldBe("d.getFullYear()", "3000");
+shouldBe("d.getDay()", "3");
+shouldBe("d.getHours()", "0");
+shouldBe("new Date('3/31/2099').getFullYear()", "2099");
+shouldBe("new Date('3/31/2099').getMonth()", "2");
+
+d = new Date(Date.UTC(3000, 0, 1));
+shouldBe("d.valueOf()", "32503680000000");
+shouldBe("d.getUTCDay()", "3");
+shouldBe("d.getUTCHours()", "0");
+
+d = new Date(1899, 0, 1);
+shouldBe("d.getFullYear()", "1899");
+shouldBeTrue("d.getYear() == -1 || d.getYear() == 1899"); // Moz or IE
+shouldBe("d.getDay()", "0");
+shouldBe("d.getHours()", "0");
+
+d = new Date(Date.UTC(3000, 0, 1));
+shouldBe("d.getUTCDay()", "3");
+
+d = new Date(Date.UTC(1899, 0, 1));
+shouldBe("d.getUTCDay()", "0");
+shouldBe( "d.toUTCString().replace('GMT', '+0000')", "'Sun, 01 Jan 1899 00:00:00 +0000'");
+
+// out of range values. have to be caught by TimeClip()
+shouldBe("Number(new Date(8.64E15))", "8.64E15");
+shouldBe("Number(new Date(-8.64E15))", "-8.64E15");
+shouldBeTrue("isNaN(new Date(8.6400001E15))");;
+shouldBeTrue("isNaN(new Date(-8.6400001E15))");;
+
+// other browsers don't mind the missing space
+shouldBe("(new Date('January29,2005')).getDate()", "29");
+
+shouldBe("(new Date('12/25/1995 ::')).valueOf()",
+        "(new Date('12/25/1995')).valueOf()");
+
+debug("End Of Test");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/Error.js b/LayoutTests/fast/js/kde/resources/Error.js
new file mode 100644 (file)
index 0000000..c2eaea8
--- /dev/null
@@ -0,0 +1,12 @@
+// Error constructor called as a function
+shouldBe("Error('msg').message", "'msg'");
+
+// Error Constructor called as part of a new expression
+shouldBe("(new Error('msg')).message", "'msg'");
+// moved to evil-n.js shouldBeUndefined("(new Error()).message");
+shouldBe("(new Error('msg')).name", "'Error'");
+
+shouldBe("Object.prototype.toString.apply(Error())", "'[object Error]'");
+shouldBe("Object.prototype.toString.apply(Error)", "'[object Function]'");
+shouldBe("Object.prototype.toString.apply(EvalError)", "'[object Function]'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/GlobalObject.js b/LayoutTests/fast/js/kde/resources/GlobalObject.js
new file mode 100644 (file)
index 0000000..2979f66
--- /dev/null
@@ -0,0 +1,76 @@
+var h = "a\xefc";
+var u = "a\u1234c";
+var z = "\x00";
+
+shouldBe("h.charCodeAt(1)", "239");
+shouldBe("u.charCodeAt(1)", "4660");
+shouldBe("escape(h)", "'a%EFc'");
+shouldBe("escape(u)", "'a%u1234c'");
+shouldBe("escape(z)", "'%00'");
+shouldBe("unescape(escape(h))", "h");
+shouldBe("unescape(escape(u))", "u");
+shouldBe("unescape(escape(z))", "z");
+
+shouldBeTrue("isNaN(NaN)");
+shouldBeTrue("isNaN('NaN')");
+shouldBeFalse("isNaN('1')");
+
+shouldBeTrue("isFinite(1)");
+shouldBeTrue("isFinite('1')");
+
+// all should return NaN because 1st char is non-number
+shouldBeFalse("isFinite('a')");
+shouldBe('isNaN(parseInt("Hello", 8))', "true");
+shouldBe('isNaN(parseInt("FFF", 10))', "true");
+shouldBe('isNaN(parseInt(".5", 10))', "true");
+
+shouldBeFalse("isFinite(Infinity)");
+shouldBeFalse("isFinite('Infinity')");
+
+shouldBeTrue("isNaN(parseInt())");
+shouldBeTrue("isNaN(parseInt(''))");
+shouldBeTrue("isNaN(parseInt(' '))");
+shouldBeTrue("isNaN(parseInt('a'))");
+shouldBe("parseInt(1)", "1");
+shouldBe("parseInt(1234567890123456)", "1234567890123456");
+shouldBe("parseInt(1.2)", "1");
+shouldBe("parseInt(' 2.3')", "2");
+shouldBe("parseInt('0x10')", "16");
+shouldBe("parseInt('11', 0)", "11");
+shouldBe("parseInt('F', 16)", "15");
+
+shouldBeTrue("isNaN(parseInt('10', 40))");
+shouldBe("parseInt('3x')", "3");
+shouldBe("parseInt('3 x')", "3");
+shouldBeTrue("isNaN(parseInt('Infinity'))");
+
+// all should return 15
+shouldBe('parseInt("15")', "15");
+shouldBe('parseInt("017")', "15"); /// The spec says it's ok, and even encouraged, to parse this as 17!
+shouldBe('parseInt("0xf")', "15");
+shouldBe('parseInt("15", 0)', "15");
+shouldBe('parseInt("15", 10)', "15");
+shouldBe('parseInt("F", 16)', "15");
+shouldBe('parseInt("17", 8)', "15");
+shouldBe('parseInt("15.99", 10)', "15");
+shouldBe('parseInt("FXX123", 16)', "15");
+shouldBe('parseInt("1111", 2)', "15");
+shouldBe('parseInt("15*3", 10)', "15");
+
+// this should be 0
+shouldBe('parseInt("0x7", 10)', "0");
+shouldBe('parseInt("1x7", 10)', "1");
+
+shouldBeTrue("isNaN(parseFloat())");
+shouldBeTrue("isNaN(parseFloat(''))");
+shouldBeTrue("isNaN(parseFloat(' '))");
+shouldBeTrue("isNaN(parseFloat('a'))");
+shouldBe("parseFloat(1)", "1");
+shouldBe("parseFloat(' 2.3')", "2.3");
+shouldBe("parseFloat('3.1 x', 3)", "3.1");
+shouldBe("parseFloat('3.1x', 3)", "3.1");
+shouldBeFalse("isFinite(parseFloat('Infinity'))");
+shouldBeFalse("delete NaN");
+shouldBeFalse("delete Infinity");
+shouldBeFalse("delete undefined");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/KNOWN_FAILURES b/LayoutTests/fast/js/kde/resources/KNOWN_FAILURES
new file mode 100644 (file)
index 0000000..be997f7
--- /dev/null
@@ -0,0 +1 @@
+evil-n.js
diff --git a/LayoutTests/fast/js/kde/resources/Number.js b/LayoutTests/fast/js/kde/resources/Number.js
new file mode 100644 (file)
index 0000000..077f5d1
--- /dev/null
@@ -0,0 +1,285 @@
+shouldBe("Number()", "0");
+shouldBe("Number(1)", "1");
+shouldBe("Number(1.1)", "1.1");
+shouldBe("Number('1.2')", "1.2");
+shouldBe("isNaN(Number('a'))", "true");
+
+shouldBe("(new Number()).valueOf()", "0");
+shouldBe("(new Number(.4)).valueOf()", "0.4");
+shouldBe("(new Number('1.')).valueOf()", "1");
+shouldBe("isNaN(new Number('a'))", "true");
+
+shouldBe("isNaN(Number.NaN)", "true");
+shouldBe("Number.NEGATIVE_INFINITY", "-Infinity");
+shouldBe("Number.POSITIVE_INFINITY", "Infinity");
+// with (Number)
+//   shouldBe("POSITIVE_INFINITY", "Infinity");
+
+shouldBe("(1).toString()", "'1'");
+shouldBe("typeof (1).toString()", "'string'");
+shouldBe("(10).toString(16)", "'a'");
+shouldBe("(8.5).toString(16)", "'8.8'");
+shouldBe("(-8.5).toString(16)", "'-8.8'");
+shouldBe("Number.NaN.toString(16)", "'NaN'");
+shouldBe("Number.POSITIVE_INFINITY.toString(16)", "'Infinity'");
+shouldBe("Number.NEGATIVE_INFINITY.toString(16)", "'-Infinity'");
+shouldBe("Number.MAX_VALUE.toString(2).length", "1024");
+shouldBe("(1).valueOf()", "1");
+shouldBe("typeof (1).valueOf()", "'number'");
+
+function toFixedOrException(val,fractionDigits)
+{
+  var s = "";
+  try {
+    s = String(Number(val).toFixed(fractionDigits));
+  }
+  catch (e) {
+    s = String(e);
+  }
+  return s;
+}
+
+shouldBe("Number(1234.567).toFixed(0)","\"1235\"");
+shouldBe("Number(1234.567).toFixed(undefined)","\"1235\"");
+shouldBe("Number(0).toFixed(7)","\"0.0000000\"");
+shouldBe("Number(0.003).toFixed(0)","\"0\"");
+shouldBe("Number(40.1234567890123).toFixed(7)","\"40.1234568\"");
+shouldBe("Number(-40.1234567890123).toFixed(7)","\"-40.1234568\"");
+shouldBe("Number(4).toFixed(7)","\"4.0000000\"");
+shouldBe("Number(0.000056).toFixed(7)","\"0.0000560\"");
+shouldBe("Number(NaN).toFixed(7)","\"NaN\"");
+shouldBe("Number(Infinity).toFixed(7)","\"Infinity\"");
+shouldBe("Number(-Infinity).toFixed(7)","\"-Infinity\"");
+shouldBe("Number(Math.pow(10,4)).toFixed(13)","\"10000.0000000000000\"");
+shouldBe("Number(Math.pow(10,17)).toFixed(16)","\"100000000000000000.0000000000000000\"");
+shouldBe("Number(Math.pow(10,18)).toFixed(17)","\"1000000000000000000.00000000000000000\"");
+shouldBe("Number(Math.pow(10,19)).toFixed(18)","\"10000000000000000000.000000000000000000\"");
+shouldBe("Number(Math.pow(10,17)).toFixed(20)","\"100000000000000000.00000000000000000000\"");
+shouldBe("Number(Math.pow(10,18)).toFixed(20)","\"1000000000000000000.00000000000000000000\"");
+shouldBe("Number(Math.pow(10,19)).toFixed(20)","\"10000000000000000000.00000000000000000000\"");
+shouldBe("Number(Math.pow(10,20)).toFixed(20)","\"100000000000000000000.00000000000000000000\"");
+shouldBe("Number(Math.pow(10,21)).toFixed(20)","\"1e+21\"");
+shouldBeTrue("toFixedOrException(2,-1).indexOf('Range') >= 0");
+shouldBe("toFixedOrException(2,0)","\"2\"");
+shouldBe("toFixedOrException(2,20)","\"2.00000000000000000000\"");
+shouldBeTrue("toFixedOrException(2,21).indexOf('Range') >= 0");
+
+
+
+
+shouldBe("Number(NaN).toExponential()","\"NaN\"");
+shouldBe("Number(Infinity).toExponential()","\"Infinity\"");
+shouldBe("Number(-Infinity).toExponential()","\"-Infinity\"");
+shouldBe("Number(NaN).toExponential(4)","\"NaN\"");
+shouldBe("Number(Infinity).toExponential(4)","\"Infinity\"");
+shouldBe("Number(-Infinity).toExponential(4)","\"-Infinity\"");
+shouldBe("Number(123.456).toExponential()","\"1.23456e+2\"");
+shouldBeTrue("try { Number(123.456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(123.456).toExponential(0)","\"1e+2\"");
+shouldBe("Number(123.456).toExponential(1)","\"1.2e+2\"");
+shouldBe("Number(123.456).toExponential(2)","\"1.23e+2\"");
+shouldBe("Number(123.456).toExponential(3)","\"1.235e+2\"");
+shouldBe("Number(123.456).toExponential(4)","\"1.2346e+2\"");
+shouldBe("Number(123.456).toExponential(5)","\"1.23456e+2\"");
+shouldBe("Number(123.456).toExponential(6)","\"1.234560e+2\"");
+shouldBe("Number(123.456).toExponential(7)","\"1.2345600e+2\"");
+shouldBe("Number(123.456).toExponential(8)","\"1.23456000e+2\"");
+shouldBe("Number(123.456).toExponential(9)","\"1.234560000e+2\"");
+shouldBe("Number(123.456).toExponential(10)","\"1.2345600000e+2\"");
+shouldBe("Number(123.456).toExponential(11)","\"1.23456000000e+2\"");
+shouldBe("Number(123.456).toExponential(12)","\"1.234560000000e+2\"");
+shouldBe("Number(123.456).toExponential(13)","\"1.2345600000000e+2\"");
+shouldBe("Number(123.456).toExponential(14)","\"1.23456000000000e+2\"");
+shouldBe("Number(123.456).toExponential(15)","\"1.234560000000000e+2\"");
+shouldBe("Number(123.456).toExponential(16)","\"1.2345600000000000e+2\"");
+shouldBe("Number(123.456).toExponential(17)","\"1.23456000000000000e+2\"");
+shouldBe("Number(123.456).toExponential(18)","\"1.234560000000000000e+2\"");
+shouldBe("Number(123.456).toExponential(19)","\"1.2345600000000000000e+2\"");
+shouldBe("Number(123.456).toExponential(20)","\"1.23456000000000000000e+2\"");
+shouldBeTrue("try { Number(123.456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(.000123456).toExponential()","\"1.23456e-4\"");
+shouldBeTrue("try { Number(.000123456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(.000123456).toExponential(0)","\"1e-4\"");
+shouldBe("Number(.000123456).toExponential(1)","\"1.2e-4\"");
+shouldBe("Number(.000123456).toExponential(2)","\"1.23e-4\"");
+shouldBe("Number(.000123456).toExponential(3)","\"1.235e-4\"");
+shouldBe("Number(.000123456).toExponential(4)","\"1.2346e-4\"");
+shouldBe("Number(.000123456).toExponential(5)","\"1.23456e-4\"");
+shouldBe("Number(.000123456).toExponential(6)","\"1.234560e-4\"");
+shouldBe("Number(.000123456).toExponential(7)","\"1.2345600e-4\"");
+shouldBe("Number(.000123456).toExponential(8)","\"1.23456000e-4\"");
+shouldBe("Number(.000123456).toExponential(9)","\"1.234560000e-4\"");
+shouldBe("Number(.000123456).toExponential(10)","\"1.2345600000e-4\"");
+shouldBe("Number(.000123456).toExponential(11)","\"1.23456000000e-4\"");
+shouldBe("Number(.000123456).toExponential(12)","\"1.234560000000e-4\"");
+shouldBe("Number(.000123456).toExponential(13)","\"1.2345600000000e-4\"");
+shouldBe("Number(.000123456).toExponential(14)","\"1.23456000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(15)","\"1.234560000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(16)","\"1.2345600000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(17)","\"1.23456000000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(18)","\"1.234560000000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(19)","\"1.2345600000000000000e-4\"");
+shouldBe("Number(.000123456).toExponential(20)","\"1.23456000000000000000e-4\"");
+shouldBeTrue("try { Number(.000123456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(123.4567890123456789012).toExponential()","\"1.2345678901234568e+2\"");
+shouldBeTrue("try { Number(123.4567890123456789012).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(123.4567890123456789012).toExponential(0)","\"1e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(1)","\"1.2e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(2)","\"1.23e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(3)","\"1.235e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(4)","\"1.2346e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(5)","\"1.23457e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(6)","\"1.234568e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(7)","\"1.2345679e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(8)","\"1.23456789e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(9)","\"1.234567890e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(10)","\"1.2345678901e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(11)","\"1.23456789012e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(12)","\"1.234567890123e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(13)","\"1.2345678901235e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(14)","\"1.23456789012346e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(15)","\"1.234567890123457e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(16)","\"1.2345678901234570e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(17)","\"1.23456789012345700e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(18)","\"1.234567890123457100e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(19)","\"1.2345678901234570000e+2\"");
+shouldBe("Number(123.4567890123456789012).toExponential(20)","\"1.23456789012345700000e+2\"");
+shouldBeTrue("try { Number(123.4567890123456789012).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(.0000000000000000000001).toExponential()","\"1e-22\"");
+shouldBe("Number(.0000000000000000000012).toExponential()","\"1.2e-21\"");
+shouldBe("Number(.0000000000000000000123).toExponential()","\"1.23e-20\"");
+shouldBe("Number(.0000000000000000000123).toExponential()","\"1.23e-20\"");
+shouldBe("Number(.0000000000000000001234).toExponential()","\"1.234e-19\"");
+shouldBe("Number(.0000000000000000012345).toExponential()","\"1.2345e-18\"");
+shouldBe("Number(.0000000000000000123456).toExponential()","\"1.23456e-17\"");
+shouldBe("Number(.0000000000000001234567).toExponential()","\"1.234567e-16\"");
+shouldBe("Number(.0000000000000012345678).toExponential()","\"1.2345678e-15\"");
+shouldBe("Number(.0000000000000123456789).toExponential()","\"1.23456789e-14\"");
+shouldBe("Number(.0000000000001234567890).toExponential()","\"1.23456789e-13\"");
+shouldBe("Number(.0000000000012345678901).toExponential()","\"1.2345678901e-12\"");
+shouldBe("Number(.0000000000123456789012).toExponential()","\"1.23456789012e-11\"");
+shouldBe("Number(.0000000001234567890123).toExponential()","\"1.234567890123e-10\"");
+shouldBe("Number(.0000000012345678901234).toExponential()","\"1.2345678901234e-9\"");
+shouldBe("Number(.0000000123456789012345).toExponential()","\"1.23456789012345e-8\"");
+shouldBe("Number(.0000001234567890123456).toExponential()","\"1.234567890123456e-7\"");
+shouldBe("Number(.0000012345678901234567).toExponential()","\"1.2345678901234567e-6\"");
+shouldBe("Number(.0000123456789012345678).toExponential()","\"1.2345678901234568e-5\"");
+shouldBe("Number(.0001234567890123456789).toExponential()","\"1.2345678901234567e-4\"");
+shouldBe("Number(.0012345678901234567890).toExponential()","\"1.2345678901234567e-3\"");
+shouldBe("Number(.0123456789012345678901).toExponential()","\"1.2345678901234568e-2\"");
+shouldBe("Number(1.234567890123456789012).toExponential()","\"1.2345678901234567e+0\"");
+shouldBe("Number(12.34567890123456789012).toExponential()","\"1.2345678901234567e+1\"");
+shouldBe("Number(123.4567890123456789012).toExponential()","\"1.2345678901234568e+2\"");
+shouldBe("Number(1234.567890123456789012).toExponential()","\"1.234567890123457e+3\"");
+shouldBe("Number(12345.67890123456789012).toExponential()","\"1.2345678901234567e+4\"");
+shouldBe("Number(123456.7890123456789012).toExponential()","\"1.2345678901234567e+5\"");
+shouldBe("Number(1234567.890123456789012).toExponential()","\"1.2345678901234567e+6\"");
+shouldBe("Number(12345678.90123456789012).toExponential()","\"1.2345678901234567e+7\"");
+shouldBe("Number(123456789.0123456789012).toExponential()","\"1.2345678901234567e+8\"");
+shouldBe("Number(1234567890.123456789012).toExponential()","\"1.2345678901234567e+9\"");
+shouldBe("Number(12345678901.23456789012).toExponential()","\"1.2345678901234568e+10\"");
+shouldBe("Number(123456789012.3456789012).toExponential()","\"1.2345678901234567e+11\"");
+shouldBe("Number(1234567890123.456789012).toExponential()","\"1.2345678901234568e+12\"");
+shouldBe("Number(12345678901234.56789012).toExponential()","\"1.2345678901234568e+13\"");
+shouldBe("Number(123456789012345.6789012).toExponential()","\"1.2345678901234567e+14\"");
+shouldBe("Number(1234567890123456.789012).toExponential()","\"1.2345678901234568e+15\"");
+shouldBe("Number(12345678901234567.89012).toExponential()","\"1.2345678901234568e+16\"");
+shouldBe("Number(123456789012345678.9012).toExponential()","\"1.2345678901234568e+17\"");
+shouldBe("Number(1234567890123456789.012).toExponential()","\"1.2345678901234568e+18\"");
+shouldBe("Number(12345678901234567890.12).toExponential()","\"1.2345678901234567e+19\"");
+shouldBe("Number(123456789012345678901.2).toExponential()","\"1.2345678901234568e+20\"");
+
+shouldBeTrue("try { Number(1).toPrecision(-1); } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBeTrue("try { Number(1).toPrecision(0); } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("try { Number(1).toPrecision(1); } catch (e) { String(e); }","\"1\"");
+shouldBe("try { Number(1).toPrecision(21); } catch (e) { String(e); }","\"1.00000000000000000000\"");
+shouldBeTrue("try { Number(1).toPrecision(22); } catch (e) { String(e).indexOf('Range') >= 0; }");
+shouldBe("Number(NaN).toPrecision()","\"NaN\"");
+shouldBe("Number(NaN).toPrecision(1)","\"NaN\"");
+shouldBe("Number(Infinity).toPrecision()","\"Infinity\"");
+shouldBe("Number(Infinity).toPrecision(1)","\"Infinity\"");
+shouldBe("Number(-Infinity).toPrecision()","\"-Infinity\"");
+shouldBe("Number(-Infinity).toPrecision(1)","\"-Infinity\"");
+shouldBe("Number(.0000000012345).toPrecision(2)","\"1.2e-9\"");
+shouldBe("Number(.000000012345).toPrecision(2)","\"1.2e-8\"");
+shouldBe("Number(.00000012345).toPrecision(2)","\"1.2e-7\"");
+shouldBe("Number(.0000012345).toPrecision(2)","\"0.0000012\"");
+shouldBe("Number(.000012345).toPrecision(2)","\"0.000012\"");
+shouldBe("Number(.00012345).toPrecision(2)","\"0.00012\"");
+shouldBe("Number(.0012345).toPrecision(2)","\"0.0012\"");
+shouldBe("Number(.012345).toPrecision(2)","\"0.012\"");
+shouldBe("Number(.12345).toPrecision(2)","\"0.12\"");
+shouldBe("Number(1.2345).toPrecision(2)","\"1.2\"");
+shouldBe("Number(12.345).toPrecision(2)","\"12\"");
+shouldBe("Number(123.45).toPrecision(2)","\"1.2e+2\"");
+shouldBe("Number(1234.5).toPrecision(2)","\"1.2e+3\"");
+shouldBe("Number(12345).toPrecision(2)","\"1.2e+4\"");
+shouldBe("Number(12345.67).toPrecision(4)","\"1.235e+4\"");
+shouldBe("Number(12344.67).toPrecision(4)","\"1.234e+4\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision()","\"0.00012345678901234567\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(1)","\"0.0001\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(2)","\"0.00012\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(3)","\"0.000123\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(4)","\"0.0001235\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(5)","\"0.00012346\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(6)","\"0.000123457\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(7)","\"0.0001234568\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(8)","\"0.00012345679\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(9)","\"0.000123456789\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(10)","\"0.0001234567890\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(11)","\"0.00012345678901\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(12)","\"0.000123456789012\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(13)","\"0.0001234567890123\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(14)","\"0.00012345678901235\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(15)","\"0.000123456789012346\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(16)","\"0.0001234567890123457\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(17)","\"0.00012345678901234568\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(18)","\"0.000123456789012345680\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(19)","\"0.0001234567890123456800\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(20)","\"0.00012345678901234567000\"");
+shouldBe("Number(0.0001234567890123456789012345).toPrecision(21)","\"0.000123456789012345680000\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision()","\"12345.678901234567\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(1)","\"1e+4\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(2)","\"1.2e+4\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(3)","\"1.23e+4\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(4)","\"1.235e+4\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(5)","\"12346\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(6)","\"12345.7\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(7)","\"12345.68\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(8)","\"12345.679\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(9)","\"12345.6789\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(10)","\"12345.67890\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(11)","\"12345.678901\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(12)","\"12345.6789012\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(13)","\"12345.67890123\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(14)","\"12345.678901235\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(15)","\"12345.6789012346\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(16)","\"12345.67890123457\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(17)","\"12345.678901234568\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(18)","\"12345.6789012345660\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(19)","\"12345.67890123456800\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(20)","\"12345.678901234565000\"");
+shouldBe("Number(12345.67890123456789012345).toPrecision(21)","\"12345.6789012345670000\"");
+shouldBe("Number(0).toPrecision()","\"0\"");
+shouldBe("Number(0).toPrecision(1)","\"0\"");
+shouldBe("Number(0).toPrecision(2)","\"0.0\"");
+shouldBe("Number(0).toPrecision(3)","\"0.00\"");
+shouldBe("Number(0).toPrecision(4)","\"0.000\"");
+shouldBe("Number(0).toPrecision(5)","\"0.0000\"");
+shouldBe("Number(0).toPrecision(6)","\"0.00000\"");
+shouldBe("Number(0).toPrecision(7)","\"0.000000\"");
+shouldBe("Number(0).toPrecision(8)","\"0.0000000\"");
+shouldBe("Number(0).toPrecision(9)","\"0.00000000\"");
+shouldBe("Number(0).toPrecision(10)","\"0.000000000\"");
+shouldBe("Number(0).toPrecision(11)","\"0.0000000000\"");
+shouldBe("Number(0).toPrecision(12)","\"0.00000000000\"");
+shouldBe("Number(0).toPrecision(13)","\"0.000000000000\"");
+shouldBe("Number(0).toPrecision(14)","\"0.0000000000000\"");
+shouldBe("Number(0).toPrecision(15)","\"0.00000000000000\"");
+shouldBe("Number(0).toPrecision(16)","\"0.000000000000000\"");
+shouldBe("Number(0).toPrecision(17)","\"0.0000000000000000\"");
+shouldBe("Number(0).toPrecision(18)","\"0.00000000000000000\"");
+shouldBe("Number(0).toPrecision(19)","\"0.000000000000000000\"");
+shouldBe("Number(0).toPrecision(20)","\"0.0000000000000000000\"");
+shouldBe("Number(0).toPrecision(21)","\"0.00000000000000000000\"");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/Object.js b/LayoutTests/fast/js/kde/resources/Object.js
new file mode 100644 (file)
index 0000000..23d27bd
--- /dev/null
@@ -0,0 +1,19 @@
+shouldBe("typeof Object()", "'object'");
+shouldBe("var o = Object(); o.x = 11; o.x;", "11"); // wanted behaviour ?
+// shouldBe("Object(undefined)", ???);
+// shouldBe("Object(null)", ???);
+shouldBe("Object(1).valueOf()", "1");
+shouldBe("Object(true).valueOf()", "true");
+shouldBe("Object('s').valueOf()", "'s'");
+
+shouldBe("typeof (new Object())", "'object'");
+// shouldBe("new Object(undefined)", ???);
+// shouldBe("new Object(null)", ???);
+shouldBe("(new Object(1)).valueOf()", "1");
+shouldBe("(new Object(true)).valueOf()", "true");
+shouldBe("(new Object('s')).valueOf()", "'s'");
+
+shouldBe("String(Object())", "'[object Object]'");
+shouldBe("Object().toString()", "'[object Object]'");
+shouldBe("String(Object().valueOf())", "'[object Object]'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/Prototype.js b/LayoutTests/fast/js/kde/resources/Prototype.js
new file mode 100644 (file)
index 0000000..23ecba0
--- /dev/null
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////
+
+function Square(x)
+{
+  this.x = x;
+}
+
+new Square(0); // create prototype
+
+function Square_area() { return this.x * this.x; }
+Square.prototype.area = Square_area;
+var s = new Square(3);
+shouldBe("s.area()", "9");
+
+///////////////////////////////////////////////////////
+
+function Item(name){ 
+  this.name = name;
+}
+
+function Book(name, author){
+  this.base = Item;         // set Item constructor as method of Book object
+  this.base(name);           // set the value of name property
+  this.author = author;
+}
+Book.prototype = new Item;
+var b = new Book("a book", "Fred");        // create object instance
+//edebug(e"b.name"));
+shouldBe("b.name", "'a book'");
+shouldBe("b.author", "'Fred'");                  // outpus "Fred" 
+
+///////////////////////////////////////////////////////
+
+shouldBe("delete Boolean.prototype", "false");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/README b/LayoutTests/fast/js/kde/resources/README
new file mode 100644 (file)
index 0000000..f667066
--- /dev/null
@@ -0,0 +1,59 @@
+========================================================================
+                        The KDE JavaScript Test Suite
+========================================================================
+
+This is a collection of JavaScript (aka ECMAScript) code snipplets
+used to test the KDE JavaScript library (dubbed kjs). Most of them
+once triggered a bug in the implementation of the
+interpreter. Allthough these bugs are probably fixed by now theses
+tests can still be used for regression testing.
+
+NOTE:
+
+Don't confuse this code with the HTML bindings for the khtml
+widget. Those are implemented in a seperate module residing in
+kdelibs/khtml/ecma. Test for those can be found elsewhere.
+
+USAGE:
+
+You can evaluate .js files with a binary called 'testkjs' as long as
+they contain pure ECMAScript code without any references to browser
+specific properties. To build 'testkjs' simply invoke 'make check'
+inside of the kdelibs/kjs source directory.  Most tests rely on helper
+functions like shouldBe(). Those are collected in base.js and have to
+be evaluated before the actual test. testkjs accepts multiple input
+files in the command line. Therefore a typical test run might look
+like this:
+
+testkjs base.js operators.js
+
+For temporary debugging you may use the debug() function which prints
+its output to stderr.
+
+NAMING CONVENTION:
+
+  *.js  regular test
+j-*.js  JavaScript/JScript extensions not covered by ECMA
+*-n.js  code that is supposed to trigger a parse/compile error
+
+FUTURE:
+
+All tests could easily be run in a row by a script. If they all stick
+to a unified output format (e.g. via shouldBe()) all results can be
+parsed and analyzed automatically. Maybe to a summary HTML page.  In
+case the test suite grows we would need to provide more info about
+each test. This could look like:
+
+startTest("ECMA 15.4.2", "Testing the Array Constructor");
+// ...
+endTest();
+
+PLEA:
+
+In case you find any yet unknown bug please reduce it to a minimal test case
+either send it to me or add it to this repository yourself.
+
+
+  Harri Porten <porten@kde.org>
+
+
diff --git a/LayoutTests/fast/js/kde/resources/RegExp.js b/LayoutTests/fast/js/kde/resources/RegExp.js
new file mode 100644 (file)
index 0000000..cb7a142
--- /dev/null
@@ -0,0 +1,152 @@
+shouldBe("(new RegExp()).source", "''");
+shouldBe("Boolean(new RegExp())", "true");
+shouldBeTrue("isNaN(Number(new RegExp()))");
+
+// RegExp constructor called as a function
+shouldBe("RegExp(/x/).source", "'x'");
+//shouldBe("RegExp(/x/, 'g').source", "'/x/'"); // can't supply flags when constructing one RegExp from another, says mozilla
+shouldBe("RegExp('x', 'g').global", "true");
+shouldBe("RegExp('x').source", "'x'");
+
+// RegExp constructor
+shouldBe("new RegExp('x').source", "'x'");
+
+var ri = /a/i;
+var rm = /a/m;
+var rg = /a/g;
+
+shouldBeFalse("(/a/).global");
+shouldBe("typeof (/a/).global", "'boolean'");
+shouldBeTrue("rg.global");
+shouldBeFalse("(/a/).ignoreCase");
+shouldBeTrue("ri.ignoreCase");
+shouldBeFalse("(/a/).multiline");
+shouldBeTrue("rm.multiline");
+shouldBe("rg.toString()", "'/a/g'");
+shouldBe("ri.toString()", "'/a/i'");
+shouldBe("rm.toString()", "'/a/m'");
+
+// check properety attributes
+rg.global = false;
+shouldBeTrue("rg.global");
+ri.ignoreCase = false;
+shouldBeTrue("ri.ignoreCase");
+rm.multiline = false;
+shouldBeTrue("rm.multiline");
+
+shouldBe("Boolean(/a/.test)", "true");
+shouldBe("/(b)c/.exec('abcd').toString()", "\"bc,b\"");
+shouldBe("/(b)c/.exec('abcd').length", "2");
+shouldBe("/(b)c/.exec('abcd').index", "1");
+shouldBe("/(b)c/.exec('abcd').input", "'abcd'");
+
+var rs = /foo/;
+rs.source = "bar";
+shouldBe("rs.source", "'foo'");
+
+shouldBe("var r = new RegExp(/x/); r.global=true; r.lastIndex = -1; typeof r.test('a')", "'boolean'");
+
+shouldBe("'abcdefghi'.match(/(abc)def(ghi)/).toString()","'abcdefghi,abc,ghi'");
+shouldBe("/(abc)def(ghi)/.exec('abcdefghi').toString()","'abcdefghi,abc,ghi'");
+shouldBe("RegExp.$1","'abc'");
+shouldBe("RegExp.$2","'ghi'");
+shouldBe("RegExp.$3","''");
+
+shouldBe("'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/).toString()", "'abcdefghi,abcdefghi,bcdefgh,cdefg,def,e'");
+shouldBe("RegExp.$1","'abcdefghi'");
+shouldBe("RegExp.$2","'bcdefgh'");
+shouldBe("RegExp.$3","'cdefg'");
+shouldBe("RegExp.$4","'def'");
+shouldBe("RegExp.$5","'e'");
+shouldBe("RegExp.$6","''");
+
+shouldBe("'(100px 200px 150px 15px)'.match(/\\((\\d+)(px)* (\\d+)(px)* (\\d+)(px)* (\\d+)(px)*\\)/).toString()","'(100px 200px 150px 15px),100,px,200,px,150,px,15,px'");
+shouldBe("RegExp.$1","'100'");
+shouldBe("RegExp.$3","'200'");
+shouldBe("RegExp.$5","'150'");
+shouldBe("RegExp.$7","'15'");
+shouldBe("''.match(/\((\\d+)(px)* (\\d+)(px)* (\\d+)(px)* (\\d+)(px)*\)/)","null");
+shouldBe("RegExp.$1","''");
+shouldBe("RegExp.$3","''");
+shouldBe("RegExp.$5","''");
+shouldBe("RegExp.$7","''");
+
+var invalidChars = /[^@\.\w]/g; // #47092
+shouldBe("'faure@kde.org'.match(invalidChars) == null", "true");
+shouldBe("'faure-kde@kde.org'.match(invalidChars) == null", "false");
+
+shouldBe("'test1test2'.replace('test','X')","'X1test2'");
+shouldBe("'test1test2'.replace(/\\d/,'X')","'testXtest2'");
+shouldBe("'1test2test3'.replace(/\\d/,'')","'test2test3'");
+shouldBe("'test1test2'.replace(/test/g,'X')","'X1X2'");
+shouldBe("'1test2test3'.replace(/\\d/g,'')","'testtest'");
+shouldBe("'1test2test3'.replace(/x/g,'')","'1test2test3'");
+shouldBe("'test1test2'.replace(/(te)(st)/g,'$2$1')","'stte1stte2'");
+shouldBe("'foo+bar'.replace(/\\+/g,'%2B')", "'foo%2Bbar'");
+var caught = false; try { new RegExp("+"); } catch (e) { caught = true; }
+shouldBeTrue("caught"); // #40435
+shouldBe("'foo'.replace(/z?/g,'x')", "'xfxoxox'");
+shouldBe("'test test'.replace(/\\s*/g,'')","'testtest'"); // #50985
+shouldBe("'abc$%@'.replace(/[^0-9a-z]*/gi,'')","'abc'"); // #50848
+shouldBe("'ab'.replace(/[^\\d\\.]*/gi,'')","''"); // #75292
+shouldBe("'1ab'.replace(/[^\\d\\.]*/gi,'')","'1'"); // #75292
+
+shouldBe("'1test2test3blah'.split(/test/).toString()","'1,2,3blah'");
+var reg = /(\d\d )/g;
+var str = new String('98 76 blah');
+shouldBe("reg.exec(str).toString()","'98 ,98 '");
+shouldBe("reg.lastIndex","3");
+shouldBe("RegExp.$1","'98 '");
+shouldBe("RegExp.$2","''");
+
+shouldBe("reg.exec(str).toString()","'76 ,76 '");
+shouldBe("reg.lastIndex","6");
+shouldBe("RegExp.$1","'76 '");
+shouldBe("RegExp.$2","''");
+
+shouldBe("reg.exec(str)","null");
+shouldBe("reg.lastIndex","0");
+
+// http://www.devguru.com/Technologies/ecmascript/quickref/regexp_lastindex.html
+// Looks IE-only though
+//shouldBe( "var re=/ships*\s/; re.exec('the hardships of traveling'); re.lastIndex", "14" );
+//shouldBe( "var re=/ships*\s/; str='the hardships of traveling'; re.exec(str); re.exec(str); re.lastIndex", "0" );
+
+// http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/regexp.html
+shouldBe( "myRe=/d(b+)d/g; myArray = myRe.exec('cdbbdbsbz'); myRe.lastIndex", "5" );
+
+reg = /^u/i;
+shouldBeTrue("reg.ignoreCase == true");
+shouldBeTrue("reg.global === false");
+shouldBeTrue("reg.multiline === false");
+shouldBeTrue("reg.test('UGO')");
+
+// regexp are writable ?
+shouldBe("reg.x = 1; reg.x", "1");
+// shared data ?
+shouldBe("var r2 = reg; r2.x = 2; reg.x", "2");
+
+var str = new String("For more information, see Chapter 3.4.5.1");
+re = /(chapter \d+(\.\d)*)/i;
+// This returns the array containing Chapter 3.4.5.1,Chapter 3.4.5.1,.1
+// 'Chapter 3.4.5.1' is the first match and the first value remembered from (Chapter \d+(\.\d)*).
+// '.1' is the second value remembered from (\.\d)
+shouldBe("str.match(re).toString()","'Chapter 3.4.5.1,Chapter 3.4.5.1,.1'");
+
+str = "abcDdcba";
+// The returned array contains D, d.
+shouldBe("str.match(/d/gi).toString()","'D,d'");
+
+// unicode escape sequence
+shouldBe("/\\u0061/.source", "'\\\\u0061'");
+shouldBe("'abc'.match(/\\u0062/).toString()", "'b'");
+
+shouldBe("Object.prototype.toString.apply(RegExp.prototype)",
+        "'[object RegExp]'");
+
+// not sure what this should return. most importantly
+// it doesn't throw an exception
+shouldBe("typeof RegExp.prototype.toString()", "'string'");
+
+debug("Done.");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/StringObject.js b/LayoutTests/fast/js/kde/resources/StringObject.js
new file mode 100644 (file)
index 0000000..59c7bb6
--- /dev/null
@@ -0,0 +1,112 @@
+// String object
+shouldBe("'abc'.length", "3");
+shouldBe("(new String('abcd')).length", "4");
+shouldBe("String('abcde').length", "5");
+
+// String.charAt()
+shouldBe("'abc'.charAt(0)", "'a'");
+shouldBe("'abc'.charAt(1)", "'b'");
+shouldBe("'abc'.charAt(-1)", "''");
+shouldBe("'abc'.charAt(99)", "''");
+shouldBe("'abc'.charAt()", "'a'");
+
+// String.prototype.indexOf()
+shouldBe("'ab'.indexOf('a')", "0");
+shouldBe("'ab'.indexOf('b')", "1");
+shouldBe("'ab'.indexOf('x')", "-1");
+shouldBe("'ab'.indexOf('')", "0");
+shouldBe("''.indexOf('')", "0");
+shouldBe("'ab'.indexOf('a', -1)", "0");
+shouldBe("'ab'.indexOf('b', 1)", "1");
+shouldBe("'ab'.indexOf('a', 1)", "-1");
+shouldBe("'  '.indexOf('', 1)", "1");
+
+// String.prototype.search()
+shouldBe("String('abc').search(/b/)", "1");
+shouldBe("String('xyz').search(/b/)", "-1");
+
+// String.prototype.match()
+shouldBe("String('abcb').match(/b/) + ''", "'b'");
+shouldBe("typeof String('abc').match(/b/)", "'object'");
+shouldBe("'xyz'.match(/b/)", "null");
+shouldBe("'xyz'.match(/b/g)", "null");
+shouldBe("String('aabab'.match(/ab/g))", "'ab,ab'");
+shouldBe("String('aabab'.match(/(a)(b)/))","'ab,a,b'");
+shouldBe("String('aabab'.match(/(a)(b)/g))","'ab,ab'");
+shouldBe("String('abc'.match(/./g))","'a,b,c'");
+shouldBe("String('abc'.match(/.*/g))","'abc,'");
+// match() doesn't modify lastIndex (at least in moz)
+shouldBe("var reg = /ab/g; 'aabab'.match(reg); reg.lastIndex", "0");
+shouldBe("var reg = /ab/g; 'aabab'.match(reg).length", "2");
+shouldBe("var reg = /ab/g; 'xxx'.match(reg); reg.lastIndex", "0");
+shouldBe("var reg = /ab/g; 'xxx'.match(reg)", "null");
+shouldBe( "myRe=/d(b+)d/g;  'cdbbdbsbz'.match(myRe)[0]", "'dbbd'" );
+
+// String.prototype.replace()
+shouldBe("'abcd'.replace(/b./, 'xy')", "'axyd'");
+shouldBe("'abcd'.replace('bc', 'x')", "'axd'");
+shouldBe("'abcd'.replace('x', 'y')", "'abcd'");
+shouldBe("'abcd'.replace(/(ab)(cd)/,'$2$1')", "'cdab'");
+shouldBe("'abcd'.replace(/(ab)(cd)/,'$2$1$')", "'cdab$'");
+shouldBe("'BEGINabcEND'.replace(/abc/,'x$')", "'BEGINx$END'");
+
+var f2c_str, f2c_p1, f2c_offset, f2c_s;
+function f2c(x) {
+    var s = String(x)
+    var test = /(\d+(?:\.\d*)?)F\b/g
+    return s.replace(test,
+          function (str,p1,offset,s) {
+             f2c_str=str; f2c_p1=p1; f2c_offset=offset; f2c_s=s;
+             return ((p1-32) * 5/9) + "C";
+          }
+       )
+ }
+
+shouldBe("f2c('The value is 212F')", "'The value is 100C'");
+shouldBe("f2c_str", "'212F'");
+shouldBe("f2c_p1", "'212'");
+shouldBe("f2c_offset", "13");
+shouldBe("f2c_s", "'The value is 212F'");
+
+// String.prototype.split()
+shouldBe("'axb'.split('x').length", "2");
+shouldBe("'axb'.split('x')[0]", "'a'");
+shouldBe("'axb'.split('x')[1]", "'b'");
+shouldBe("String('abc'.split(''))", "'a,b,c'");
+shouldBe("String('abc'.split(new RegExp()))", "'a,b,c'");
+shouldBe("''.split('').length", "0");
+shouldBe("'axb'.split('x', 0).length", "0");
+shouldBe("'axb'.split('x', 0)[0]", "undefined");
+shouldBe("'axb'.split('x', 1).length", "1");
+shouldBe("'axb'.split('x', 99).length", "2");
+shouldBe("'axb'.split('y') + ''", "'axb'");
+shouldBe("'axb'.split('y').length", "1");
+shouldBe("''.split('x') + ''", "''");
+shouldBe("'abc'.split() + ''", "'abc'");
+shouldBe("'axxb'.split(/x/) + ''", "'a,,b'");
+shouldBe("'axxb'.split(/x+/) + ''", "'a,b'");
+shouldBe("'axxb'.split(/x*/) + ''", "'a,b'");  // NS 4.7 is wrong here
+// moved to evil-n.js shouldBe("''.split(/.*/).length", "0");
+
+// String.prototype.slice()
+shouldBe("'abcdef'.slice(2, 5)", "'cde'");
+shouldBe("'abcdefghijklmnopqrstuvwxyz1234567890'.slice(-32, -6)",
+        "'efghijklmnopqrstuvwxyz1234'");
+
+shouldBe("'abC1'.toUpperCase()", "'ABC1'");
+shouldBe("'AbC2'.toLowerCase()", "'abc2'");
+
+// warning: prototype modification below
+shouldBe("'abc'[0]", "'a'");
+shouldBeUndefined("'abc'[-1]");
+shouldBeUndefined("'abc'[10]");
+String.prototype[10] = "x";
+shouldBe("'abc'[10]", "'x'");
+
+var foo = "This is a test.";
+var bar = foo.link( "javascript:foo( 'This ', 'is ', 'a test' )");
+var html = "<a href=\"javascript:foo( 'This ', 'is ', 'a test' )\">This is a test.</a>"
+shouldBe("bar", "html");
+
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/assignments.js b/LayoutTests/fast/js/kde/resources/assignments.js
new file mode 100644 (file)
index 0000000..5d85462
--- /dev/null
@@ -0,0 +1,13 @@
+// simple assignment
+shouldBe("var i = 1; i", "1");
+shouldBe("j = k = 2", "2");
+shouldBeUndefined("var i; i");
+
+// compound assignments
+shouldBe("var i = 1; i <<= 2", "4");
+shouldBe("var i = 8; i >>= 1", "4");
+shouldBe("var i = 1; i >>= 2", "0");
+shouldBe("var i = -8; i >>= 24", "-1");
+shouldBe("var i = 8; i >>>= 2", "2");
+shouldBe("var i = -8; i >>>= 24", "255");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/base.js b/LayoutTests/fast/js/kde/resources/base.js
new file mode 100644 (file)
index 0000000..95fa28b
--- /dev/null
@@ -0,0 +1,39 @@
+// Utility functions for JS test suite
+// (c) 2001 Harri Porten <porten@kde.org>
+
+function testPassed(msg)
+{
+  debug("PASS. " + msg);
+}
+
+function testFailed(msg)
+{
+  debug("FAIL. " + msg);
+  // regtest.reportResult(false, msg);  
+}
+
+function shouldBe(_a, _b)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBe() expects string arguments");
+  var _av = eval(_a);
+  var _bv = eval(_b);
+
+  if (_av === _bv)
+    testPassed(_a + " is " + _b);
+  else
+    testFailed(_a + " should be " + _bv + ". Was " + _av);
+}
+
+function shouldBeTrue(_a) { shouldBe(_a, "true"); }
+
+function shouldBeFalse(_a) { shouldBe(_a, "false"); }
+
+function shouldBeUndefined(_a)
+{
+  var _av = eval(_a);
+  if (typeof _av == "undefined")
+    testPassed(_a + " is undefined.");
+  else
+    testFailed(_a + " should be undefined. Was " + _av);
+}
diff --git a/LayoutTests/fast/js/kde/resources/cast.js b/LayoutTests/fast/js/kde/resources/cast.js
new file mode 100644 (file)
index 0000000..be0b75f
--- /dev/null
@@ -0,0 +1,5 @@
+shouldBeTrue("Boolean(1) === true");
+shouldBeTrue("var s = String; s(1) === '1'");
+shouldBeTrue("n = Number; n(true) === 1");
+shouldBe("String(Array('a', 'b'        ))", "'a,b'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/comment-1.js b/LayoutTests/fast/js/kde/resources/comment-1.js
new file mode 100644 (file)
index 0000000..af9c3c5
--- /dev/null
@@ -0,0 +1,2 @@
+// comment with linebreak
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/comment-2.js b/LayoutTests/fast/js/kde/resources/comment-2.js
new file mode 100644 (file)
index 0000000..af9c3c5
--- /dev/null
@@ -0,0 +1,2 @@
+// comment with linebreak
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/completion.js b/LayoutTests/fast/js/kde/resources/completion.js
new file mode 100644 (file)
index 0000000..0e04764
--- /dev/null
@@ -0,0 +1,15 @@
+var i = 1;
+
+function foo() {
+  i = 2;
+  return;
+  i = 3;
+}
+
+shouldBe("foo(), i", "2");
+
+var caught = false;
+try { eval("return;"); } catch(e) { caught = true; }
+shouldBeTrue("caught");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/conditional.js b/LayoutTests/fast/js/kde/resources/conditional.js
new file mode 100644 (file)
index 0000000..ed3ad55
--- /dev/null
@@ -0,0 +1,10 @@
+shouldBe("true ? 1 : 2", "1");
+shouldBe("false ? 1 : 2", "2");
+shouldBe("'abc' ? 1 : 2", "1");
+shouldBe("null ? 1 : 2", "2");
+shouldBe("undefined ? 1 : 2", "2");
+var a = 1;
+if ( undefined )
+  a = 2;
+shouldBe("/*var a=1;if (undefined) a = 2;*/ a", "1");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/const.js b/LayoutTests/fast/js/kde/resources/const.js
new file mode 100644 (file)
index 0000000..f41a823
--- /dev/null
@@ -0,0 +1,17 @@
+// constant definition
+const c = 11;
+shouldBe("c", "11");
+
+// attempt to redefine should have no effect
+c = 22;
+shouldBe("c", "11");
+
+const dummy = 0;
+for (var v = 0;;) {
+  ++v;
+  shouldBe("v", "1");
+  break;
+}
+
+// ### check for forbidden redeclaration
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/constructor_length.js b/LayoutTests/fast/js/kde/resources/constructor_length.js
new file mode 100644 (file)
index 0000000..5615221
--- /dev/null
@@ -0,0 +1,16 @@
+shouldBe("Object.length","1");
+shouldBe("Function.length","1");
+shouldBe("Array.length","1");
+shouldBe("String.length","1");
+shouldBe("Boolean.length","1");
+shouldBe("Number.length","1");
+shouldBe("Date.length","7");
+shouldBe("RegExp.length","2");
+shouldBe("Error.length","1");
+shouldBe("EvalError.length","1");
+shouldBe("RangeError.length","1");
+shouldBe("ReferenceError.length","1");
+shouldBe("SyntaxError.length","1");
+shouldBe("TypeError.length","1");
+shouldBe("URIError.length","1");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/crash-1.js b/LayoutTests/fast/js/kde/resources/crash-1.js
new file mode 100644 (file)
index 0000000..64a081b
--- /dev/null
@@ -0,0 +1,9 @@
+// infinite recursion
+try {
+  var v = [];
+  v[0] = v;
+  v.toString();
+} catch (e) {
+  debug("OK. Caught an exception.");
+}
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/crash-2.js b/LayoutTests/fast/js/kde/resources/crash-2.js
new file mode 100644 (file)
index 0000000..fe890c0
--- /dev/null
@@ -0,0 +1,11 @@
+// infinite recursion 2
+function foo() {
+   foo();
+}
+
+try {
+  foo();
+} catch (e) {
+  debug("OK. Caught an exception");
+}
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/delete.js b/LayoutTests/fast/js/kde/resources/delete.js
new file mode 100644 (file)
index 0000000..73bbbd8
--- /dev/null
@@ -0,0 +1,5 @@
+shouldBe("a = 1; delete a;", "true");
+shouldBe("delete nonexistant;", "true");
+shouldBe("delete NaN", "false");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/empty.js b/LayoutTests/fast/js/kde/resources/empty.js
new file mode 100644 (file)
index 0000000..e150377
--- /dev/null
@@ -0,0 +1 @@
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/encode_decode_uri.js b/LayoutTests/fast/js/kde/resources/encode_decode_uri.js
new file mode 100644 (file)
index 0000000..26124bc
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+
+var enc = encodeURI;
+var dec = decodeURI;
+//var enc = encodeURIComponent;
+//var dec = decodeURIComponent;
+
+function printstr(i,j)
+{
+  var str;
+  if (j == undefined)
+    str = "x"+String.fromCharCode(i)+"x";
+  else
+    str = "x"+String.fromCharCode(i)+String.fromCharCode(j)+"x";
+  var encoded = "(exception)";
+  var decoded = "(unknown)";
+  try {
+    encoded = enc(str);
+    decoded = "(exception)";
+    decoded = dec(encoded);
+  }
+  catch (e) {
+  }
+
+  var prefix = i;
+  if (j != undefined)
+    prefix += "/" + j;
+
+  var match;
+  if (encoded == "(exception)" || decoded == "(exception)")
+    match = "";
+  else if (str == decoded)
+    match = " (match)";
+  else
+    match = " (nomatch)";
+
+  print(prefix+": encoded "+encoded+" decoded "+decoded+" "+match);
+}
+
+for (var charcode = 0; charcode <= 0xFFFF; charcode++)
+  printstr(charcode);
+
+for (var charcode = 0xDC00; charcode <= 0xDFFF; charcode++)
+  printstr(0xD800,charcode);
+
+for (var charcode = 0xD800; charcode <= 0xDBFF; charcode++)
+  printstr(charcode,0xD800);
+
+*/
+
+// --------------------------------------------------------------------------------
+
+var resolution = 13; // set to 1 for 100% coverage
+
+function checkEncodeException(encodeFunction,c1,c2)
+{
+  var str;
+  if (c2 == undefined)
+    str = "x"+String.fromCharCode(c1)+"x";
+  else
+    str = "x"+String.fromCharCode(c1)+String.fromCharCode(c2)+"x";
+
+  try {
+    encodeFunction(str);
+//    print("checkEncodeException("+c1+","+c2+"): false");
+    return false;
+  }
+  catch (e) {
+//    print("checkEncodeException("+c1+","+c2+"): true");
+    return true;
+  }
+}
+
+function checkEncodeDecode(encodeFunction,decodeFunction,c1,c2)
+{
+  var str;
+  if (c2 == undefined)
+    str = "x"+String.fromCharCode(c1)+"x";
+  else
+    str = "x"+String.fromCharCode(c1)+String.fromCharCode(c2)+"x";
+
+  try {
+    var encoded = encodeFunction(str);
+    var decoded = decodeFunction(encoded);
+
+//    print("checkEncodeDecode("+c1+","+c2+"): "+(str == decoded));
+    return (str == decoded);
+  }
+  catch (e) {
+//    print("checkEncodeDecode("+c1+","+c2+"): false (exception)");
+    return false;
+  }
+}
+
+
+
+function checkWithFunctions(encodeFunction,decodeFunction)
+{
+  var passes = 0;
+  var failures = 0;
+
+  // 0-0xD800 and 0xDC00-0xFFF
+
+  for (var charcode = 0; charcode < 0xD800; charcode += resolution) {
+    if (checkEncodeDecode(encodeFunction,decodeFunction,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+  for (var charcode = 0xE000; charcode <= 0xFFFF; charcode += resolution) {
+    if (checkEncodeDecode(encodeFunction,decodeFunction,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+  // 0xDC00-0xDFFF
+
+  for (var charcode = 0xDC00; charcode <= 0xDFFF; charcode += resolution) {
+    if (checkEncodeException(encodeFunction,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+  // 0xD800-0xDBFF followed by 0xDC00-0xDFFF
+
+  for (var charcode = 0xD800; charcode < 0xDC00; charcode += resolution) {
+    if (checkEncodeDecode(encodeFunction,decodeFunction,charcode,0xDC00))
+      passes++;
+    else
+      failures++;
+  }
+
+  for (var charcode = 0xDC00; charcode < 0xE000; charcode += resolution) {
+    if (checkEncodeDecode(encodeFunction,decodeFunction,0xD800,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+  // 0xD800-0xDBFF _not_ followed by 0xDC00-0xDFFF
+
+  for (var charcode = 0; charcode < 0xDC00; charcode += resolution) {
+    if (checkEncodeException(encodeFunction,0xD800,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+  for (var charcode = 0xE000; charcode <= 0xFFFF; charcode += resolution) {
+    if (checkEncodeException(encodeFunction,0xD800,charcode))
+      passes++;
+    else
+      failures++;
+  }
+
+//  print("passes = "+passes);
+//  print("failures = "+failures);
+
+  return (failures == 0);
+}
+
+
+
+
+
+
+shouldBe("checkWithFunctions(encodeURI,decodeURI)","true");
+shouldBe("checkWithFunctions(encodeURIComponent,decodeURIComponent)","true");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/eval.js b/LayoutTests/fast/js/kde/resources/eval.js
new file mode 100644 (file)
index 0000000..dae9853
--- /dev/null
@@ -0,0 +1,33 @@
+shouldBe("eval.length", "1");
+shouldBe("eval('this')", "this");
+
+function MyObject() {
+  this.x = 99;
+}
+
+eval("b = new MyObject();");
+var bx = b.x   // rule out side effects of eval() in shouldBe() test function
+shouldBe("bx", "99");
+
+
+eval("var c = new MyObject();"); // the 'var' makes a difference
+var cx = c.x;
+shouldBe("cx", "99");
+
+// KDE bug #45679
+if (true.eval) {
+  var o = { str:1 };
+  shouldBe("o.eval('str')", "1");
+  shouldBe("o.eval('this')", "this");
+} else {
+  testPassed("Skipping test for deprecated Object.prototype.eval()");
+}
+
+// problem from within khtml
+function lotto() {
+  // j must be accessible to eval()
+  for (var j = 0; j < 1; j++)
+    return eval('j');
+}
+shouldBe("lotto()", "0");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/evil-n.js b/LayoutTests/fast/js/kde/resources/evil-n.js
new file mode 100644 (file)
index 0000000..9ab931b
--- /dev/null
@@ -0,0 +1,6 @@
+shouldBeUndefined("(new Error()).message");
+
+// the empty match isn't taken in account
+shouldBe("''.split(/.*/).length", "0");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/exception_propagation.js b/LayoutTests/fast/js/kde/resources/exception_propagation.js
new file mode 100644 (file)
index 0000000..2c82d0a
--- /dev/null
@@ -0,0 +1,424 @@
+var global = this;
+function myfunc() {
+}
+function throwex() {
+  throw new Error("test exception");
+}
+
+//---------------------------
+var func_ret_with_ex_func = 4;
+try {
+  func_ret_with_ex_func = throwex()();
+}
+catch (e) {
+}
+shouldBe("func_ret_with_ex_func", "4");
+
+// ---------------------------------
+
+var func_ret_from_ex_throw_args = 4;
+try {
+  func_ret_from_ex_throw_args = Math.abs(throwex());
+}
+catch (e) {
+}
+shouldBe("func_ret_from_ex_throw_args", "4");
+
+// ---------------------------------
+
+var set_from_throw_func_args = 4;
+try {
+  throwex()(set_from_throw_func_args = 1);
+}
+catch (e) {
+}
+shouldBe("set_from_throw_func_args","4");
+
+// ---------------------------------
+
+var set_from_func_throw_args = 4;
+try {
+  myfunc(throwex(), set_from_func_throw_args = 1);
+}
+catch (e) {
+}
+shouldBe("set_from_func_throw_args","4");
+
+// ---------------------------------
+
+var set_from_before_func_throw_args = 4;
+try {
+  myfunc(set_from_before_func_throw_args = 1, throwex());
+}
+catch (e) {
+}
+shouldBe("set_from_before_func_throw_args","1");
+
+// ---------------------------------
+
+// ### move to function.js
+var function_param_order = "";
+function aparam() {
+  function_param_order += "a";
+}
+function bparam() {
+  function_param_order += "b";
+}
+function cparam() {
+  function_param_order += "c";
+}
+myfunc(aparam(),bparam(),cparam());
+shouldBe("function_param_order","'abc'");
+
+// ---------------------------------
+// ### move to function.js
+var new_param_order = "";
+function anewparam() {
+  new_param_order += "a";
+}
+function bnewparam() {
+  new_param_order += "b";
+}
+function cnewparam() {
+  new_param_order += "c";
+}
+new myfunc(anewparam(),bnewparam(),cnewparam());
+shouldBe("new_param_order","'abc'");
+
+// ---------------------------------
+// ### move to function.js
+var elision_param_order = "";
+function aelision() {
+  elision_param_order += "a";
+}
+function belision() {
+  elision_param_order += "b";
+}
+function celision() {
+  elision_param_order += "c";
+}
+[aelision(),belision(),celision()];
+shouldBe("elision_param_order","'abc'");
+
+// ---------------------------------
+// ### move to function.js
+var comma_order = "";
+function acomma() {
+  comma_order += "a";
+}
+function bcomma() {
+  comma_order += "b";
+}
+function ccomma() {
+  comma_order += "c";
+}
+acomma(),bcomma(),ccomma();
+shouldBe("comma_order","'abc'");
+
+// ---------------------------------
+
+function checkOperator(op,name) {
+  var code =(
+    "global."+name+"_part1 = 4;\n"+
+    "try {\n"+
+    "  ("+name+"_part1 = 1) "+op+" throwex();\n"+
+    "}\n"+
+    "catch (e) {\n"+
+    "}\n"+
+    "shouldBe('"+name+"_part1', '1');\n"+
+    "global."+name+"_part2 = 4;\n"+
+    "try {\n"+
+    "  throwex() "+op+" ("+name+"_part2 = 1);\n"+
+    "}\n"+
+    "catch (e) {\n"+
+    "}\n"+
+    "shouldBe('"+name+"_part2', '4');\n");
+//  print("\n\n\n");
+//  print(code);
+  eval(code);
+}
+
+checkOperator("==","OpEqEq");
+checkOperator("!=","OpNotEq");
+checkOperator("===","OpStrEq");
+checkOperator("!==","OpStrNEq");
+// ### these generate a syntax error in mozilla - kjs should do the same (?)
+//checkOperator("+=","OpPlusEq");
+//checkOperator("-=","OpMinusEq");
+//checkOperator("*=","OpMultEq");
+//checkOperator("/=","OpDivEq");
+//                  OpPlusPlus,
+//               OpMinusMinus,
+checkOperator("<","OpLess");
+checkOperator("<=","OpLessEq");
+checkOperator(">","OpGreater");
+checkOperator(">=","OpGreaterEq");
+//checkOperator("&=","OpAndEq");
+//checkOperator("^=","OpXOrEq");
+//checkOperator("|=","OpOrEq");
+//checkOperator("%=","OpModEq");
+checkOperator("&&","OpAnd");
+checkOperator("||","OpOr");
+checkOperator("&","OpBitAnd");
+checkOperator("^","OpBitXOr");
+checkOperator("|","OpBitOr");
+checkOperator("<<","OpLShift");
+checkOperator(">>","OpRShift");
+checkOperator(">>>","OpURShift");
+//               OpIn,
+checkOperator("instanceof","OpInstanceOf");
+
+// ---------------------------------
+var set_from_if_stmt = 4;
+try {
+  if (throwex()) {
+    set_from_if_stmt = 1;
+  }
+}
+catch (e) {
+}
+shouldBe("set_from_if_stmt","4");
+
+// ---------------------------------
+var set_from_if_else_stmt = 4;
+try {
+  if (throwex()) {
+    set_from_if_else_stmt = 1;
+  }
+  else {
+    undefined;
+  }
+}
+catch (e) {
+}
+shouldBe("set_from_if_else_stmt","4");
+
+// ---------------------------------
+
+var set_from_else_in_if_else_stmt = 4;
+try {
+  if (throwex()) {
+    undefined;
+  }
+  else {
+    set_from_else_in_if_else_stmt = 1;
+  }
+}
+catch (e) {
+}
+shouldBe("set_from_else_in_if_else_stmt","4");
+
+// ---------------------------------
+
+var comma_left = 4;
+try {
+  comma_left = 1, throwex();
+}
+catch (e) {
+}
+shouldBe("comma_left","1");
+
+// ---------------------------------
+
+var comma_left = 4;
+try {
+   throwex(), comma_left = 1;
+}
+catch (e) {
+}
+shouldBe("comma_left","4");
+
+var vardecl_assign_throws = 4;
+try {
+  var vardecl_assign_throws = throwex();
+}
+catch (e) {
+}
+shouldBe("vardecl_assign_throws","4");
+
+// ---------------------------------
+
+var var_assign_before_throw_run = false;
+function var_assign_before_throw() {
+  var_assign_before_throw_run = true;
+  return 1;
+}
+
+var var_assign_after_throw_run = false;
+function var_assign_after_throw() {
+  var_assign_after_throw_run = true;
+  return 1;
+}
+
+try {
+  var var_assign1 = var_assign_before_throw(),
+      var_assign2 = throwex(),
+      var_assign1 = var_assign_before_throw();
+}
+catch (e) {
+}
+shouldBe("var_assign_before_throw_run","true");
+shouldBe("var_assign_after_throw_run","false");
+
+// ---------------------------------
+
+var do_val = 4;
+try {
+  do {
+    do_val++;
+  }
+  while (throwex());
+}
+catch (e) {
+}
+shouldBe("do_val","5");
+
+// ---------------------------------
+var while_val = 4;
+try {
+  while (throwex()) {
+    while_val++;
+  }
+}
+catch (e) {
+}
+shouldBe("while_val","4");
+
+// ---------------------------------
+var for_val_part1_throw2 = 4;
+try {
+  for (for_val_part1_throw2 = 1; throwex(); ) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part1_throw2","1");
+
+// ---------------------------------
+var for_val_part1_throw3 = 4;
+try {
+  for (for_val_part1_throw3 = 1; ; throwex()) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part1_throw3","1");
+
+// ---------------------------------
+var for_val_part2_throw1 = 4;
+try {
+  for (throwex(); for_val_part2_throw1 = 1; ) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part2_throw1","4");
+
+// ---------------------------------
+var for_val_part2_throw3 = 4;
+try {
+  for (; for_val_part2_throw3 = 1; throwex()) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part2_throw3","1");
+
+// ---------------------------------
+var for_val_part3_throw1 = 4;
+try {
+  for (throwex(); ; for_val_part3_throw1 = 1) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part3_throw1","4");
+
+// ---------------------------------
+var for_val_part3_throw2 = 4;
+try {
+  for (; throwex(); for_val_part3_throw2 = 1) {
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part3_throw2","4");
+
+// ---------------------------------
+var for_val_part1_throwbody = 4;
+try {
+  for (for_val_part1_throwbody = 1; ;) {
+    throwex();
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part1_throwbody","1");
+
+// ---------------------------------
+var for_val_part2_throwbody = 4;
+try {
+  for (; for_val_part2_throwbody = 1; ) {
+    throwex();
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part2_throwbody","1");
+
+// ---------------------------------
+var for_val_part3_throwbody = 4;
+try {
+  for (; ; for_val_part3_throwbody = 1) {
+    throwex();
+  }
+}
+catch (e) {
+}
+shouldBe("for_val_part3_throwbody","4");
+
+// ---------------------------------
+// ### mozilla gives a syntax error on for (throwex() in forin_test_obj)... should we?
+var forin_test_obj = new Object();
+forin_test_obj.a = 1;
+forin_test_obj.b = 2;
+forin_test_obj.c = 3;
+var forin_count = 4;
+function forin_lexpr() {
+//  if (forincount == 1);
+//    throwex();
+  return new Object();
+}
+try {
+  for (throwex() in forin_test_obj) {
+    forin_count++;
+  }
+}
+catch (e) {
+}
+shouldBe("forin_count","4");
+
+// ---------------------------------
+var set_inside_with_throw = 4;
+try {
+  with (throwex()) {
+    set_inside_with_throw = 1;
+  }
+}
+catch (e) {
+}
+shouldBe("set_inside_with_throw","4");
+
+// ---------------------------------
+var set_inside_with_cantconverttoobject = 4;
+try {
+  with (undefined) {
+    print("FAIL. This message should not be displayed");
+    set_inside_with_cantconverttoobject = 1;
+  }
+}
+catch (e) {
+}
+shouldBe("set_inside_with_cantconverttoobject","4");
+// ### test case, sw
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/exceptions.js b/LayoutTests/fast/js/kde/resources/exceptions.js
new file mode 100644 (file)
index 0000000..d685747
--- /dev/null
@@ -0,0 +1,105 @@
+function shouldBe(a, b, c)
+{
+  if ( a == b )
+   debug(c+" .......... PASS");
+  else
+   debug(c+" .......... FAIL");
+}
+
+function testThrow()
+{
+  var caught = false;
+  try {
+    throw 99;
+  } catch (e) {
+    caught = true;
+  }
+  shouldBe(caught, true, "testing throw()");
+}
+
+// same as above but lacking a semicolon after throw
+function testThrow2()
+{
+  var caught = false;
+  try {
+    throw 99
+  } catch (e) {
+    caught = true;
+  }
+  shouldBe(caught, true, "testing throw()");
+}
+
+function testReferenceError()
+{
+  var err = "noerror";
+  var caught = false;
+  try {
+    var dummy = nonexistant; // throws reference error
+  } catch (e) {
+    caught = true;
+    err = e.name;
+  }
+  // test err
+  shouldBe(caught, true, "ReferenceError");
+}
+
+function testFunctionErrorHelper()
+{
+   var a = b;  // throws reference error
+}
+
+function testFunctionError()
+{
+  var caught = false;
+  try {
+    testFunctionErrorHelper();
+  } catch (e) {
+    caught = true;
+  }
+  shouldBe(caught, true, "error propagation in functions");
+}
+
+function testMathFunctionError()
+{
+  var caught = false;
+  try {
+    Math();
+  } catch (e) {
+    debug("catch");
+    caught = true;
+  } finally {
+    debug("finally");
+  }
+  shouldBe(caught, true, "Math() error");
+}
+
+function testWhileAbortion()
+{
+  var caught = 0;
+  try { 
+    while (a=b, 1) {   // "endless error" in condition
+      ;
+    }
+  } catch (e) {
+    caught++;
+  }
+
+  try { 
+    while (1) {
+      var a = b;       // error in body
+    }
+  } catch (e) {
+    caught++;
+  }
+  shouldBe(caught, 2, "Abort while() on error");
+}
+
+debug("Except a lot of errors. They should all be caught and lead to PASS");
+testThrow();
+testThrow2();
+testReferenceError();
+testFunctionError();
+testMathFunctionError();
+testWhileAbortion();
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/function.js b/LayoutTests/fast/js/kde/resources/function.js
new file mode 100644 (file)
index 0000000..04573ab
--- /dev/null
@@ -0,0 +1,222 @@
+///////////////////////////////
+// empty bodies
+
+function empty1() { ; }
+shouldBe("empty1()", "undefined");
+
+function empty2() { }
+shouldBe("empty2()", "undefined");
+
+var g = 2;
+var obj = new Object();
+with (obj) {
+  obj.func = function(a) { return g*l*a; };
+}
+obj.l = 3;
+
+shouldBe("obj.func(11)", "66");
+
+///////////////////////////////
+
+function ctor(xx) {
+  this.x = xx;
+  this.dummy = new Array();  // once broke the returned completion
+}
+
+c = new ctor(11);
+shouldBe("c.x", "11");
+
+///////////////////////////////
+// anonymous functions
+///////////////////////////////
+
+f = function (arg) {
+  return arg;
+};
+
+
+shouldBe("f('bbbbb')", "'bbbbb'");
+
+
+function f() {return 1;};
+
+// just verify that this can be parsed
+Math.round(function anon() { });
+
+///////////////////////////////
+// arguments object
+///////////////////////////////
+
+function foo() {
+  var result = "|";
+  for (i = 0; i < arguments.length; i++)
+    result += arguments[i] + "|";
+  return result;
+}
+
+shouldBe("foo()", "'|'");
+shouldBe("foo('bar')", "'|bar|'");
+shouldBe("foo('bar', 'x')", "'|bar|x|'");
+
+function foo2(a) {
+  var i = 0;
+  for(a in arguments) // should NOT be enumerable
+    i++;
+  return i;
+}
+
+shouldBe("foo2(7)", "0");
+
+// I have my doubts about the standard conformance of this
+function foo3(i, j) {
+  switch(i) {
+    case 0:
+       return foo3.arguments.length;
+    case 1:
+       return foo3.arguments;
+    case 2:
+       return foo3.j;
+  }
+}
+
+shouldBe("foo3(0, 99)", "2");
+shouldBe("foo3(1, 99).length", "2");
+//shouldBe("foo3(2, 99)", "99"); // IE doesn't support this either
+
+///////////////////////////////
+// nested function declarations
+///////////////////////////////
+
+function nest0(a, b)
+{
+  function nest1(c) { return c*c; }
+  return nest1(a*b);
+}
+shouldBe("nest0(2,3)", "36");
+
+///////////////////////////////
+// Function object
+///////////////////////////////
+
+shouldBe("(new Function('return 11;'))()", "11");
+shouldBe("(new Function('', 'return 22;'))()", "22");
+shouldBe("(new Function('a', 'b', 'return a*b;'))(11, 3)", "33");
+shouldBe("(new Function(' a ', ' b ', 'return a*b;'))(11, 4)", "44");
+shouldBe("(new Function(' a,b ', ' c ', 'return a*b;'))(11, 5)", "55");
+shouldBe("(new Function(' a,b ', ' c3 ', 'return a*b;'))(11, 6)", "66");
+
+
+///////////////////////////////
+// length property
+function funcp3(a, b, c) { }
+shouldBe("funcp3.length", "3");
+shouldBe("(function(a, b, c, d) { }).length", "4");
+shouldBe("(new Function('a', 'b', '')).length", "2");
+
+// recursive call
+function f4(i)
+{
+   return i == 1 ? 1 : i*f4(i-1);
+}
+
+shouldBe("f4(4)", "24");
+
+function f5(a) {
+  return f6();
+}
+
+function f6() { 
+  return f5.arguments[0];
+}
+
+shouldBe("f5(11)", "11");
+shouldBe("f5.arguments", "null");
+
+///////////////////////////////
+// calling conventions
+///////////////////////////////
+
+function manipulate(x) {
+   x[0] = 99;          // should operate on reference
+   x = "nothing";      // should detach
+}
+var arr = new Array(1, 2, 3);
+manipulate(arr);
+shouldBe("arr[0]", "99");
+arr = [1, 2, 3];
+manipulate(arr);
+shouldBe("arr[0]", "99");
+
+///////////////////////////////
+// toString() on functions
+///////////////////////////////
+
+function orgFunc(s) { return 'Hello ' + s; }
+eval("var orgFuncClone = " + orgFunc);
+shouldBe("typeof orgFuncClone", "'function'");
+shouldBe("orgFuncClone('world')", "'Hello world'");
+
+function groupFunc(a, b) { return (a+b)*3; } // check for () being preserved
+eval("var groupClone = " + groupFunc);
+shouldBe("groupClone(1, 2)", "9");
+
+var sinStr = '\nfunction sin() {\n    [native code]\n}\n'
+shouldBe("String(Math.sin)", "sinStr");
+
+///////////////////////////////
+// shadowed functions
+///////////////////////////////
+
+function shadow() { return 1; }
+function shadow() { return 2; }
+shouldBe("shadow()", "2");
+
+///////////////////////////////
+// nested functions
+
+var nest_property = "global nest";
+
+function nested_outer() {
+
+  function nested_inner() {
+    return nest_property;
+  }
+
+}
+
+function not_nested() {
+  return nest_property;
+}
+
+nested_outer.nest_property = "outer nest";
+
+var nested = nested_outer.nested_inner;
+var nestedret = nested();
+shouldBe("nestedret","'outer nest'");
+
+var not_nestedret = not_nested();
+shouldBe("not_nestedret","'global nest'");
+
+///////////////////////////////
+// other properties
+///////////////////////////////
+function sample() { }
+shouldBeUndefined("sample.prototype.prototype");
+shouldBeTrue("sample.prototype.constructor == sample");
+
+var caught = false;
+try {
+  sample.apply(1, 1); // invalid argument
+} catch(dummy) {
+  caught = true;
+}
+shouldBeTrue("caught");
+
+
+function functionWithVarOverride(a) {
+  var a = 2;
+  return a;
+}
+
+shouldBe("functionWithVarOverride(1)", "2");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/function_arguments.js b/LayoutTests/fast/js/kde/resources/function_arguments.js
new file mode 100644 (file)
index 0000000..e4f8378
--- /dev/null
@@ -0,0 +1,92 @@
+// check value of arguments inside recursion
+
+var expected = [null,99,1,2,3,3,2,1,99,null];
+var expno = 0;
+
+var x = 0;
+shouldBe("mf.arguments", "expected[expno++]");
+function mf(a,b) {
+  shouldBe("mf.arguments[0]", "expected[expno++]");
+  x++;
+  if (x < 4)
+    mf(x,1);
+  shouldBe("mf.arguments[0]", "expected[expno++]");
+  return b;
+}
+mf(99);
+shouldBe("mf.arguments", "expected[expno++]");
+
+
+// check internal properties of arguments
+
+// Delete
+
+
+// DontEnum
+var foundArgs = false;
+
+var ReadOnlyOK = false;
+var DontDeleteOK = false;
+var DontEnumOK = false;
+function f(a,b,c) {
+
+  // ReadOnly
+  var newargs = new Object();
+  var oldargs = f.arguments;
+  f.arguments = newargs;
+  ReadOnlyOK = (f.arguments == oldargs);
+
+  // DontDelete
+  DontDeleteOK = !delete(f.arguments);
+  if (f.arguments != oldargs)
+    DontDeleteOK = false;
+
+  // DontEnum
+  var foundArgs = false;
+  for (i in f) {
+    if (f == "arguments")
+      foundArgs = true;
+  }
+  DontEnumOK = !foundArgs;
+}
+f(1,2,3);
+shouldBeTrue("ReadOnlyOK");
+shouldBeTrue("DontDeleteOK");
+shouldBeTrue("DontEnumOK");
+
+// Check that parameter variables are bound to the corresponding
+// elements in the arguments array
+var arg0 = null;
+var arg1 = null;
+var arg2 = null;
+var newarg0 = null;
+var newarg1 = null;
+var newarg2 = null;
+var newx = null;
+var arglength = 0;
+
+function dupargs(x,x,x)
+{
+  arg0 = arguments[0];
+  arg1 = arguments[1];
+  arg2 = arguments[2];
+  arglength = arguments.length;
+  x = 999;
+  newarg0 = arguments[0];
+  newarg1 = arguments[1];
+  newarg2 = arguments[2];
+  arguments[2] = 888;
+  newx = x;
+}
+
+dupargs(1,2,3);
+
+shouldBe("arg0","1");
+shouldBe("arg1","2");
+shouldBe("arg2","3");
+shouldBe("arglength","3");
+shouldBe("newarg0","1");
+shouldBe("newarg1","2");
+shouldBe("newarg2","999");
+shouldBe("newx","888");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/function_constructor.js b/LayoutTests/fast/js/kde/resources/function_constructor.js
new file mode 100644 (file)
index 0000000..b8cf998
--- /dev/null
@@ -0,0 +1,11 @@
+var myfunc = Function();
+shouldBe("myfunc.prototype.constructor.__proto__ == Function.prototype","true");
+shouldBe("myfunc.prototype.constructor.__proto__.__proto__ == Object.prototype","true");
+shouldBe("myfunc.prototype.constructor == myfunc","true");
+shouldBe("Function.prototype.constructor == Function","true");
+shouldBe("myfunc.prototype.toString == Object.prototype.toString","true");
+shouldBe("myfunc.toString == Function.prototype.toString","true");
+
+//printValue("myfunc"); = "(Internal function)" ### should display code
+//printValue("myfunc.prototype.constructor"); = "(Internal function)" ### should display code
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/function_length.js b/LayoutTests/fast/js/kde/resources/function_length.js
new file mode 100644 (file)
index 0000000..1341af1
--- /dev/null
@@ -0,0 +1,123 @@
+shouldBe("Array.prototype.toString.length","0");
+shouldBe("Array.prototype.toLocaleString.length","0");
+shouldBe("Array.prototype.concat.length","0");
+shouldBe("Array.prototype.join.length","1");
+shouldBe("Array.prototype.pop.length","0");
+shouldBe("Array.prototype.push.length","1");
+shouldBe("Array.prototype.reverse.length","0");
+shouldBe("Array.prototype.shift.length","0");
+shouldBe("Array.prototype.slice.length","2"); // 15.4.4.10
+shouldBe("Array.prototype.sort.length","1");
+shouldBe("Array.prototype.splice.length","2"); // 15.4.4.12
+shouldBe("Array.prototype.unshift.length","1");
+shouldBe("Boolean.prototype.toString.length","0");
+shouldBe("Boolean.prototype.valueOf.length","0");
+shouldBe("Date.prototype.toString.length","0");
+shouldBe("Date.prototype.toUTCString.length","0");
+shouldBe("Date.prototype.toDateString.length","0");
+shouldBe("Date.prototype.toTimeString.length","0");
+shouldBe("Date.prototype.toLocaleString.length","0");
+shouldBe("Date.prototype.toLocaleDateString.length","0");
+shouldBe("Date.prototype.toLocaleTimeString.length","0");
+shouldBe("Date.prototype.valueOf.length","0");
+shouldBe("Date.prototype.getTime.length","0");
+shouldBe("Date.prototype.getFullYear.length","0");
+shouldBe("Date.prototype.getUTCFullYear.length","0");
+shouldBe("Date.prototype.toGMTString.length","0");
+shouldBe("Date.prototype.getMonth.length","0");
+shouldBe("Date.prototype.getUTCMonth.length","0");
+shouldBe("Date.prototype.getDate.length","0");
+shouldBe("Date.prototype.getUTCDate.length","0");
+shouldBe("Date.prototype.getDay.length","0");
+shouldBe("Date.prototype.getUTCDay.length","0");
+shouldBe("Date.prototype.getHours.length","0");
+shouldBe("Date.prototype.getUTCHours.length","0");
+shouldBe("Date.prototype.getMinutes.length","0");
+shouldBe("Date.prototype.getUTCMinutes.length","0");
+shouldBe("Date.prototype.getSeconds.length","0");
+shouldBe("Date.prototype.getUTCSeconds.length","0");
+shouldBe("Date.prototype.getMilliseconds.length","0");
+shouldBe("Date.prototype.getUTCMilliseconds.length","0");
+shouldBe("Date.prototype.getTimezoneOffset.length","0");
+shouldBe("Date.prototype.setTime.length","1");
+shouldBe("Date.prototype.setMilliseconds.length","1");
+shouldBe("Date.prototype.setUTCMilliseconds.length","1");
+shouldBe("Date.prototype.setSeconds.length","2");
+shouldBe("Date.prototype.setUTCSeconds.length","2");
+shouldBe("Date.prototype.setMinutes.length","3");
+shouldBe("Date.prototype.setUTCMinutes.length","3");
+shouldBe("Date.prototype.setHours.length","4");
+shouldBe("Date.prototype.setUTCHours.length","4");
+shouldBe("Date.prototype.setDate.length","1");
+shouldBe("Date.prototype.setUTCDate.length","1");
+shouldBe("Date.prototype.setMonth.length","2");
+shouldBe("Date.prototype.setUTCMonth.length","2");
+shouldBe("Date.prototype.setFullYear.length","3");
+shouldBe("Date.prototype.setUTCFullYear.length","3");
+shouldBe("Date.prototype.setYear.length","1");
+shouldBe("Date.prototype.getYear.length","0");
+shouldBe("Date.prototype.toGMTString.length","0");
+shouldBe("Error.prototype.toString.length","0");
+shouldBe("eval.length","1");
+shouldBe("parseInt.length","2");
+shouldBe("parseFloat.length","1");
+shouldBe("isNaN.length","1");
+shouldBe("isFinite.length","1");
+shouldBe("escape.length","1");
+shouldBe("unescape.length","1");
+shouldBe("Math.abs.length","1");
+shouldBe("Math.acos.length","1");
+shouldBe("Math.asin.length","1");
+shouldBe("Math.atan.length","1");
+shouldBe("Math.atan2.length","2");
+shouldBe("Math.ceil.length","1");
+shouldBe("Math.cos.length","1");
+shouldBe("Math.exp.length","1");
+shouldBe("Math.floor.length","1");
+shouldBe("Math.log.length","1");
+shouldBe("Math.max.length","2");
+shouldBe("Math.min.length","2");
+shouldBe("Math.pow.length","2");
+shouldBe("Math.random.length","0");
+shouldBe("Math.round.length","1");
+shouldBe("Math.sin.length","1");
+shouldBe("Math.sqrt.length","1");
+shouldBe("Math.tan.length","1");
+shouldBe("Object.prototype.toString.length","0");
+shouldBe("Object.prototype.valueOf.length","0");
+shouldBe("RegExp.prototype.exec.length","0");
+shouldBe("RegExp.prototype.test.length","0");
+shouldBe("RegExp.prototype.toString.length","0");
+shouldBe("String.fromCharCode.length","1");
+shouldBe("String.prototype.toString.length","0");
+shouldBe("String.prototype.valueOf.length","0");
+shouldBe("String.prototype.charAt.length","1");
+shouldBe("String.prototype.charCodeAt.length","1");
+shouldBe("String.prototype.indexOf.length","1");
+shouldBe("String.prototype.lastIndexOf.length","1");
+shouldBe("String.prototype.match.length","1");
+shouldBe("String.prototype.replace.length","2");
+shouldBe("String.prototype.search.length","1");
+shouldBe("String.prototype.slice.length","2"); // 15.5.4.13
+shouldBe("String.prototype.split.length","2"); // 15.5.4.14
+shouldBe("String.prototype.substr.length","2");
+shouldBe("String.prototype.substring.length","2");
+shouldBe("String.prototype.toLowerCase.length","0");
+shouldBe("String.prototype.toUpperCase.length","0");
+shouldBe("String.prototype.big.length","0");
+shouldBe("String.prototype.small.length","0");
+shouldBe("String.prototype.blink.length","0");
+shouldBe("String.prototype.bold.length","0");
+shouldBe("String.prototype.fixed.length","0");
+shouldBe("String.prototype.italics.length","0");
+shouldBe("String.prototype.strike.length","0");
+shouldBe("String.prototype.sub.length","0");
+shouldBe("String.prototype.sup.length","0");
+shouldBe("String.prototype.fontcolor.length","1");
+shouldBe("String.prototype.fontsize.length","1");
+shouldBe("String.prototype.anchor.length","1");
+shouldBe("String.prototype.link.length","1");
+shouldBe("Number.prototype.toString.length", "1");
+shouldBe("Number.prototype.valueOf.length", "0");
+shouldBe("Number.prototype.toFixed.length", "1");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/garbage-n.js b/LayoutTests/fast/js/kde/resources/garbage-n.js
new file mode 100644 (file)
index 0000000..a780bd0
--- /dev/null
@@ -0,0 +1,2 @@
+invalid code
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/inbuilt_function_proto.js b/LayoutTests/fast/js/kde/resources/inbuilt_function_proto.js
new file mode 100644 (file)
index 0000000..0d98d54
--- /dev/null
@@ -0,0 +1,96 @@
+shouldBe("Object.prototype.toString.__proto__","Function.prototype");
+shouldBe("Object.prototype.valueOf.__proto__","Function.prototype");
+shouldBe("Array.prototype.toString.__proto__","Function.prototype");
+shouldBe("Array.prototype.toLocaleString.__proto__","Function.prototype");
+shouldBe("Array.prototype.concat.__proto__","Function.prototype");
+shouldBe("Array.prototype.join.__proto__","Function.prototype");
+shouldBe("Array.prototype.pop.__proto__","Function.prototype");
+shouldBe("Array.prototype.push.__proto__","Function.prototype");
+shouldBe("Array.prototype.reverse.__proto__","Function.prototype");
+shouldBe("Array.prototype.shift.__proto__","Function.prototype");
+shouldBe("Array.prototype.slice.__proto__","Function.prototype");
+shouldBe("Array.prototype.sort.__proto__","Function.prototype");
+shouldBe("Array.prototype.splice.__proto__","Function.prototype");
+shouldBe("Array.prototype.unshift.__proto__","Function.prototype");
+shouldBe("String.prototype.toString.__proto__","Function.prototype");
+shouldBe("String.prototype.valueOf.__proto__","Function.prototype");
+shouldBe("String.prototype.charAt.__proto__","Function.prototype");
+shouldBe("String.prototype.charCodeAt.__proto__","Function.prototype");
+shouldBe("String.prototype.indexOf.__proto__","Function.prototype");
+shouldBe("String.prototype.lastIndexOf.__proto__","Function.prototype");
+shouldBe("String.prototype.match.__proto__","Function.prototype");
+shouldBe("String.prototype.replace.__proto__","Function.prototype");
+shouldBe("String.prototype.search.__proto__","Function.prototype");
+shouldBe("String.prototype.slice.__proto__","Function.prototype");
+shouldBe("String.prototype.split.__proto__","Function.prototype");
+shouldBe("String.prototype.substr.__proto__","Function.prototype");
+shouldBe("String.prototype.substring.__proto__","Function.prototype");
+shouldBe("String.prototype.toLowerCase.__proto__","Function.prototype");
+shouldBe("String.prototype.toUpperCase.__proto__","Function.prototype");
+shouldBe("String.prototype.big.__proto__","Function.prototype");
+shouldBe("String.prototype.small.__proto__","Function.prototype");
+shouldBe("String.prototype.blink.__proto__","Function.prototype");
+shouldBe("String.prototype.bold.__proto__","Function.prototype");
+shouldBe("String.prototype.fixed.__proto__","Function.prototype");
+shouldBe("String.prototype.italics.__proto__","Function.prototype");
+shouldBe("String.prototype.strike.__proto__","Function.prototype");
+shouldBe("String.prototype.sub.__proto__","Function.prototype");
+shouldBe("String.prototype.sup.__proto__","Function.prototype");
+shouldBe("String.prototype.fontcolor.__proto__","Function.prototype");
+shouldBe("String.prototype.fontsize.__proto__","Function.prototype");
+shouldBe("String.prototype.anchor.__proto__","Function.prototype");
+shouldBe("String.prototype.link.__proto__","Function.prototype");
+shouldBe("Boolean.prototype.toString.__proto__","Function.prototype");
+shouldBe("Boolean.prototype.valueOf.__proto__","Function.prototype");
+shouldBe("Date.prototype.toString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toUTCString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toDateString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toTimeString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toLocaleString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toLocaleDateString.__proto__","Function.prototype");
+shouldBe("Date.prototype.toLocaleTimeString.__proto__","Function.prototype");
+shouldBe("Date.prototype.valueOf.__proto__","Function.prototype");
+shouldBe("Date.prototype.getTime.__proto__","Function.prototype");
+shouldBe("Date.prototype.getFullYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCFullYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.toGMTString.__proto__","Function.prototype");
+shouldBe("Date.prototype.getMonth.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCMonth.__proto__","Function.prototype");
+shouldBe("Date.prototype.getDate.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCDate.__proto__","Function.prototype");
+shouldBe("Date.prototype.getDay.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCDay.__proto__","Function.prototype");
+shouldBe("Date.prototype.getHours.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCHours.__proto__","Function.prototype");
+shouldBe("Date.prototype.getMinutes.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCMinutes.__proto__","Function.prototype");
+shouldBe("Date.prototype.getSeconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCSeconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.getMilliseconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.getUTCMilliseconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.getTimezoneOffset.__proto__","Function.prototype");
+shouldBe("Date.prototype.setTime.__proto__","Function.prototype");
+shouldBe("Date.prototype.setMilliseconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCMilliseconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.setSeconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCSeconds.__proto__","Function.prototype");
+shouldBe("Date.prototype.setMinutes.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCMinutes.__proto__","Function.prototype");
+shouldBe("Date.prototype.setHours.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCHours.__proto__","Function.prototype");
+shouldBe("Date.prototype.setDate.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCDate.__proto__","Function.prototype");
+shouldBe("Date.prototype.setMonth.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCMonth.__proto__","Function.prototype");
+shouldBe("Date.prototype.setFullYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.setUTCFullYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.setYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.getYear.__proto__","Function.prototype");
+shouldBe("Date.prototype.toGMTString.__proto__","Function.prototype");
+shouldBe("RegExp.prototype.exec.__proto__","Function.prototype");
+shouldBe("RegExp.prototype.test.__proto__","Function.prototype");
+shouldBe("RegExp.prototype.toString.__proto__","Function.prototype");
+shouldBe("Error.prototype.toString.__proto__","Function.prototype");
+
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/inbuilt_function_tostring.js b/LayoutTests/fast/js/kde/resources/inbuilt_function_tostring.js
new file mode 100644 (file)
index 0000000..9bd874b
--- /dev/null
@@ -0,0 +1,173 @@
+   function StripSpaces( s ) {
+        for ( var currentChar = 0, strippedString="";
+                currentChar < s.length; currentChar++ )
+        {
+            if (!IsWhiteSpace(s.charAt(currentChar))) {
+                strippedString += s.charAt(currentChar);
+            }
+        }
+        return strippedString;
+    }
+
+    function IsWhiteSpace( string ) {
+        var cc = string.charCodeAt(0);
+        switch (cc) {
+            case (0x0009):
+            case (0x000B):
+            case (0x000C):
+            case (0x0020):
+            case (0x000A):
+            case (0x000D):
+            case ( 59 ): // let's strip out semicolons, too
+                return true;
+                break;
+            default:
+                return false;
+        }
+    }
+
+
+shouldBe("StripSpaces(eval.toString())","\"functioneval(){[nativecode]}\"");
+shouldBe("StripSpaces(parseInt.toString())","\"functionparseInt(){[nativecode]}\"");
+shouldBe("StripSpaces(parseFloat.toString())","\"functionparseFloat(){[nativecode]}\"");
+shouldBe("StripSpaces(isNaN.toString())","\"functionisNaN(){[nativecode]}\"");
+shouldBe("StripSpaces(isFinite.toString())","\"functionisFinite(){[nativecode]}\"");
+shouldBe("StripSpaces(escape.toString())","\"functionescape(){[nativecode]}\"");
+shouldBe("StripSpaces(unescape.toString())","\"functionunescape(){[nativecode]}\"");
+shouldBe("StripSpaces(kjsprint.toString())","\"functionkjsprint(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Object.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Object.prototype.toLocaleString.toString())","\"functiontoLocaleString(){[nativecode]}\"");
+shouldBe("StripSpaces(Object.prototype.valueOf.toString())","\"functionvalueOf(){[nativecode]}\"");
+shouldBe("StripSpaces(Object.prototype.hasOwnProperty.toString())","\"functionhasOwnProperty(){[nativecode]}\"");
+shouldBe("StripSpaces(Object.prototype.isPrototypeOf.toString())","\"functionisPrototypeOf(){[nativecode]}\"");
+shouldBe("StripSpaces(Object.prototype.propertyIsEnumerable.toString())","\"functionpropertyIsEnumerable(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Function.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Function.prototype.apply.toString())","\"functionapply(){[nativecode]}\"");
+shouldBe("StripSpaces(Function.prototype.call.toString())","\"functioncall(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Array.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.toLocaleString.toString())","\"functiontoLocaleString(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.concat.toString())","\"functionconcat(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.join.toString())","\"functionjoin(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.pop.toString())","\"functionpop(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.push.toString())","\"functionpush(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.reverse.toString())","\"functionreverse(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.shift.toString())","\"functionshift(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.slice.toString())","\"functionslice(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.sort.toString())","\"functionsort(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.splice.toString())","\"functionsplice(){[nativecode]}\"");
+shouldBe("StripSpaces(Array.prototype.unshift.toString())","\"functionunshift(){[nativecode]}\"");
+
+shouldBe("StripSpaces(String.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.valueOf.toString())","\"functionvalueOf(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.charAt.toString())","\"functioncharAt(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.charCodeAt.toString())","\"functioncharCodeAt(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.concat.toString())","\"functionconcat(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.indexOf.toString())","\"functionindexOf(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.lastIndexOf.toString())","\"functionlastIndexOf(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.match.toString())","\"functionmatch(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.replace.toString())","\"functionreplace(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.search.toString())","\"functionsearch(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.slice.toString())","\"functionslice(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.split.toString())","\"functionsplit(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.substr.toString())","\"functionsubstr(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.substring.toString())","\"functionsubstring(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.toLowerCase.toString())","\"functiontoLowerCase(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.toUpperCase.toString())","\"functiontoUpperCase(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.big.toString())","\"functionbig(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.small.toString())","\"functionsmall(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.blink.toString())","\"functionblink(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.bold.toString())","\"functionbold(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.fixed.toString())","\"functionfixed(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.italics.toString())","\"functionitalics(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.strike.toString())","\"functionstrike(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.sub.toString())","\"functionsub(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.sup.toString())","\"functionsup(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.fontcolor.toString())","\"functionfontcolor(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.fontsize.toString())","\"functionfontsize(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.anchor.toString())","\"functionanchor(){[nativecode]}\"");
+shouldBe("StripSpaces(String.prototype.link.toString())","\"functionlink(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Boolean.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Boolean.prototype.valueOf.toString())","\"functionvalueOf(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Number.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Number.prototype.toLocaleString.toString())","\"functiontoLocaleString(){[nativecode]}\"");
+shouldBe("StripSpaces(Number.prototype.valueOf.toString())","\"functionvalueOf(){[nativecode]}\"");
+shouldBe("StripSpaces(Number.prototype.toFixed.toString())","\"functiontoFixed(){[nativecode]}\"");
+shouldBe("StripSpaces(Number.prototype.toExponential.toString())","\"functiontoExponential(){[nativecode]}\"");
+shouldBe("StripSpaces(Number.prototype.toPrecision.toString())","\"functiontoPrecision(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Math.abs.toString())","\"functionabs(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.acos.toString())","\"functionacos(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.asin.toString())","\"functionasin(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.atan.toString())","\"functionatan(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.atan2.toString())","\"functionatan2(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.ceil.toString())","\"functionceil(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.cos.toString())","\"functioncos(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.exp.toString())","\"functionexp(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.floor.toString())","\"functionfloor(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.log.toString())","\"functionlog(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.max.toString())","\"functionmax(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.min.toString())","\"functionmin(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.pow.toString())","\"functionpow(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.random.toString())","\"functionrandom(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.round.toString())","\"functionround(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.sin.toString())","\"functionsin(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.sqrt.toString())","\"functionsqrt(){[nativecode]}\"");
+shouldBe("StripSpaces(Math.tan.toString())","\"functiontan(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Date.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toUTCString.toString())","\"functiontoUTCString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toDateString.toString())","\"functiontoDateString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toTimeString.toString())","\"functiontoTimeString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toLocaleString.toString())","\"functiontoLocaleString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toLocaleDateString.toString())","\"functiontoLocaleDateString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toLocaleTimeString.toString())","\"functiontoLocaleTimeString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.valueOf.toString())","\"functionvalueOf(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getTime.toString())","\"functiongetTime(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getFullYear.toString())","\"functiongetFullYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCFullYear.toString())","\"functiongetUTCFullYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toGMTString.toString())","\"functiontoGMTString(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getMonth.toString())","\"functiongetMonth(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCMonth.toString())","\"functiongetUTCMonth(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getDate.toString())","\"functiongetDate(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCDate.toString())","\"functiongetUTCDate(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getDay.toString())","\"functiongetDay(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCDay.toString())","\"functiongetUTCDay(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getHours.toString())","\"functiongetHours(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCHours.toString())","\"functiongetUTCHours(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getMinutes.toString())","\"functiongetMinutes(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCMinutes.toString())","\"functiongetUTCMinutes(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getSeconds.toString())","\"functiongetSeconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCSeconds.toString())","\"functiongetUTCSeconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getMilliseconds.toString())","\"functiongetMilliseconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getUTCMilliseconds.toString())","\"functiongetUTCMilliseconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getTimezoneOffset.toString())","\"functiongetTimezoneOffset(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setTime.toString())","\"functionsetTime(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setMilliseconds.toString())","\"functionsetMilliseconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCMilliseconds.toString())","\"functionsetUTCMilliseconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setSeconds.toString())","\"functionsetSeconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCSeconds.toString())","\"functionsetUTCSeconds(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setMinutes.toString())","\"functionsetMinutes(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCMinutes.toString())","\"functionsetUTCMinutes(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setHours.toString())","\"functionsetHours(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCHours.toString())","\"functionsetUTCHours(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setDate.toString())","\"functionsetDate(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCDate.toString())","\"functionsetUTCDate(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setMonth.toString())","\"functionsetMonth(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCMonth.toString())","\"functionsetUTCMonth(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setFullYear.toString())","\"functionsetFullYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setUTCFullYear.toString())","\"functionsetUTCFullYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.setYear.toString())","\"functionsetYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.getYear.toString())","\"functiongetYear(){[nativecode]}\"");
+shouldBe("StripSpaces(Date.prototype.toGMTString.toString())","\"functiontoGMTString(){[nativecode]}\"");
+
+shouldBe("StripSpaces(RegExp.prototype.exec.toString())","\"functionexec(){[nativecode]}\"");
+shouldBe("StripSpaces(RegExp.prototype.test.toString())","\"functiontest(){[nativecode]}\"");
+shouldBe("StripSpaces(RegExp.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+
+shouldBe("StripSpaces(Error.prototype.toString.toString())","\"functiontoString(){[nativecode]}\"");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/iteration.js b/LayoutTests/fast/js/kde/resources/iteration.js
new file mode 100644 (file)
index 0000000..faa879a
--- /dev/null
@@ -0,0 +1,56 @@
+// 12.6.1
+var count = 0;
+do {
+  count++;
+} while (count < 10);
+shouldBe("count", "10");
+
+count = 0;
+for (var i = 0; i < 10; i++) {
+  if (i == 5)
+    break;
+  count++;
+}
+shouldBe("count", "5");
+
+// 12.6.3
+count = 0;
+for (i = 0; i < 10; i++) {
+  count++;
+}
+shouldBe("count", "10");
+
+// 12.6.4
+obj = new Object();
+obj.a = 11;
+obj.b = 22;
+
+properties = "";
+for ( prop in obj )
+  properties += (prop + "=" + obj[prop] + ";");
+
+shouldBe("properties", "'a=11;b=22;'");
+
+// now a test verifying the order. not standardized but common.
+obj.y = 33;
+obj.x = 44;
+properties = "";
+for ( prop in obj )
+  properties += prop;
+// shouldBe("properties", "'abyx'");
+
+arr = new Array;
+arr[0] = 100;
+arr[1] = 101;
+list = "";
+for ( var j in arr ) {
+  list += "[" + j + "]=" + arr[j] + ";";
+}
+shouldBe("list","'[0]=100;[1]=101;'");
+
+list = "";
+for (var a = [1,2,3], length = a.length, i = 0; i < length; i++) {
+  list += a[i];
+}
+shouldBe("list", "'123'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/j-comment-3.js b/LayoutTests/fast/js/kde/resources/j-comment-3.js
new file mode 100644 (file)
index 0000000..2e103dd
--- /dev/null
@@ -0,0 +1,3 @@
+<!-- HTML comment (not ECMA)
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/j-comment-4.js b/LayoutTests/fast/js/kde/resources/j-comment-4.js
new file mode 100644 (file)
index 0000000..c2de757
--- /dev/null
@@ -0,0 +1,2 @@
+--> end of HTML comment (not ECMA)
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/literals.js b/LayoutTests/fast/js/kde/resources/literals.js
new file mode 100644 (file)
index 0000000..47cf0cf
--- /dev/null
@@ -0,0 +1,15 @@
+var x = 0;
+eval("\u0009 \u000B \u000C \u00A0x = 1;");
+shouldBe("x", "1");
+
+// hex (non-normative)
+shouldBe("0x0", "0");
+shouldBe("0xF", "15");
+shouldBe("0xFF", "255");
+
+// octal (non-normative)
+shouldBe("01", "1");
+shouldBe("010", "8");
+shouldBe("09", "9");
+shouldBe("019", "19");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/math.js b/LayoutTests/fast/js/kde/resources/math.js
new file mode 100644 (file)
index 0000000..26edd44
--- /dev/null
@@ -0,0 +1,109 @@
+var negativeZero = Math.atan2(-1, Infinity); // ### any nicer way?
+
+function isNegativeZero(n)
+{
+  return n == 0 && 1 / n < 0;
+}
+
+// self tests
+shouldBeTrue("isNegativeZero(negativeZero)");
+shouldBeFalse("isNegativeZero(0)");
+
+// Constants
+shouldBe("String()+Math.E", "'2.718281828459045'");
+shouldBe("String()+Math.LN2", "'0.6931471805599453'");
+shouldBe("String()+Math.LN10", "'2.302585092994046'");
+shouldBe("String()+Math.LOG2E", "'1.4426950408889634'");
+shouldBe("String()+Math.LOG10E", "'0.43429448190325176'");
+shouldBe("String()+Math.PI", "'3.141592653589793'");
+shouldBe("String()+Math.SQRT1_2", "'0.7071067811865476'");
+shouldBe("String()+Math.SQRT2", "'1.4142135623730951'");
+
+shouldBe("String()+Number.NaN", "'NaN'");
+shouldBe("String()+Number.NEGATIVE_INFINITY", "'-Infinity'");
+shouldBe("String()+Number.POSITIVE_INFINITY", "'Infinity'");
+
+// Functions
+shouldBe("Math.abs(-5)", "5");
+shouldBe("Math.acos(0)", "Math.PI/2");
+shouldBe("Math.acos(1)", "0");
+shouldBe("Math.ceil(1.1)", "2");
+shouldBe("String()+Math.sqrt(2)", "String()+Math.SQRT2");
+shouldBe("Math.ceil(1.6)", "2");
+shouldBe("Math.round(0)", "0");
+shouldBeFalse("isNegativeZero(Math.round(0))");
+shouldBeTrue("isNegativeZero(Math.round(negativeZero))");
+shouldBe("Math.round(0.2)", "0");
+shouldBeTrue("isNegativeZero(Math.round(-0.2))");
+shouldBeTrue("isNegativeZero(Math.round(-0.5))");
+shouldBe("Math.round(1.1)", "1");
+shouldBe("Math.round(1.6)", "2");
+shouldBe("Math.round(-3.5)", "-3");
+shouldBe("Math.round(-3.6)", "-4");
+shouldBeTrue("isNaN(Math.round())");
+shouldBeTrue("isNaN(Math.round(NaN))");
+shouldBe("Math.round(-Infinity)", "-Infinity");
+shouldBe("Math.round(Infinity)", "Infinity");
+shouldBe("Math.round(99999999999999999999.99)", "100000000000000000000");
+shouldBe("Math.round(-99999999999999999999.99)", "-100000000000000000000");
+
+// Math.log()
+shouldBe("Math.log(Math.E*Math.E)", "2");
+shouldBeTrue("isNaN(Math.log(NaN))");
+shouldBeTrue("isNaN(Math.log(-1))");
+shouldBeFalse("isFinite(Math.log(0))");
+shouldBe("Math.log(1)", "0");
+shouldBeFalse("isFinite(Math.log(Infinity))");
+
+// Math.min()
+shouldBeTrue("isNegativeZero(Math.min(negativeZero, 0))");
+
+// Math.max()
+shouldBeFalse("isFinite(Math.max())");
+shouldBe("Math.max(1)", "1"); // NS 4.x and IE 5.x seem to know about 2 arg version only
+shouldBe("Math.max(1, 2, 3)", "3"); // NS 4.x and IE 5.x seem to know about 2 arg version only
+shouldBeTrue("isNaN(Math.max(1,NaN,3))");
+shouldBeTrue("!isNegativeZero(Math.max(negativeZero, 0))");
+
+
+list=""
+for ( var i in Math ) { list += i + ','; }
+shouldBe("list","''");
+
+var my = new Object;
+my.v = 1;
+
+// Deleting/assigning
+shouldBe("delete my.v", "true")
+shouldBeUndefined("my.v");
+shouldBe("delete Math.PI", "false")
+function myfunc( num ) { return num+1; }
+shouldBe("my = myfunc, myfunc(4)", "5");
+
+// Conversions
+shouldBe("Boolean(Math)", "true");
+shouldBeTrue("isNaN(Number(Math));");
+
+// Unicity
+shouldBe("Math.abs===Math.abs", "true")
+shouldBe("Math.abs===Math.round", "false")
+
+// Iteration
+obj = new Object;
+obj.a = 1;
+obj.b = 2;
+list=""
+for ( var i in obj ) { list += i + ','; }
+shouldBe("list","'a,b,'");
+
+// (check that Math's properties and functions are not enumerable)
+list=""
+for ( var i in Math ) { list += i + ','; }
+shouldBe("list","''");
+
+Math.myprop=true; // adding a custom property to the math object (why not?)
+list=""
+for ( var i in Math ) { list += i + ','; }
+shouldBe("list","'myprop,'");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/md5-1.js b/LayoutTests/fast/js/kde/resources/md5-1.js
new file mode 100644 (file)
index 0000000..ea24b25
--- /dev/null
@@ -0,0 +1,390 @@
+// shouldBe() (base.js) test at very end of this file (Harri)
+
+/*
+* md5.jvs 1.0b 27/06/96
+*
+* Javascript implementation of the RSA Data Security, Inc. MD5
+* Message-Digest Algorithm.
+*
+* Copyright (c) 1996 Henri Torgemane. All Rights Reserved.
+*
+* Permission to use, copy, modify, and distribute this software
+* and its documentation for any purposes and without
+* fee is hereby granted provided that this copyright notice
+* appears in all copies.
+*
+* Of course, this soft is provided "as is" without express or implied
+* warranty of any kind.
+
+*/
+
+// $Id$
+
+function array(n) {
+    for(i=0;i<n;i++) this[i]=0;
+    this.length=n;
+}
+
+/* Some basic logical functions had to be rewritten because of a bug in
+* Javascript.. Just try to compute 0xffffffff >> 4 with it..
+* Of course, these functions are slower than the original would be, but
+* at least, they work!
+*/
+
+function integer(n) { return n%(0xffffffff+1); }
+
+function shr(a,b) {
+    a=integer(a);
+    b=integer(b);
+    if (a-0x80000000>=0) {
+       a=a%0x80000000;
+       a>>=b;
+       a+=0x40000000>>(b-1);
+    } else
+       a>>=b;
+    return a;
+}
+
+function shl1(a) {
+    a=a%0x80000000;
+    if (a&0x40000000==0x40000000)
+       {
+           a-=0x40000000;
+           a*=2;
+           a+=0x80000000;
+       } else
+           a*=2;
+    return a;
+}
+
+function shl(a,b) {
+    a=integer(a);
+    b=integer(b);
+    for (var i=0;i<b;i++) a=shl1(a);
+    return a;
+}
+
+function and(a,b) {
+    a=integer(a);
+    b=integer(b);
+    var t1=(a-0x80000000);
+    var t2=(b-0x80000000);
+    if (t1>=0)
+       if (t2>=0)
+           return ((t1&t2)+0x80000000);
+       else
+           return (t1&b);
+    else
+       if (t2>=0)
+           return (a&t2);
+       else
+           return (a&b);
+}
+
+function or(a,b) {
+    a=integer(a);
+    b=integer(b);
+    var t1=(a-0x80000000);
+    var t2=(b-0x80000000);
+    if (t1>=0)
+       if (t2>=0)
+           return ((t1|t2)+0x80000000);
+       else
+           return ((t1|b)+0x80000000);
+    else
+       if (t2>=0)
+           return ((a|t2)+0x80000000);
+       else
+           return (a|b);
+}
+
+function xor(a,b) {
+    a=integer(a);
+    b=integer(b);
+    var t1=(a-0x80000000);
+    var t2=(b-0x80000000);
+    if (t1>=0)
+       if (t2>=0)
+           return (t1^t2);
+       else
+           return ((t1^b)+0x80000000);
+    else
+       if (t2>=0)
+           return ((a^t2)+0x80000000);
+       else
+           return (a^b);
+}
+
+
+function not(a) {
+    a=integer(a);
+    return (0xffffffff-a);
+}
+
+/* Here begin the real algorithm */
+
+var state = new array(4);
+var count = new array(2);
+count[0] = 0;
+count[1] = 0;
+
+var buffer = new array(64);
+var transformBuffer = new array(16);
+var digestBits = new array(16);
+
+var S11 = 7;
+var S12 = 12;
+var S13 = 17;
+var S14 = 22;
+var S21 = 5;
+var S22 = 9;
+var S23 = 14;
+var S24 = 20;
+var S31 = 4;
+var S32 = 11;
+var S33 = 16;
+var S34 = 23;
+var S41 = 6;
+var S42 = 10;
+var S43 = 15;
+var S44 = 21;
+
+
+function F(x,y,z) {
+    return or(and(x,y),and(not(x),z));
+}
+
+function G(x,y,z) {
+    return or(and(x,z),and(y,not(z)));
+}
+
+function H(x,y,z) {
+    return xor(xor(x,y),z);
+}
+
+function I(x,y,z) {
+    return xor(y ,or(x , not(z)));
+}
+
+function rotateLeft(a,n) {
+    return or(shl(a, n),(shr(a,(32 - n))));
+}
+
+function FF(a,b,c,d,x,s,ac) {
+    a = a+F(b, c, d) + x + ac;
+    a = rotateLeft(a, s);
+    a = a+b;
+    return a;
+}
+
+function GG(a,b,c,d,x,s,ac) {
+    a = a+G(b, c, d) +x + ac;
+    a = rotateLeft(a, s);
+    a = a+b;
+    return a;
+}
+
+function HH(a,b,c,d,x,s,ac) {
+    a = a+H(b, c, d) + x + ac;
+    a = rotateLeft(a, s);
+    a = a+b;
+    return a;
+}
+
+function II(a,b,c,d,x,s,ac) {
+    a = a+I(b, c, d) + x + ac;
+    a = rotateLeft(a, s);
+    a = a+b;
+    return a;
+}
+
+function transform(buf,offset) {
+    var a=0, b=0, c=0, d=0;
+    var x = transformBuffer;
+
+    a = state[0];
+    b = state[1];
+    c = state[2];
+    d = state[3];
+
+    for (i = 0; i < 16; i++) {
+       x[i] = and(buf[i*4+offset],0xff);
+       for (j = 1; j < 4; j++) {
+           x[i]+=shl(and(buf[i*4+j+offset] ,0xff), j * 8);
+       }
+    }
+
+    /* Round 1 */
+    a = FF ( a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+    d = FF ( d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+    c = FF ( c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+    b = FF ( b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+    a = FF ( a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+    d = FF ( d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+    c = FF ( c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+    b = FF ( b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+    a = FF ( a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+    d = FF ( d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+    c = FF ( c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+    b = FF ( b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+    a = FF ( a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+    d = FF ( d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+    c = FF ( c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+    b = FF ( b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+    /* Round 2 */
+    a = GG ( a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+    d = GG ( d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+    c = GG ( c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+    b = GG ( b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+    a = GG ( a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+    d = GG ( d, a, b, c, x[10], S22, 0x2441453); /* 22 */
+    c = GG ( c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+    b = GG ( b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+    a = GG ( a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+    d = GG ( d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+    c = GG ( c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+    b = GG ( b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+    a = GG ( a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+    d = GG ( d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+    c = GG ( c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+    b = GG ( b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+    /* Round 3 */
+    a = HH ( a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+    d = HH ( d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+    c = HH ( c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+    b = HH ( b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+    a = HH ( a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+    d = HH ( d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+    c = HH ( c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+    b = HH ( b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+    a = HH ( a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+    d = HH ( d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+    c = HH ( c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+    b = HH ( b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
+    a = HH ( a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+    d = HH ( d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+    c = HH ( c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+    b = HH ( b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+    /* Round 4 */
+    a = II ( a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+    d = II ( d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+    c = II ( c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+    b = II ( b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+    a = II ( a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+    d = II ( d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+    c = II ( c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+    b = II ( b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+    a = II ( a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+    d = II ( d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+    c = II ( c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+    b = II ( b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+    a = II ( a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+    d = II ( d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+    c = II ( c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+    b = II ( b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+    state[0] +=a;
+    state[1] +=b;
+    state[2] +=c;
+    state[3] +=d;
+}
+
+function init() {
+    count[0]=count[1] = 0;
+    state[0] = 0x67452301;
+    state[1] = 0xefcdab89;
+    state[2] = 0x98badcfe;
+    state[3] = 0x10325476;
+    for (i = 0; i < digestBits.length; i++)
+       digestBits[i] = 0;
+}
+
+function update(b) {
+    var index,i;
+
+    index = and(shr(count[0],3) , 0x3f);
+    if (count[0]<0xffffffff-7)
+       count[0] += 8;
+    else {
+       count[1]++;
+       count[0]-=0xffffffff+1;
+       count[0]+=8;
+    }
+
+    buffer[index] = and(b,0xff);
+    if (index >= 63) {
+       transform(buffer, 0);
+    }
+}
+
+function finish() {
+    var bits = new array(8);
+    var padding;
+    var i=0, index=0, padLen=0;
+
+    for (i = 0; i < 4; i++) {
+       bits[i] = and(shr(count[0],(i * 8)), 0xff);
+    }
+
+    for (i = 0; i < 4; i++) {
+       bits[i+4]=and(shr(count[1],(i * 8)), 0xff);
+    }
+
+    index = and(shr(count[0], 3) ,0x3f);
+    padLen = (index < 56) ? (56 - index) : (120 - index);
+    padding = new array(64);
+    padding[0] = 0x80;
+    for (i=0;i<padLen;i++)
+       update(padding[i]);
+
+    for (i=0;i<8;i++)
+       update(bits[i]);
+
+    for (i = 0; i < 4; i++) {
+       for (j = 0; j < 4; j++) {
+           digestBits[i*4+j] = and(shr(state[i], (j * 8)) , 0xff);
+       }
+    }
+}
+
+/* End of the MD5 algorithm */
+
+function hexa(n) {
+    var hexa_h = "0123456789abcdef";
+    var hexa_c="";
+    var hexa_m=n;
+    for (hexa_i=0;hexa_i<8;hexa_i++) {
+       hexa_c=hexa_h.charAt(Math.abs(hexa_m)%16)+hexa_c;
+       hexa_m=Math.floor(hexa_m/16);
+    }
+    return hexa_c;
+}
+
+var ascii="01234567890123456789012345678901" +
+" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"+
+"[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+
+function MD5(entree)
+{
+    var l,s,k,ka,kb,kc,kd;
+
+    init();
+    for (k=0;k<entree.length;k++) {
+       l=entree.charAt(k);
+       update(ascii.lastIndexOf(l));
+    }
+    finish();
+    ka=kb=kc=kd=0;
+    for (i=0;i<4;i++) ka+=shl(digestBits[15-i], (i*8));
+    for (i=4;i<8;i++) kb+=shl(digestBits[15-i], ((i-4)*8));
+    for (i=8;i<12;i++) kc+=shl(digestBits[15-i], ((i-8)*8));
+    for (i=12;i<16;i++) kd+=shl(digestBits[15-i], ((i-12)*8));
+    s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);
+    return s;
+}
+
+shouldBe("MD5('kde')", "'186cf28b76f2264e9fea8fcf91cb4f5d'");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/md5-2.js b/LayoutTests/fast/js/kde/resources/md5-2.js
new file mode 100644 (file)
index 0000000..4e2b3fa
--- /dev/null
@@ -0,0 +1,221 @@
+shouldBe("hexMD5('kde')", "'186cf28b76f2264e9fea8fcf91cb4f5d'");
+
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Code also contributed by Greg Holt
+ * See http://pajhome.org.uk/site/legal.html for details.
+ */
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+  var lsw = (x & 0xFFFF) + (y & 0xFFFF)
+  var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
+  return (msw << 16) | (lsw & 0xFFFF)
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt)
+{
+  return (num << cnt) | (num >>> (32 - cnt))
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function cmn(q, a, b, x, s, t)
+{
+  return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
+}
+function ff(a, b, c, d, x, s, t)
+{
+  return cmn((b & c) | ((~b) & d), a, b, x, s, t)
+}
+function gg(a, b, c, d, x, s, t)
+{
+  return cmn((b & d) | (c & (~d)), a, b, x, s, t)
+}
+function hh(a, b, c, d, x, s, t)
+{
+  return cmn(b ^ c ^ d, a, b, x, s, t)
+}
+function ii(a, b, c, d, x, s, t)
+{
+  return cmn(c ^ (b | (~d)), a, b, x, s, t)
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, producing an array
+ * of little-endian words.
+ */
+function coreMD5(x)
+{
+  var a =  1732584193
+  var b = -271733879
+  var c = -1732584194
+  var d =  271733878
+
+  for(i = 0; i < x.length; i += 16)
+  {
+    var olda = a
+    var oldb = b
+    var oldc = c
+    var oldd = d
+
+    a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
+    d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
+    c = ff(c, d, a, b, x[i+ 2], 17,  606105819)
+    b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
+    a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
+    d = ff(d, a, b, c, x[i+ 5], 12,  1200080426)
+    c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
+    b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
+    a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416)
+    d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
+    c = ff(c, d, a, b, x[i+10], 17, -42063)
+    b = ff(b, c, d, a, x[i+11], 22, -1990404162)
+    a = ff(a, b, c, d, x[i+12], 7 ,  1804603682)
+    d = ff(d, a, b, c, x[i+13], 12, -40341101)
+    c = ff(c, d, a, b, x[i+14], 17, -1502002290)
+    b = ff(b, c, d, a, x[i+15], 22,  1236535329)
+
+    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
+    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
+    c = gg(c, d, a, b, x[i+11], 14,  643717713)
+    b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
+    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
+    d = gg(d, a, b, c, x[i+10], 9 ,  38016083)
+    c = gg(c, d, a, b, x[i+15], 14, -660478335)
+    b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
+    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438)
+    d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
+    c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
+    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501)
+    a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
+    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
+    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473)
+    b = gg(b, c, d, a, x[i+12], 20, -1926607734)
+
+    a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
+    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
+    c = hh(c, d, a, b, x[i+11], 16,  1839030562)
+    b = hh(b, c, d, a, x[i+14], 23, -35309556)
+    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
+    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353)
+    c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
+    b = hh(b, c, d, a, x[i+10], 23, -1094730640)
+    a = hh(a, b, c, d, x[i+13], 4 ,  681279174)
+    d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
+    c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
+    b = hh(b, c, d, a, x[i+ 6], 23,  76029189)
+    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
+    d = hh(d, a, b, c, x[i+12], 11, -421815835)
+    c = hh(c, d, a, b, x[i+15], 16,  530742520)
+    b = hh(b, c, d, a, x[i+ 2], 23, -995338651)
+
+    a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
+    d = ii(d, a, b, c, x[i+ 7], 10,  1126891415)
+    c = ii(c, d, a, b, x[i+14], 15, -1416354905)
+    b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
+    a = ii(a, b, c, d, x[i+12], 6 ,  1700485571)
+    d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
+    c = ii(c, d, a, b, x[i+10], 15, -1051523)
+    b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
+    a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359)
+    d = ii(d, a, b, c, x[i+15], 10, -30611744)
+    c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
+    b = ii(b, c, d, a, x[i+13], 21,  1309151649)
+    a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
+    d = ii(d, a, b, c, x[i+11], 10, -1120210379)
+    c = ii(c, d, a, b, x[i+ 2], 15,  718787259)
+    b = ii(b, c, d, a, x[i+ 9], 21, -343485551)
+
+    a = safe_add(a, olda)
+    b = safe_add(b, oldb)
+    c = safe_add(c, oldc)
+    d = safe_add(d, oldd)
+  }
+  return [a, b, c, d]
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray)
+{
+  var hex_tab = "0123456789abcdef"
+  var str = ""
+  for(var i = 0; i < binarray.length * 4; i++)
+  {
+    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
+           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
+  }
+  return str
+}
+
+/*
+ * Convert an array of little-endian words to a base64 encoded string.
+ */
+function binl2b64(binarray)
+{
+  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+  var str = ""
+  for(var i = 0; i < binarray.length * 32; i += 6)
+  {
+    str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
+                      ((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
+  }
+  return str
+}
+
+/*
+ * Convert an 8-bit character string to a sequence of 16-word blocks, stored
+ * as an array, and append appropriate padding for MD4/5 calculation.
+ * If any of the characters are >255, the high byte is silently ignored.
+ */
+function str2binl(str)
+{
+  var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
+  var blks = new Array(nblk * 16)
+  for(var i = 0; i < nblk * 16; i++) blks[i] = 0
+  for(var i = 0; i < str.length; i++)
+    blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
+  blks[i>>2] |= 0x80 << ((i%4) * 8)
+  blks[nblk*16-2] = str.length * 8
+  return blks
+}
+
+/*
+ * Convert a wide-character string to a sequence of 16-word blocks, stored as
+ * an array, and append appropriate padding for MD4/5 calculation.
+ */
+function strw2binl(str)
+{
+  var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
+  var blks = new Array(nblk * 16)
+  for(var i = 0; i < nblk * 16; i++) blks[i] = 0
+  for(var i = 0; i < str.length; i++)
+    blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
+  blks[i>>1] |= 0x80 << ((i%2) * 16)
+  blks[nblk*16-2] = str.length * 16
+  return blks
+}
+
+/*
+ * External interface
+ */
+function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
+function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
+function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
+function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
+/* Backward compatibility */
+function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/object_prototype.js b/LayoutTests/fast/js/kde/resources/object_prototype.js
new file mode 100644 (file)
index 0000000..6a095ff
--- /dev/null
@@ -0,0 +1,78 @@
+// Object.prototype.hasOwnProperty
+
+function MyClass()
+{
+  this.y = 2;
+}
+
+MyClass.prototype = { x : 1 };
+
+var sub = new MyClass();
+shouldBe("sub.x","1");
+shouldBe("sub.y","2");
+shouldBe("sub.hasOwnProperty('x')","false");
+shouldBe("sub.hasOwnProperty('y')","true");
+sub.x = 6;
+shouldBe("sub.x","6");
+shouldBe("sub.hasOwnProperty('x')","true");
+delete sub.y;
+shouldBe("sub.y","undefined");
+shouldBe("sub.hasOwnProperty('y')","false");
+
+
+
+// Object.prototype.isPrototypeOf
+
+function Class1() {}
+function Class2() {}
+function Class3() {}
+
+Class1.prototype = new Object();
+Class1.prototype.hasClass1 = true;
+Class2.prototype = new Class1();
+Class2.prototype.hasClass2 = true;
+Class3.prototype = new Class2();
+Class3.prototype.hasClass3 = true;
+
+var obj = new Class3();
+shouldBe("obj.hasClass1","true");
+shouldBe("obj.hasClass2","true");
+shouldBe("obj.hasClass3","true");
+
+shouldBe("Class1.prototype.isPrototypeOf(obj)","true");
+shouldBe("Class2.prototype.isPrototypeOf(obj)","true");
+shouldBe("Class3.prototype.isPrototypeOf(obj)","true");
+shouldBe("obj.isPrototypeOf(Class1.prototype)","false");
+shouldBe("obj.isPrototypeOf(Class2.prototype)","false");
+shouldBe("obj.isPrototypeOf(Class3.prototype)","false");
+
+shouldBe("Class1.prototype.isPrototypeOf(Class2.prototype)","true");
+shouldBe("Class2.prototype.isPrototypeOf(Class1.prototype)","false");
+shouldBe("Class1.prototype.isPrototypeOf(Class3.prototype)","true");
+shouldBe("Class3.prototype.isPrototypeOf(Class1.prototype)","false");
+shouldBe("Class2.prototype.isPrototypeOf(Class3.prototype)","true");
+shouldBe("Class3.prototype.isPrototypeOf(Class2.prototype)","false");
+
+shouldBeUndefined("Class1.prototype.prototype");
+
+function checkEnumerable(obj,property)
+{
+  for (var propname in obj) {
+    if (propname == property)
+      return true;
+  }
+  return false;
+}
+
+function myfunc(a,b,c)
+{
+}
+myfunc.someproperty = 4;
+
+shouldBe("myfunc.length","3");
+shouldBe("myfunc.someproperty","4");
+shouldBe("myfunc.propertyIsEnumerable('length')","false");
+shouldBe("myfunc.propertyIsEnumerable('someproperty')","true");
+shouldBe("checkEnumerable(myfunc,'length')","false");
+shouldBe("checkEnumerable(myfunc,'someproperty')","true");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/object_prototype_tostring.js b/LayoutTests/fast/js/kde/resources/object_prototype_tostring.js
new file mode 100644 (file)
index 0000000..20a0a0b
--- /dev/null
@@ -0,0 +1,28 @@
+var _array = new Array(1,2,3);
+_array.toString = Object.prototype.toString;
+shouldBe("_array.toString()","\"[object Array]\"");
+var _string = new String("test");
+_string.toString = Object.prototype.toString;
+shouldBe("_string.toString()","\"[object String]\"");
+var _boolean = new Boolean(true);
+_boolean.toString = Object.prototype.toString;
+shouldBe("_boolean.toString()","\"[object Boolean]\"");
+var _number = new Number(4);
+_number.toString = Object.prototype.toString;
+shouldBe("_number.toString()","\"[object Number]\"");
+var _object = new Object();
+_object.toString = Object.prototype.toString;
+shouldBe("_object.toString()","\"[object Object]\"");
+var _date = new Date();
+_date.toString = Object.prototype.toString;
+shouldBe("_date.toString()","\"[object Date]\"");
+var _regexp = new RegExp();
+_regexp.toString = Object.prototype.toString;
+shouldBe("_regexp.toString()","\"[object RegExp]\"");
+var _error = new Error();
+_error.toString = Object.prototype.toString;
+shouldBe("_error.toString()","\"[object Error]\"");
+var _function = new Function();
+_function.toString = Object.prototype.toString;
+shouldBe("_function.toString()","\"[object Function]\"");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/operators.js b/LayoutTests/fast/js/kde/resources/operators.js
new file mode 100644 (file)
index 0000000..6a9ef72
--- /dev/null
@@ -0,0 +1,219 @@
+// operator !
+shouldBeTrue("!undefined");
+shouldBeTrue("!null");
+shouldBeTrue("!!true");
+shouldBeTrue("!false");
+shouldBeTrue("!!1");
+shouldBeTrue("!0");
+shouldBeTrue("!!'a'");
+shouldBeTrue("!''");
+
+// increment
+shouldBe("var i = 0; ++i;", "1");
+shouldBe("var i = 0; ++i; i", "1");
+shouldBe("var i = 0; i++;", "0");
+shouldBe("var i = 0; i++; i", "1");
+shouldBe("var i = true; i++", "1");
+shouldBe("var i = true; i++; i", "2");
+
+// decrement
+shouldBe("var i = 0; --i;", "-1");
+shouldBe("var i = 0; --i; i", "-1");
+shouldBe("var i = 0; i--;", "0");
+shouldBe("var i = 0; i--; i", "-1");
+shouldBe("var i = true; i--", "1");
+shouldBe("var i = true; i--; i", "0");
+
+// bitwise operators
+shouldBe("~0", "-1");
+shouldBe("~1", "-2");
+shouldBe("~Math.pow(2, 33)", "-1"); // 32 bit overflow
+shouldBe("~(Math.pow(2, 32) + Math.pow(2, 31) + 2)",
+         "2147483645"); // a signedness issue
+shouldBe("~null", "-1");
+shouldBe("3 & 1", "1");
+shouldBe("2 | true", "3");
+shouldBe("'3' ^ 1", "2");
+shouldBe("3^4&5", "7");
+shouldBe("2|4^5", "3");
+
+shouldBe("1 << 2", "4");
+shouldBe("8 >> 1", "4");
+shouldBe("1 >> 2", "0");
+shouldBe("-8 >> 24", "-1");
+shouldBe("8 >>> 2", "2");
+shouldBe("-8 >>> 24", "255");
+shouldBe("(-2200000000 >> 1) << 1", "2094967296");
+
+// addition
+shouldBe("1+2", "3");
+shouldBe("'a'+'b'", "'ab'");
+shouldBe("'a'+2", "'a2'");
+shouldBe("'2'+'-1'", "'2-1'");
+shouldBe("true+'a'", "'truea'");
+shouldBe("'a' + null", "'anull'");
+shouldBe("true+1", "2");
+shouldBe("false+null", "0");
+
+// substraction
+shouldBe("1-3", "-2");
+shouldBe("isNaN('a'-3)", "true");
+shouldBe("'3'-'-1'", "4");
+shouldBe("'4'-2", "2");
+shouldBe("true-false", "1");
+shouldBe("false-1", "-1");
+shouldBe("null-true", "-1");
+
+// multiplication
+shouldBe("2 * 3", "6");
+shouldBe("true * 3", "3");
+shouldBe("2 * '3'", "6");
+
+// division
+shouldBe("6 / 4", "1.5");
+//shouldBe("true / false", "Inf");
+shouldBe("'6' / '2'", "3");
+shouldBeTrue("isNaN('x' / 1)");
+shouldBeTrue("isNaN(1 / NaN)");
+shouldBeTrue("isNaN(Infinity / Infinity)");
+shouldBe("Infinity / 0", "Infinity");
+shouldBe("-Infinity / 0", "-Infinity");
+shouldBe("Infinity / 1", "Infinity");
+shouldBe("-Infinity / 1", "-Infinity");
+shouldBeTrue("1 / Infinity == +0");
+shouldBeTrue("1 / -Infinity == -0"); // how to check ?
+shouldBeTrue("isNaN(0/0)");
+shouldBeTrue("0 / 1 === 0");
+shouldBeTrue("0 / -1 === -0"); // how to check ?
+shouldBe("1 / 0", "Infinity");
+shouldBe("-1 / 0", "-Infinity");
+
+// modulo
+shouldBe("6 % 4", "2");
+shouldBe("'-6' % 4", "-2");
+
+shouldBe("2==2", "true");
+shouldBe("1==2", "false");
+
+shouldBe("1<2", "true");
+shouldBe("1<=2", "true");
+shouldBe("2<1", "false");
+shouldBe("2<=1", "false");
+
+shouldBe("2>1", "true");
+shouldBe("2>=1", "true");
+shouldBe("1>=2", "false");
+shouldBe("1>2", "false");
+
+shouldBe("'abc' == 'abc'", "true");
+shouldBe("'abc' != 'xyz'", "true");
+shouldBeTrue("true == true");
+shouldBeTrue("false == false");
+shouldBeTrue("true != false");
+shouldBeTrue("'a' != null");
+shouldBeTrue("'a' != undefined");
+shouldBeTrue("null == null");
+shouldBeTrue("null == undefined");
+shouldBeTrue("undefined == undefined");
+shouldBeTrue("NaN != NaN");
+shouldBeTrue("true != undefined");
+shouldBeTrue("true != null");
+shouldBeTrue("false != undefined");
+shouldBeTrue("false != null");
+shouldBeTrue("'0' == 0");
+shouldBeTrue("1 == '1'");
+shouldBeTrue("NaN != NaN");
+shouldBeTrue("NaN != 0");
+shouldBeTrue("NaN != undefined");
+shouldBeTrue("true == 1");
+shouldBeTrue("true != 2");
+shouldBeTrue("1 == true");
+shouldBeTrue("false == 0");
+shouldBeTrue("0 == false");
+
+shouldBe("'abc' < 'abx'", "true");
+shouldBe("'abc' < 'abcd'", "true");
+shouldBe("'abc' < 'abc'", "false");
+shouldBe("'abcd' < 'abcd'", "false");
+shouldBe("'abx' < 'abc'", "false");
+
+shouldBe("'abc' <= 'abc'", "true");
+shouldBe("'abc' <= 'abx'", "true");
+shouldBe("'abx' <= 'abc'", "false");
+shouldBe("'abcd' <= 'abc'", "false");
+shouldBe("'abc' <= 'abcd'", "true");
+
+shouldBe("'abc' > 'abx'", "false");
+shouldBe("'abc' > 'abc'", "false");
+shouldBe("'abcd' > 'abc'", "true");
+shouldBe("'abx' > 'abc'", "true");
+shouldBe("'abc' > 'abcd'", "false");
+
+shouldBe("'abc' >= 'abc'", "true");
+shouldBe("'abcd' >= 'abc'", "true");
+shouldBe("'abx' >= 'abc'", "true");
+shouldBe("'abc' >= 'abx'", "false");
+shouldBe("'abc' >= 'abx'", "false");
+shouldBe("'abc' >= 'abcd'", "false");
+
+// mixed strings and numbers - results validated in NS+moz+IE5
+shouldBeFalse("'abc' <= 0"); // #35246
+shouldBeTrue("'' <= 0");
+shouldBeTrue("' ' <= 0");
+shouldBeTrue("null <= 0");
+shouldBeFalse("0 <= 'abc'");
+shouldBeTrue("0 <= ''");
+shouldBeTrue("0 <= null");
+shouldBeTrue("null <= null");
+shouldBeTrue("6 < '52'");
+shouldBeTrue("6 < '72'"); // #36087
+shouldBe("NaN < 0", "false");
+shouldBe("NaN <= 0", "false");
+shouldBe("NaN > 0", "false");
+shouldBe("NaN >= 0", "false");
+
+// strict comparison ===
+shouldBe("0 === false", "false");
+//shouldBe("undefined === undefined", "true"); // aborts in IE5 (undefined is not defined ;)
+shouldBe("null === null", "true");
+shouldBe("NaN === NaN", "false");
+shouldBe("0.0 === 0", "true");
+shouldBe("'abc' === 'abc'", "true");
+shouldBe("'a' === 'x'", "false");
+shouldBe("true === true", "true");
+shouldBe("false === false", "true");
+shouldBe("true === false", "false");
+shouldBe("Math === Math", "true");
+shouldBe("Math === Boolean", "false");
+shouldBe("Infinity === Infinity", "true");
+
+// !==
+shouldBe("0 !== 0", "false");
+shouldBe("0 !== 1", "true");
+
+shouldBe("typeof undefined", "'undefined'");
+shouldBe("typeof null", "'object'");
+shouldBe("typeof true", "'boolean'");
+shouldBe("typeof false", "'boolean'");
+shouldBe("typeof 1", "'number'");
+shouldBe("typeof 'a'", "'string'");
+shouldBe("typeof shouldBe", "'function'");
+shouldBe("typeof Number.NaN", "'number'");
+
+shouldBe("11 && 22", "22");
+shouldBe("null && true", "null");
+shouldBe("11 || 22", "11");
+shouldBe("null || 'a'", "'a'");
+
+shouldBeUndefined("void 1");
+
+shouldBeTrue("1 in [1, 2]");
+shouldBeFalse("3 in [1, 2]");
+shouldBeTrue("'a' in { a:1, b:2 }");
+
+// instanceof
+// Those 2 lines don't parse in Netscape...
+shouldBe("(new Boolean()) instanceof Boolean", "true");
+shouldBe("(new Boolean()) instanceof Number", "false");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/parse.js b/LayoutTests/fast/js/kde/resources/parse.js
new file mode 100644 (file)
index 0000000..cdd8252
--- /dev/null
@@ -0,0 +1,45 @@
+function test() { return;}
+function test() { while(0) break; }
+function test() { while(0) continue; }
+
+function test() { return lab;}
+function test() { while(0) break lab; }
+function test() { while(0) continue lab; }
+
+function test() { return }
+function test() { while(0) break }
+function test() { while(0) continue }
+
+function test() { return 0 }
+function test() { while(0) break lab }
+function test() { while(0) continue lab }
+
+lab:
+
+a = 1
+b = 123 // comment
+c = 2
+c = 3 /* comment */
+d = 4
+
+// non-ascii identifier letters (not working copy of Mozilla?!)
+var ident = "";
+ident += "\u00E9"; // LATIN SMALL LETTER E WITH ACUTE
+ident += "\u0100"; // LATIN CAPITAL LETTER A WITH MACRON
+ident += "\u02af"; // LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+ident += "\u0388"; // GREEK CAPITAL LETTER EPSILON WITH TONOS
+ident += "\u18A8"; // MONGOLIAN LETTER MANCHU ALI GALI BHA
+var code = "var " + ident + " = 11; " + ident + ";";
+var res = eval(code);
+shouldBe("res", "11");
+
+// invalid identifier letter
+var caught = false;
+try {
+  eval("var f\xf7;"); // 
+} catch (e) {
+  caught = true;
+}
+shouldBeTrue("caught");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/prototype_length.js b/LayoutTests/fast/js/kde/resources/prototype_length.js
new file mode 100644 (file)
index 0000000..c9a1e14
--- /dev/null
@@ -0,0 +1,37 @@
+shouldBe("Object.prototype.length","undefined");
+shouldBe("Function.prototype.length","0");
+shouldBe("Array.prototype.length","0");
+shouldBe("String.prototype.length","0");
+shouldBe("Boolean.prototype.length","undefined");
+shouldBe("Number.prototype.length","undefined");
+shouldBe("Date.prototype.length","undefined");
+shouldBe("RegExp.prototype.length","undefined");
+shouldBe("Error.prototype.length","undefined");
+
+// check !ReadOnly
+Array.prototype.length = 6;
+shouldBe("Array.prototype.length","6");
+// check ReadOnly
+Function.prototype.length = 7;
+shouldBe("Function.prototype.length","0");
+String.prototype.length = 8;
+shouldBe("String.prototype.length","0");
+
+// check DontDelete
+shouldBe("delete Array.prototype.length","false");
+shouldBe("delete Function.prototype.length","false");
+shouldBe("delete String.prototype.length","false");
+
+// check DontEnum
+var foundArrayPrototypeLength = false;
+for (i in Array.prototype) { if (i == "length") foundArrayPrototypeLength = true; }
+shouldBe("foundArrayPrototypeLength","false");
+
+var foundFunctionPrototypeLength = false;
+for (i in Function.prototype) { if (i == "length") foundFunctionPrototypeLength = true; }
+shouldBe("foundFunctionPrototypeLength","false");
+
+var foundStringPrototypeLength = false;
+for (i in String.prototype) { if (i == "length") foundStringPrototypeLength = true; }
+shouldBe("foundStringPrototypeLength","false");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/prototype_proto.js b/LayoutTests/fast/js/kde/resources/prototype_proto.js
new file mode 100644 (file)
index 0000000..8fcc5bb
--- /dev/null
@@ -0,0 +1,10 @@
+shouldBe("Object.prototype.__proto__ == Object.prototype","false");
+shouldBe("Function.prototype.__proto__","Object.prototype");
+shouldBe("Array.prototype.__proto__","Object.prototype");
+shouldBe("String.prototype.__proto__","Object.prototype");
+shouldBe("Boolean.prototype.__proto__","Object.prototype");
+shouldBe("Number.prototype.__proto__","Object.prototype");
+shouldBe("Date.prototype.__proto__","Object.prototype");
+shouldBe("RegExp.prototype.__proto__","Object.prototype");
+shouldBe("Error.prototype.__proto__","Object.prototype");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/scope.js b/LayoutTests/fast/js/kde/resources/scope.js
new file mode 100644 (file)
index 0000000..1aa3720
--- /dev/null
@@ -0,0 +1,9 @@
+var b = new Boolean();
+b.x = 11;
+
+with (b) {
+  f = function(a) { return a*x; } // remember scope chain
+}
+
+shouldBe("f(2)", "22");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/shell.js b/LayoutTests/fast/js/kde/resources/shell.js
new file mode 100644 (file)
index 0000000..287baf0
--- /dev/null
@@ -0,0 +1,39 @@
+// Utility functions for JS test suite
+// (c) 2001 Harri Porten <porten@kde.org>
+
+function testPassed(msg)
+{
+  debug("PASS. " + msg);
+}
+
+function testFailed(msg)
+{
+  debug("FAIL. " + msg);
+  regtest.reportResult(false, msg);  
+}
+
+function shouldBe(_a, _b)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBe() expects string arguments");
+  var _av = eval(_a);
+  var _bv = eval(_b);
+
+  if (_av === _bv)
+    testPassed(_a + " is " + _b);
+  else
+    testFailed(_a + " should be " + _bv + ". Was " + _av);
+}
+
+function shouldBeTrue(_a) { shouldBe(_a, "true"); }
+
+function shouldBeFalse(_a) { shouldBe(_a, "false"); }
+
+function shouldBeUndefined(_a)
+{
+  var _av = eval(_a);
+  if (typeof _av == "undefined")
+    testPassed(_a + " is undefined.");
+  else
+    testFailed(_a + " should be undefined. Was " + _av);
+}
diff --git a/LayoutTests/fast/js/kde/resources/statements.js b/LayoutTests/fast/js/kde/resources/statements.js
new file mode 100644 (file)
index 0000000..cf23ae5
--- /dev/null
@@ -0,0 +1,77 @@
+function testSwitch(v) {
+  var result = "";
+  switch (v) {
+     case 0:
+        result += 'a';
+     case 1:
+       result += 'b';
+     case 1:
+        result += 'c';
+     case 2:
+        result += 'd';
+        break;
+  }
+  return result;
+}
+
+shouldBe("testSwitch(0)", "'abcd'");
+shouldBe("testSwitch(1)", "'bcd'"); // IE agrees, NS disagrees
+shouldBe("testSwitch(2)", "'d'");
+shouldBe("testSwitch(false)", "''");
+
+function testSwitch2(v) {
+  var result = "";
+  switch (v) {
+     case 1:
+        result += 'a';
+        break;
+     case 2:
+       result += 'b';
+        break;
+     default:
+        result += 'c';
+     case 3:
+        result += 'd';
+        break;
+  }
+  return result;
+}
+
+shouldBe("testSwitch2(1)", "'a'");
+shouldBe("testSwitch2(2)", "'b'");
+shouldBe("testSwitch2(3)", "'d'");
+shouldBe("testSwitch2(-1)", "'cd'");
+shouldBe("testSwitch2('x')", "'cd'");
+
+function testSwitch3(v) {
+  var result = "";
+  switch (v) {
+     default:
+        result += 'c';
+     case 3:
+        result += 'd';
+     case 4:
+        result += 'e';
+        break;
+  }
+  return result;
+};
+
+shouldBe("testSwitch3(0)", "'cde'");
+shouldBe("testSwitch3(3)", "'de'");
+shouldBe("testSwitch3(4)", "'e'");
+
+function testSwitch4(v) {
+  var result = "";
+  switch (v) {
+     case 0:
+        result += 'a';
+        result += 'b';
+        break;
+  }
+  return result;
+};
+
+shouldBe("testSwitch4(0)", "'ab'");
+
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/string-1-n.js b/LayoutTests/fast/js/kde/resources/string-1-n.js
new file mode 100644 (file)
index 0000000..93a1ee1
--- /dev/null
@@ -0,0 +1,2 @@
+"unterminated string
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/string-2-n.js b/LayoutTests/fast/js/kde/resources/string-2-n.js
new file mode 100644 (file)
index 0000000..a8cbda6
--- /dev/null
@@ -0,0 +1,3 @@
+"broken
+string"
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/resources/var_decl_init.js b/LayoutTests/fast/js/kde/resources/var_decl_init.js
new file mode 100644 (file)
index 0000000..5036d8d
--- /dev/null
@@ -0,0 +1,161 @@
+var myvar = 1;
+
+function varInFunction() {
+  return (myvar == undefined);
+  var myvar = 2;
+}
+
+function varInVarList() {
+  return (myvar == undefined);
+  var a = 1, b = 0, myvar = 2;
+}
+
+function varListOrder() {
+  var tmp = 0;
+  var i = ++tmp, j = ++tmp;
+  return j == 2;
+}
+
+function varInBlock() {
+  return (myvar == undefined);
+  {
+    var myvar = 2;
+  }
+}
+
+function varInIf() {
+  return (myvar == undefined);
+  if (false)
+    var myvar = 2;
+}
+
+function varInElse() {
+  return (myvar == undefined);
+  if (true) {
+  }
+  else
+    var myvar = 2;
+}
+
+function varInDoWhile() {
+  return (myvar == undefined);
+  do
+    var myvar = 2;
+  while (false);
+}
+
+function varInWhile() {
+  return (myvar == undefined);
+  while (false)
+    var myvar = 2;
+}
+
+function varInFor() {
+  return (myvar == undefined);
+  var i;
+  for (i = 0; i < 0; i++)
+    var myvar = 2;
+}
+
+function varInForInitExpr() {
+  return (myvar == undefined);
+  for (var myvar = 2; i < 2; i++) {
+  }
+}
+
+function varInForIn() {
+  return (myvar == undefined);
+  var o = new Object();
+  var i;
+  for (i in o)
+    var myvar = 2;
+}
+
+function varInWith() {
+  return (myvar == undefined);
+  with (String)
+    var myvar = 2;
+}
+
+function varInCase() {
+  return (myvar == undefined);
+  switch (1) {
+    case 0:
+      var myvar = 2;
+    case 1:
+  }
+}
+
+function varInLabel() {
+  return (myvar == undefined);
+label1:
+  var myvar = 2;
+}
+
+function varInCatch() {
+  return (myvar == undefined);
+  try {
+  }
+  catch (e) {
+    var myvar = 2;
+  }
+}
+
+function varInFinally() {
+  return (myvar == undefined);
+  try {
+  }
+  finally {
+    var myvar = 2;
+  }
+}
+
+function varInTry() {
+  return (myvar == undefined);
+  try {
+    var myvar = 2;
+  }
+  catch (e) {
+  }
+  finally {
+  }
+}
+
+function varInSubFunction() {
+  return (myvar == 1);
+  function subfunction() {
+    var myvar = 2;
+  }
+}
+
+if (!varGlobal)
+  var varGlobal = 1;
+
+shouldBe("varInFunction()","true");
+shouldBe("varInVarList()","true");
+shouldBe("varListOrder()","true");
+shouldBe("varInBlock()","true");
+shouldBe("varInIf()","true");
+shouldBe("varInElse()","true");
+shouldBe("varInDoWhile()","true");
+shouldBe("varInWhile()","true");
+shouldBe("varInFor()","true");
+shouldBe("varInForIn()","true");
+shouldBe("varInWith()","true");
+shouldBe("varInCase()","true");
+shouldBe("varInLabel()","true");
+shouldBe("varInCatch()","true");
+shouldBe("varInFinally()","true");
+shouldBe("varInTry()","true");
+shouldBe("varInForInitExpr()","true");
+shouldBe("varInSubFunction()","true");
+shouldBe("varGlobal", "1");
+
+var overrideVar = 1;
+var overrideVar;
+shouldBe("overrideVar", "1");
+
+var overrideVar2 = 1;
+var overrideVar2 = 2;
+shouldBe("overrideVar2", "2");
+successfullyParsed = true
diff --git a/LayoutTests/fast/js/kde/scope-expected.txt b/LayoutTests/fast/js/kde/scope-expected.txt
new file mode 100644 (file)
index 0000000..f7ca40f
--- /dev/null
@@ -0,0 +1,3 @@
+PASS f(2) is 22
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/scope.html b/LayoutTests/fast/js/kde/scope.html
new file mode 100644 (file)
index 0000000..a0a4e70
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/scope.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/statements-expected.txt b/LayoutTests/fast/js/kde/statements-expected.txt
new file mode 100644 (file)
index 0000000..87c3187
--- /dev/null
@@ -0,0 +1,15 @@
+PASS testSwitch(0) is 'abcd'
+PASS testSwitch(1) is 'bcd'
+PASS testSwitch(2) is 'd'
+PASS testSwitch(false) is ''
+PASS testSwitch2(1) is 'a'
+PASS testSwitch2(2) is 'b'
+PASS testSwitch2(3) is 'd'
+PASS testSwitch2(-1) is 'cd'
+PASS testSwitch2('x') is 'cd'
+PASS testSwitch3(0) is 'cde'
+PASS testSwitch3(3) is 'de'
+PASS testSwitch3(4) is 'e'
+PASS testSwitch4(0) is 'ab'
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/statements.html b/LayoutTests/fast/js/kde/statements.html
new file mode 100644 (file)
index 0000000..29d1daf
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/statements.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/string-1-n-expected.txt b/LayoutTests/fast/js/kde/string-1-n-expected.txt
new file mode 100644 (file)
index 0000000..a47af02
--- /dev/null
@@ -0,0 +1,2 @@
+PASS window.successfullyParsed is undefined.
+
diff --git a/LayoutTests/fast/js/kde/string-1-n.html b/LayoutTests/fast/js/kde/string-1-n.html
new file mode 100644 (file)
index 0000000..ef3da82
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/string-1-n.js"></script>
+<script>
+shouldBeUndefined("window.successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/string-2-n-expected.txt b/LayoutTests/fast/js/kde/string-2-n-expected.txt
new file mode 100644 (file)
index 0000000..a47af02
--- /dev/null
@@ -0,0 +1,2 @@
+PASS window.successfullyParsed is undefined.
+
diff --git a/LayoutTests/fast/js/kde/string-2-n.html b/LayoutTests/fast/js/kde/string-2-n.html
new file mode 100644 (file)
index 0000000..fa9fcbd
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/string-2-n.js"></script>
+<script>
+shouldBeUndefined("window.successfullyParsed");
+</script>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/js/kde/var_decl_init-expected.txt b/LayoutTests/fast/js/kde/var_decl_init-expected.txt
new file mode 100644 (file)
index 0000000..27dba24
--- /dev/null
@@ -0,0 +1,23 @@
+PASS varInFunction() is true
+PASS varInVarList() is true
+PASS varListOrder() is true
+PASS varInBlock() is true
+PASS varInIf() is true
+PASS varInElse() is true
+PASS varInDoWhile() is true
+PASS varInWhile() is true
+PASS varInFor() is true
+PASS varInForIn() is true
+PASS varInWith() is true
+PASS varInCase() is true
+PASS varInLabel() is true
+PASS varInCatch() is true
+PASS varInFinally() is true
+PASS varInTry() is true
+PASS varInForInitExpr() is true
+PASS varInSubFunction() is true
+PASS varGlobal is 1
+PASS overrideVar is 1
+PASS overrideVar2 is 2
+PASS successfullyParsed is true
+
diff --git a/LayoutTests/fast/js/kde/var_decl_init.html b/LayoutTests/fast/js/kde/var_decl_init.html
new file mode 100644 (file)
index 0000000..96e8052
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <!-- This file allows to run a javascript test in another browser.
+       Simply change the script inclusion at the end of the file -->
+<script src="resources/base.js"></script>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function testPassed(msg)
+{
+    document.write("<b><font color=green>PASS</font></b> " + msg + "<br>");
+}
+
+function testFailed(msg)
+{
+    document.write("<b><font color=red>FAIL</font></b> " + msg + "<br>");
+}
+
+function debug(a) 
+{ 
+    document.write("<p> " + a + "</p>"); 
+}
+</script>
+
+<script src="resources/var_decl_init.js"></script>
+<script>
+shouldBeTrue("successfullyParsed");
+</script>
+</html>
\ No newline at end of file