[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