| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| // |
| // Test for-in enumerating properties on prototype of primitives |
| // |
| var echo = WScript.Echo; |
| |
| function guard(f) { |
| try { |
| f(); |
| } catch (e) { |
| echo(e); |
| } |
| } |
| |
| Object.prototype.object_value = "value on Object.prototype"; |
| Object.defineProperty( |
| Object.prototype, "object_getter", { |
| get: function () { return "getter on Object.prototype: " + typeof(this) + " " + this; }, |
| enumerable: true, |
| configurable: true |
| }); |
| |
| Number.prototype.number_proto = "Value on Number.prototype"; |
| Boolean.prototype.boolean_proto = "Value on Boolean.prototype"; |
| String.prototype.string_proto = "Value on String.prototype"; |
| |
| // Test on special values and primitives |
| var tests = [ |
| null, |
| undefined, |
| Number.NaN, |
| 0.4, |
| -0, |
| 0, |
| 1, |
| "", |
| true, |
| false, |
| |
| // Special values around Int32/Int31 boundary |
| 0x80000000, |
| 0x7FFFFFFF, |
| 0x40000000, |
| 0x3FFFFFFF, |
| -0x3FFFFFFF, |
| -0x40000000, |
| -0x40000001, |
| -0x80000000, |
| -0x80000001, |
| ]; |
| |
| tests.forEach(function (a) { |
| echo("---- Test:", a, "----"); |
| |
| guard(function () { |
| echo(a.object_value); // Get from prototype |
| }); |
| guard(function () { |
| echo(a.object_getter); // Getter on prototype |
| }); |
| |
| echo(); |
| for (var p in a) { // Enumerate properties should walk prototype |
| echo(" ", p); |
| } |
| |
| echo(); |
| }); |