Home | History | Annotate | Download | only in ObjectObjects
      1 /* The contents of this file are subject to the Netscape Public
      2  * License Version 1.1 (the "License"); you may not use this file
      3  * except in compliance with the License. You may obtain a copy of
      4  * the License at http://www.mozilla.org/NPL/
      5  *
      6  * Software distributed under the License is distributed on an "AS
      7  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
      8  * implied. See the License for the specific language governing
      9  * rights and limitations under the License.
     10  *
     11  * The Original Code is Mozilla Communicator client code, released March
     12  * 31, 1998.
     13  *
     14  * The Initial Developer of the Original Code is Netscape Communications
     15  * Corporation. Portions created by Netscape are
     16  * Copyright (C) 1998 Netscape Communications Corporation. All
     17  * Rights Reserved.
     18  *
     19  * Contributor(s):
     20  *
     21  */
     22 /**
     23     File Name:          15.2.4.2.js
     24     ECMA Section:       15.2.4.2 Object.prototype.toString()
     25 
     26     Description:        When the toString method is called, the following
     27                         steps are taken:
     28                         1.  Get the [[Class]] property of this object
     29                         2.  Call ToString( Result(1) )
     30                         3.  Compute a string value by concatenating the three
     31                             strings "[object " + Result(2) + "]"
     32                         4.  Return Result(3).
     33 
     34     Author:             christine (at) netscape.com
     35     Date:               28 october 1997
     36 
     37 */
     38     var SECTION = "15.2.4.2";
     39     var VERSION = "ECMA_1";
     40     startTest();
     41     var TITLE   = "Object.prototype.toString()";
     42 
     43     writeHeaderToLog( SECTION + " "+ TITLE);
     44 
     45     var testcases = getTestCases();
     46     test();
     47 
     48 function getTestCases() {
     49     var array = new Array();
     50     var item = 0;
     51 
     52     array[item++] = new TestCase( SECTION,  "(new Object()).toString()",    "[object Object]",  (new Object()).toString() );
     53 
     54     array[item++] = new TestCase( SECTION,  "myvar = this;  myvar.toString = Object.prototype.toString; myvar.toString()",
     55                                             GLOBAL,
     56                                             eval("myvar = this;  myvar.toString = Object.prototype.toString; myvar.toString()") );
     57 
     58     array[item++] = new TestCase( SECTION,  "myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()",
     59                                             "[object Function]",
     60                                             eval("myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()") );
     61 
     62     array[item++] = new TestCase( SECTION,  "myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()",
     63                                             '[object Object]',
     64                                             eval("myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()") );
     65 
     66     array[item++] = new TestCase( SECTION,  "myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()",
     67                                             "[object Number]",
     68                                             eval("myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()") );
     69 
     70     array[item++] = new TestCase( SECTION,  "myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()",
     71                                             "[object String]",
     72                                             eval("myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()") );
     73 
     74     array[item++] = new TestCase( SECTION,  "myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()",
     75                                             "[object Math]",
     76                                             eval("myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()") );
     77 
     78     array[item++] = new TestCase( SECTION,  "myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()",
     79                                             "[object Function]",
     80                                             eval("myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()") );
     81 
     82     array[item++] = new TestCase( SECTION,  "myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()",
     83                                             "[object Array]",
     84                                             eval("myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()") );
     85 
     86     array[item++] = new TestCase( SECTION,  "myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()",
     87                                             "[object Boolean]",
     88                                             eval("myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()") );
     89 
     90     array[item++] = new TestCase( SECTION,  "myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()",
     91                                             "[object Date]",
     92                                             eval("myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()") );
     93 
     94     array[item++] = new TestCase( SECTION,  "var MYVAR = new Object( this ); MYVAR.toString()",
     95                                             GLOBAL,
     96                                             eval("var MYVAR = new Object( this ); MYVAR.toString()") );
     97 
     98     array[item++] = new TestCase( SECTION,  "var MYVAR = new Object(); MYVAR.toString()",
     99                                             "[object Object]",
    100                                             eval("var MYVAR = new Object(); MYVAR.toString()") );
    101 
    102     array[item++] = new TestCase( SECTION,  "var MYVAR = new Object(void 0); MYVAR.toString()",
    103                                             "[object Object]",
    104                                             eval("var MYVAR = new Object(void 0); MYVAR.toString()") );
    105 
    106     array[item++] = new TestCase( SECTION,  "var MYVAR = new Object(null); MYVAR.toString()",
    107                                             "[object Object]",
    108                                             eval("var MYVAR = new Object(null); MYVAR.toString()") );
    109 
    110     return ( array );
    111 }
    112 function test( array ) {
    113     for ( tc=0 ; tc < testcases.length; tc++ ) {
    114         testcases[tc].passed = writeTestCaseResult(
    115                             testcases[tc].expect,
    116                             testcases[tc].actual,
    117                             testcases[tc].description +" = "+ testcases[tc].actual );
    118 
    119         testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
    120     }
    121     stopTest();
    122     return ( testcases );
    123 }
    124 
    125 function MyObject( value ) {
    126     this.value = new Function( "return this.value" );
    127     this.toString = new Function ( "return this.value+''");
    128 }