[webkit-changes] cvs commit: WebCore/layout-tests/fast/js
toString-overrides-expected.txt toString-overrides.html
Geoffrey
ggaren at opensource.apple.com
Wed Jul 27 16:45:00 PDT 2005
ggaren 05/07/27 16:44:59
Modified: . ChangeLog
kjs array_object.cpp
. ChangeLog
Added: layout-tests/fast/js toString-overrides-expected.txt
toString-overrides.html
Log:
JavaScriptCore:
- fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4147
Array.toString() and toLocaleString() improvements from KDE KJS
(rolled in KDE changes)
Test cases added:
* layout-tests/fast/js/toString-overrides-expected.txt: Added.
* layout-tests/fast/js/toString-overrides.html: Added.
* kjs/array_object.cpp:
(ArrayProtoFuncImp::call):
WebCore:
- added test case for http://bugzilla.opendarwin.org/show_bug.cgi?id=4147
Array.toString() and toLocaleString() improvements from KDE KJS
Test cases added:
* layout-tests/fast/js/toString-overrides-expected.txt: Added.
* layout-tests/fast/js/toString-overrides.html: Added.
Revision Changes Path
1.770 +14 -0 JavaScriptCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/JavaScriptCore/ChangeLog,v
retrieving revision 1.769
retrieving revision 1.770
diff -u -r1.769 -r1.770
--- ChangeLog 27 Jul 2005 23:10:48 -0000 1.769
+++ ChangeLog 27 Jul 2005 23:44:49 -0000 1.770
@@ -1,3 +1,17 @@
+2005-07-27 Geoffrey Garen <ggaren at apple.com>
+
+ - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4147
+ Array.toString() and toLocaleString() improvements from KDE KJS
+ (rolled in KDE changes)
+
+ Test cases added:
+
+ * layout-tests/fast/js/toString-overrides-expected.txt: Added.
+ * layout-tests/fast/js/toString-overrides.html: Added.
+
+ * kjs/array_object.cpp:
+ (ArrayProtoFuncImp::call):
+
2005-07-27 Maciej Stachowiak <mjs at apple.com>
Changes by Michael Kahl, reviewed by me.
1.47 +33 -7 JavaScriptCore/kjs/array_object.cpp
Index: array_object.cpp
===================================================================
RCS file: /cvs/root/JavaScriptCore/kjs/array_object.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- array_object.cpp 25 Jul 2005 22:17:12 -0000 1.46
+++ array_object.cpp 27 Jul 2005 23:44:50 -0000 1.47
@@ -482,15 +482,41 @@
if (element.type() == UndefinedType || element.type() == NullType)
continue;
- Object o = element.toObject(exec);
- Object conversionFunction;
+ bool fallback = false;
if (id == ToLocaleString) {
- conversionFunction = Object::dynamicCast(o.get(exec, toLocaleStringPropertyName));
- } else {
- conversionFunction = Object::dynamicCast(o.get(exec, toStringPropertyName));
+ Object o = element.toObject(exec);
+ Object conversionFunction =
+ Object::dynamicCast(o.get(exec, toLocaleStringPropertyName));
+ if (conversionFunction.isValid() &&
+ conversionFunction.implementsCall()) {
+ str += conversionFunction.call(exec, o, List()).toString(exec);
+ } else {
+ // try toString() fallback
+ fallback = true;
+ }
}
- str += conversionFunction.call(exec, o, List()).toString(exec);
-
+
+ if (id == ToString || id == Join || fallback) {
+ if (element.type() == ObjectType) {
+ Object o = Object::dynamicCast(element);
+ Object conversionFunction =
+ Object::dynamicCast(o.get(exec, toStringPropertyName));
+ if (conversionFunction.isValid() &&
+ conversionFunction.implementsCall()) {
+ str += conversionFunction.call(exec, o, List()).toString(exec);
+ } else {
+ UString msg = "Can't convert " + o.className() +
+ " object to string";
+ Object error = Error::create(exec, RangeError,
+ msg.cstring().c_str());
+ exec->setException(error);
+ return error;
+ }
+ } else {
+ str += element.toString(exec);
+ }
+ }
+
if ( exec->hadException() )
break;
}
1.4481 +10 -0 WebCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebCore/ChangeLog,v
retrieving revision 1.4480
retrieving revision 1.4481
diff -u -r1.4480 -r1.4481
--- ChangeLog 27 Jul 2005 23:41:26 -0000 1.4480
+++ ChangeLog 27 Jul 2005 23:44:51 -0000 1.4481
@@ -1,3 +1,13 @@
+2005-07-27 Geoffrey Garen <ggaren at apple.com>
+
+ - added test case for http://bugzilla.opendarwin.org/show_bug.cgi?id=4147
+ Array.toString() and toLocaleString() improvements from KDE KJS
+
+ Test cases added:
+
+ * layout-tests/fast/js/toString-overrides-expected.txt: Added.
+ * layout-tests/fast/js/toString-overrides.html: Added.
+
2005-07-27 Beth Dakin <bdakin at apple.com>
Fix submitted by: Andrew Wellington <proton at wiretapped.net>
Reviewed by Beth Dakin.
1.1 WebCore/layout-tests/fast/js/toString-overrides-expected.txt
Index: toString-overrides-expected.txt
===================================================================
This test checks for regression against 4147: Array.toString() and toLocaleString() improvements from KDE KJS.
On success, you will see a series of "PASS" messages.
PASS. [1].toString() is '1'
PASS. [1].toLocaleString() is 'toLocaleString'
PASS. [1].toLocaleString() is '1'
PASS. [/r/].toString() is 'toString2'
PASS. [/r/].toLocaleString() is 'toLocaleString2'
PASS. [/r/].toLocaleString() is 'toString2'
PASS. caught is true
1.1 WebCore/layout-tests/fast/js/toString-overrides.html
Index: toString-overrides.html
===================================================================
<html>
<head>
<script>
function debug(message) {
var paragraph = document.createElement("p");
paragraph.appendChild(document.createTextNode(message));
document.getElementById("console").appendChild(paragraph);
}
function test() {
if (window.layoutTestController) {
window.layoutTestController.dumpAsText();
}
// Utility functions for JS test suite
// (c) 2001 Harri Porten <porten at kde.org>
function testPassed(msg)
{
debug("PASS. " + msg);
}
function testFailed(msg)
{
debug("FAIL. " + 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);
}
// 15.4 Array Objects
// (c) 2001 Harri Porten <porten at kde.org>
// 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;
}
</script>
</head>
<body onload="test()">
<p>This test checks for regression against <a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=4147">4147: Array.toString() and toLocaleString() improvements from KDE KJS.</a></p>
<p>On success, you will see a series of "PASS" messages.</p>
<hr>
<div id="console"></div>
</body>
</html>
More information about the webkit-changes
mailing list