msaboff@apple.com | 6ce5b2c | 2016-09-03 00:12:16 +0000 | [diff] [blame] | 1 | //------------------------------------------------------------------------------------------------------- |
| 2 | // Copyright (C) Microsoft. All rights reserved. |
| 3 | // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| 4 | //------------------------------------------------------------------------------------------------------- |
| 5 | |
| 6 | function write(v) { WScript.Echo(v + ""); } |
| 7 | |
| 8 | var errorCount = 0; |
| 9 | |
| 10 | // global |
| 11 | |
| 12 | var globalList = [ |
| 13 | ["eval",1], |
| 14 | ["parseInt",2], |
| 15 | ["parseFloat",1], |
| 16 | ["isNaN",1], |
| 17 | ["isFinite",1], |
| 18 | ["decodeURI",1], |
| 19 | ["encodeURI",1], |
| 20 | ["decodeURIComponent",1], |
| 21 | ["encodeURIComponent",1], |
| 22 | ["Object",0], |
| 23 | ["Function",1], |
| 24 | ["Array",1], |
| 25 | ["String",1], |
| 26 | ["Boolean",1], |
| 27 | ["Number",1], |
| 28 | ["Date",7], |
| 29 | ["RegExp",2], |
| 30 | ["Error",1], |
| 31 | ["EvalError",1], |
| 32 | ["RangeError",1], |
| 33 | ["ReferenceError",1], |
| 34 | ["SyntaxError",1], |
| 35 | ["TypeError",1], |
| 36 | ["URIError",1] |
| 37 | ] |
| 38 | |
| 39 | // Object |
| 40 | var objList = [ |
| 41 | //TODO ["constructor",0], |
| 42 | ["toString",0], |
| 43 | ["toLocaleString",0], |
| 44 | ["valueOf",0], |
| 45 | ["hasOwnProperty",1] , |
| 46 | ["isPrototypeOf",1] , |
| 47 | ["propertyIsEnumerable",1] |
| 48 | ] |
| 49 | |
| 50 | // Function |
| 51 | var funcList = [ |
| 52 | ["constructor",1], |
| 53 | ["toString",0], |
| 54 | ["apply",2 ], |
| 55 | ["call", 1] |
| 56 | ] |
| 57 | |
| 58 | // Array |
| 59 | var arrList = [ |
| 60 | // FuncName, length |
| 61 | ["constructor",1], |
| 62 | ["toString",0], |
| 63 | ["toLocaleString", 0], |
| 64 | ["concat", 1], |
| 65 | ["join",1], |
| 66 | ["pop",0], |
| 67 | ["push",1], |
| 68 | ["reverse",0], |
| 69 | ["shift",0], |
| 70 | ["slice",2], |
| 71 | ["sort",1], |
| 72 | ["splice",2], |
| 73 | ["unshift",1] |
| 74 | ]; |
| 75 | |
| 76 | |
| 77 | // String |
| 78 | var stringList = [ |
| 79 | ["constructor",1], |
| 80 | ["toString",0], |
| 81 | ["valueOf",0], |
| 82 | ["charAt",1], |
| 83 | ["charCodeAt",1], |
| 84 | ["concat",1], |
| 85 | ["indexOf",2], |
| 86 | ["lastIndexOf",2], |
| 87 | ["localeCompare",1], |
| 88 | ["match",1], |
| 89 | ["replace",1], |
| 90 | ["search",0], |
| 91 | ["slice",0], |
| 92 | ["split",2], |
| 93 | ["substring",2], |
| 94 | ["toLowerCase",0], |
| 95 | ["toLocaleLowerCase",0], |
| 96 | ["toUpperCase",0], |
| 97 | ["toLocaleUpperCase",0], |
| 98 | |
| 99 | // not in ECMA spec |
| 100 | |
| 101 | ["anchor",1], |
| 102 | ["big",0], |
| 103 | ["blink",0], |
| 104 | ["bold",0], |
| 105 | ["fixed",0], |
| 106 | ["fontcolor",1], |
| 107 | ["fontsize",1], |
| 108 | ["italics",0], |
| 109 | ["link",1], |
| 110 | ["small",0], |
| 111 | ["strike",0], |
| 112 | ["sub",0], |
| 113 | ["sup",0], |
| 114 | ["substr",2] |
| 115 | ] |
| 116 | |
| 117 | var stringList2 = [ |
| 118 | ["fromCharCode", 0] |
| 119 | ]; |
| 120 | |
| 121 | // Boolean |
| 122 | var boolList = [ |
| 123 | ["constructor",1], |
| 124 | ["toString",0], |
| 125 | ["valueOf",0] |
| 126 | ] |
| 127 | |
| 128 | //Number |
| 129 | |
| 130 | var numberList = [ |
| 131 | ["constructor",1], |
| 132 | ["toString",1], |
| 133 | ["toLocaleString",0], |
| 134 | ["valueOf",0], |
| 135 | ["toFixed",1], |
| 136 | ["toExponential",1], |
| 137 | ["toPrecision",1] |
| 138 | ] |
| 139 | |
| 140 | // Math object is a single object - 18 |
| 141 | var mathList = [ |
| 142 | |
| 143 | ["abs",1], |
| 144 | ["acos",1], |
| 145 | ["asin",1], |
| 146 | ["atan",1], |
| 147 | ["atan2",2], |
| 148 | ["ceil",1], |
| 149 | ["cos",1], |
| 150 | ["exp",1], |
| 151 | ["floor",1], |
| 152 | ["log",1], |
| 153 | ["max",2], |
| 154 | ["min",2], |
| 155 | ["pow",2], |
| 156 | ["random",0], |
| 157 | ["round",1], |
| 158 | ["sin",1], |
| 159 | ["sqrt",1], |
| 160 | ["tan",1] |
| 161 | ] |
| 162 | |
| 163 | // Date Prototype object |
| 164 | var dateList = [ |
| 165 | ["constructor",7], |
| 166 | |
| 167 | ["toString",0], |
| 168 | ["toDateString",0], |
| 169 | ["toTimeString",0], |
| 170 | ["toLocaleString",0], |
| 171 | ["toLocaleDateString",0], |
| 172 | |
| 173 | ["valueOf",0], |
| 174 | |
| 175 | ["getTime",0], |
| 176 | |
| 177 | ["getFullYear",0], |
| 178 | ["getUTCFullYear",0], |
| 179 | |
| 180 | ["getMonth",0], |
| 181 | ["getUTCMonth",0], |
| 182 | |
| 183 | ["getDate",0], |
| 184 | ["getUTCDate",0], |
| 185 | |
| 186 | ["getDay",0], |
| 187 | ["getUTCDay",0], |
| 188 | |
| 189 | ["getHours",0], |
| 190 | ["getUTCHours",0], |
| 191 | |
| 192 | ["getMinutes",0], |
| 193 | ["getUTCMinutes",0], |
| 194 | |
| 195 | ["getSeconds",0], |
| 196 | ["getUTCSeconds",0], |
| 197 | |
| 198 | ["getMilliseconds",0], |
| 199 | ["getUTCMilliseconds",0], |
| 200 | |
| 201 | ["getTimezoneOffset",0], |
| 202 | |
| 203 | ["setTime",1], |
| 204 | |
| 205 | ["setMilliseconds",1], |
| 206 | ["setUTCMilliseconds",1], |
| 207 | |
| 208 | ["setSeconds",2], |
| 209 | ["setUTCSeconds",2], |
| 210 | |
| 211 | ["setMinutes",3], |
| 212 | ["setUTCMinutes",3], |
| 213 | |
| 214 | ["setHours",4], |
| 215 | ["setUTCHours",4], |
| 216 | |
| 217 | ["setDate",1], |
| 218 | ["setUTCDate",1], |
| 219 | |
| 220 | ["setMonth",2], |
| 221 | ["setUTCMonth",2], |
| 222 | |
| 223 | ["setFullYear",3], |
| 224 | ["setUTCFullYear",3], |
| 225 | |
| 226 | ["toUTCString",0], |
| 227 | |
| 228 | // not in ECMA spec |
| 229 | |
| 230 | ["toGMTString",0], |
| 231 | ["toLocaleTimeString",0 ], |
| 232 | ["toUTCString",0], |
| 233 | |
| 234 | ["setYear",1], |
| 235 | ["getYear",0] |
| 236 | |
| 237 | // TODO ["getVarDate",0] |
| 238 | ] |
| 239 | |
| 240 | // static date functions |
| 241 | var dateList2 = [ |
| 242 | ["parse",1], |
| 243 | ["UTC",7] |
| 244 | ] |
| 245 | |
| 246 | |
| 247 | |
| 248 | // RegExp object |
| 249 | |
| 250 | var regxpList = [ |
| 251 | ["constructor",2], |
| 252 | ["exec",1], |
| 253 | ["test",1], |
| 254 | ["toString",0] //, |
| 255 | // not in ECMA spec |
| 256 | // TODO ["compile",2] |
| 257 | |
| 258 | ] |
| 259 | |
| 260 | |
| 261 | // Error object |
| 262 | |
| 263 | var errorList = [ |
| 264 | ["constructor",1], |
| 265 | ["name",5], |
| 266 | ["message",0], |
| 267 | ["toString",0] |
| 268 | ] |
| 269 | |
| 270 | |
| 271 | function doEval(scen) { |
| 272 | try { |
| 273 | var res = eval(scen); |
| 274 | write("No Exception: " + scen); |
| 275 | } catch (e) { |
| 276 | write(" Exception: " + scen + ". :: " + e.message); |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | var somevar = 0; |
| 281 | |
| 282 | function TestNew(list, str) { |
| 283 | for (var i=0; i<list.length; i++) { |
| 284 | var fname = list[i][0]; |
| 285 | doEval("somevar = new " + str+fname+"()"); |
| 286 | } |
| 287 | } |
| 288 | |
| 289 | TestNew(globalList,""); |
| 290 | |
| 291 | TestNew(objList, "Object.prototype."); |
| 292 | |
| 293 | TestNew(funcList, "Function.prototype."); |
| 294 | |
| 295 | TestNew(arrList, "Array.prototype."); |
| 296 | |
| 297 | TestNew(stringList, "String.prototype."); |
| 298 | TestNew(stringList2, "String."); |
| 299 | |
| 300 | TestNew(boolList, "Boolean.prototype."); |
| 301 | |
| 302 | TestNew(numberList, "Number.prototype."); |
| 303 | |
| 304 | TestNew(mathList, "Math."); |
| 305 | |
| 306 | TestNew(dateList, "Date.prototype."); |
| 307 | TestNew(dateList2,"Date."); |
| 308 | |
| 309 | TestNew(regxpList, "RegExp.prototype."); |
| 310 | |
| 311 | TestNew(errorList, "Error.prototype."); |
| 312 | |
| 313 | |
| 314 | if ( errorCount > 0 ) { |
| 315 | throw Error(errorCount + " Test(s) Failed"); |
| 316 | } |