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/
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.
11 * The Original Code is Mozilla Communicator client code, released March
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
24 ECMA Section: 9.2 Type Conversion: ToBoolean
25 Description: rules for converting an argument to a boolean.
28 Boolean input argument( no conversion )
29 Number returns false for 0, -0, and NaN
31 String return false if the string is empty
32 (length is 0) otherwise the result is
34 Object all return true
36 Author: christine@netscape.com
40 var VERSION = "ECMA_1";
42 var TITLE = "ToBoolean";
44 writeHeaderToLog( SECTION + " "+ TITLE);
46 var testcases = new Array();
50 testcases[tc++] = new TestCase( SECTION, "Boolean()", false, Boolean() );
51 testcases[tc++] = new TestCase( SECTION, "Boolean(var x)", false, Boolean(eval("var x")) );
52 testcases[tc++] = new TestCase( SECTION, "Boolean(void 0)", false, Boolean(void 0) );
53 testcases[tc++] = new TestCase( SECTION, "Boolean(null)", false, Boolean(null) );
54 testcases[tc++] = new TestCase( SECTION, "Boolean(false)", false, Boolean(false) );
55 testcases[tc++] = new TestCase( SECTION, "Boolean(true)", true, Boolean(true) );
56 testcases[tc++] = new TestCase( SECTION, "Boolean(0)", false, Boolean(0) );
57 testcases[tc++] = new TestCase( SECTION, "Boolean(-0)", false, Boolean(-0) );
58 testcases[tc++] = new TestCase( SECTION, "Boolean(NaN)", false, Boolean(Number.NaN) );
59 testcases[tc++] = new TestCase( SECTION, "Boolean('')", false, Boolean("") );
61 // normal test cases here
63 testcases[tc++] = new TestCase( SECTION, "Boolean(Infinity)", true, Boolean(Number.POSITIVE_INFINITY) );
64 testcases[tc++] = new TestCase( SECTION, "Boolean(-Infinity)", true, Boolean(Number.NEGATIVE_INFINITY) );
65 testcases[tc++] = new TestCase( SECTION, "Boolean(Math.PI)", true, Boolean(Math.PI) );
66 testcases[tc++] = new TestCase( SECTION, "Boolean(1)", true, Boolean(1) );
67 testcases[tc++] = new TestCase( SECTION, "Boolean(-1)", true, Boolean(-1) );
68 testcases[tc++] = new TestCase( SECTION, "Boolean([tab])", true, Boolean("\t") );
69 testcases[tc++] = new TestCase( SECTION, "Boolean('0')", true, Boolean("0") );
70 testcases[tc++] = new TestCase( SECTION, "Boolean('string')", true, Boolean("string") );
72 // ToBoolean (object) should always return true.
73 testcases[tc++] = new TestCase( SECTION, "Boolean(new String() )", true, Boolean(new String()) );
74 testcases[tc++] = new TestCase( SECTION, "Boolean(new String('') )", true, Boolean(new String("")) );
76 testcases[tc++] = new TestCase( SECTION, "Boolean(new Boolean(true))", true, Boolean(new Boolean(true)) );
77 testcases[tc++] = new TestCase( SECTION, "Boolean(new Boolean(false))", true, Boolean(new Boolean(false)) );
78 testcases[tc++] = new TestCase( SECTION, "Boolean(new Boolean() )", true, Boolean(new Boolean()) );
80 testcases[tc++] = new TestCase( SECTION, "Boolean(new Array())", true, Boolean(new Array()) );
82 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number())", true, Boolean(new Number()) );
83 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(-0))", true, Boolean(new Number(-0)) );
84 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(0))", true, Boolean(new Number(0)) );
85 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(NaN))", true, Boolean(new Number(Number.NaN)) );
87 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(-1))", true, Boolean(new Number(-1)) );
88 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(Infinity))", true, Boolean(new Number(Number.POSITIVE_INFINITY)) );
89 testcases[tc++] = new TestCase( SECTION, "Boolean(new Number(-Infinity))",true, Boolean(new Number(Number.NEGATIVE_INFINITY)) );
91 testcases[tc++] = new TestCase( SECTION, "Boolean(new Object())", true, Boolean(new Object()) );
92 testcases[tc++] = new TestCase( SECTION, "Boolean(new Function())", true, Boolean(new Function()) );
93 testcases[tc++] = new TestCase( SECTION, "Boolean(new Date())", true, Boolean(new Date()) );
94 testcases[tc++] = new TestCase( SECTION, "Boolean(new Date(0))", true, Boolean(new Date(0)) );
95 testcases[tc++] = new TestCase( SECTION, "Boolean(Math)", true, Boolean(Math) );
100 for ( tc=0; tc < testcases.length; tc++ ) {
101 testcases[tc].passed = writeTestCaseResult(
102 testcases[tc].expect,
103 testcases[tc].actual,
104 testcases[tc].description +" = "+
105 testcases[tc].actual );
107 testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
110 return ( testcases );