Add some of my tests.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Array.DefineOwnProperty.html Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,25 @@
+<!doctype html>
+<title>Array.[[DefineOwnProperty]]</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=http://es5.github.com/#x15.4.5.1>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id=log></div>
+<script>
+test(function() {
+ var arr = new Array;
+ assert_equals(arr.length, 0);
+
+ var called = 0;
+ Object.defineProperty(arr, 0, { get: function() { ++called; return 7 } });
+ assert_equals(arr.length, 1);
+ assert_equals(called, 0);
+
+ assert_equals(arr[0], 7);
+ assert_equals(called, 1);
+
+ assert_equals(String(arr), "7");
+ assert_equals(called, 2);
+});
+</script>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Array.prototype.join-order.html Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,82 @@
+<!doctype html>
+<title>Array.prototype.join</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=http://es5.github.com/#x15.4.4.5>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id=log></div>
+<script>
+var test_error = { name: "test" };
+
+// Step 1.
+test(function() {
+ assert_throws(new TypeError(), function() {
+ [].join.call(null, {
+ toString: function() { assert_unreached(); }
+ });
+ });
+ assert_throws(new TypeError(), function() {
+ [].join.call(undefined, {
+ toString: function() { assert_unreached(); }
+ });
+ });
+}, "Array.prototype.join must call ToObject before looking at the separator argument.")
+
+var generateTest = function(throwing_getter) {
+ var throwing_object = {};
+ var interfaces = [Boolean, Number];
+
+ var objects = interfaces.map(function(p) { return p.prototype; });
+ objects.push(throwing_object);
+ objects.forEach(function(object) {
+ Object.defineProperty(object, "length", {
+ get: throwing_getter,
+ configurable: true
+ });
+ });
+
+ [throwing_object, true, false, 0, 1, Math.PI].forEach(function(that) {
+ test(function() {
+ assert_throws(test_error, function() {
+ [].join.call(that, ",");
+ });
+ }, "Array.prototype.join must forward the exception from the this object's length property")
+ test(function() {
+ assert_throws(test_error, function() {
+ [].join.call(that, {
+ toString: function() { assert_unreached(); }
+ });
+ });
+ }, "Array.prototype.join must get the this object's length property before looking at the separator argument.")
+ });
+ interfaces.forEach(function(iface) {
+ delete iface.length;
+ });
+}
+
+// Step 2.
+test(function() {
+ generateTest(function() { throw test_error; });
+}, "Step 2.");
+
+// Step 3.
+test(function() {
+ generateTest(function() {
+ return {
+ valueOf: function() { throw test_error; }
+ };
+ });
+ generateTest(function() {
+ return {
+ toString: function() { throw test_error; }
+ };
+ });
+ generateTest(function() {
+ return {
+ valueOf: function() { throw test_error; },
+ toString: function() { assert_notreached("toString should not be invoked if valueOf exists"); }
+ };
+ });
+}, "Step 3.");
+</script>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/MANIFEST Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,6 @@
+Array.DefineOwnProperty.html
+Array.prototype.join-order.html
+Math.max.html
+support Math.maxmin.js
+Math.min.html
+Object.prototype.hasOwnProperty-order.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Math.max.html Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,13 @@
+<!doctype html>
+<title>Math.max</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=http://es5.github.com/#x15.8.2>
+<link rel=help href=http://es5.github.com/#x15.8.2.11>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id=log></div>
+<script src=Math.maxmin.js></script>
+<script>
+testMathMaxMin("max");
+</script>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Math.maxmin.js Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,47 @@
+function testMathMaxMin(aFun) {
+ var test_error = { name: "test" };
+ test(function() {
+ assert_throws(test_error, function() {
+ Math[aFun](NaN, {
+ valueOf: function() {
+ throw test_error;
+ }
+ });
+ });
+ }, "ToNumber should be called on all arguments: NaN.");
+ test(function() {
+ assert_throws(test_error, function() {
+ Math[aFun](-Infinity, {
+ valueOf: function() {
+ throw test_error;
+ }
+ });
+ });
+ }, "ToNumber should be called on all arguments: -Infinity.");
+ test(function() {
+ assert_throws(test_error, function() {
+ Math[aFun](Infinity, {
+ valueOf: function() {
+ throw test_error;
+ }
+ });
+ });
+ }, "ToNumber should be called on all arguments: Infinity.");
+ test(function() {
+ assert_throws(test_error, function() {
+ Math[aFun]({
+ valueOf: function() {
+ throw test_error;
+ }
+ },
+ {
+ valueOf: function() {
+ throw 7;
+ }
+ });
+ });
+ }, "ToNumber should be called left to right.");
+ test(function() {
+ assert_equals(Math[aFun]("1"), 1);
+ }, "Should return a number.");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Math.min.html Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,13 @@
+<!doctype html>
+<title>Math.min</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=http://es5.github.com/#x15.8.2>
+<link rel=help href=http://es5.github.com/#x15.8.2.12>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id=log></div>
+<script src=Math.maxmin.js></script>
+<script>
+testMathMaxMin("min");
+</script>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/Object.prototype.hasOwnProperty-order.html Tue Jun 19 15:05:08 2012 +0200
@@ -0,0 +1,21 @@
+<!doctype html>
+<title>Object.prototype.hasOwnProperty</title>
+<link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger>
+<link rel=help href=http://es5.github.com/#x15.4.4.5>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+
+<div id=log></div>
+<script>
+var test_error = { name: "test" };
+
+test(function() {
+ [null, undefined, {}].forEach(function(that) {
+ test(function() {
+ assert_throws(test_error, function() {
+ ({}).hasOwnProperty.call(that, { toString: function() { throw test_error; } });
+ });
+ });
+ });
+});
+</script>