diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js
index 69c0d8686eb..85a68990c17 100644
--- a/dlls/mshtml/tests/es5.js
+++ b/dlls/mshtml/tests/es5.js
@@ -724,6 +724,83 @@ function test_getPrototypeOf() {
next_test();
}
+function test_bind() {
+ var f, r;
+ var o = new Object(), o2 = new Object();
+
+ f = (function() {
+ ok(this === o, "this != o");
+ ok(arguments.length === 0, "arguments.length = " + arguments.length);
+ return 1;
+ }).bind(o);
+ ok(f.length === 0, "f.length = " + f.length);
+ r = f.call(o2);
+ ok(r === 1, "r = " + r);
+
+ f = (function() {
+ ok(this === o, "this != o");
+ ok(arguments.length === 1, "arguments.length = " + arguments.length);
+ ok(arguments[0] === 1, "arguments[0] = " + arguments[0]);
+ return 1;
+ }).bind(o, 1);
+ ok(f.length === 0, "f.length = " + f.length);
+ r = f.call(o2);
+ ok(r === 1, "r = " + r);
+
+ f = (function() {
+ ok(this === o, "this != o");
+ ok(arguments.length === 2, "arguments.length = " + arguments.length);
+ ok(arguments[0] === 1, "arguments[0] = " + arguments[0]);
+ ok(arguments[1] === 2, "arguments[1] = " + arguments[0]);
+ return 1;
+ }).bind(o, 1);
+ r = f.call(o2, 2);
+ ok(r === 1, "r = " + r);
+
+ o2.f = f;
+ r = o2.f(2);
+ ok(r === 1, "r = " + r);
+
+ f = (function test(x, y, z) {
+ ok(this === o, "this != o");
+ ok(arguments.length === 2, "arguments.length = " + arguments.length);
+ ok(x === 1, "x = " + x);
+ ok(y === 2, "y = " + y);
+ ok(z === undefined, "z = " + z);
+ return 1;
+ }).bind(o, 1);
+ ok(f.length === 2, "f.length = " + f.length);
+ r = f.call(o2, 2);
+ ok(r === 1, "r = " + r);
+ ok(f.toString() === "\nfunction() {\n [native code]\n}\n", "f.toString() = " + f.toString());
+ ok(!("prototype" in f), "bound function has prototype");
+
+ var a = [];
+ f = Array.prototype.push.bind(a, 1);
+ f();
+ ok(a.length === 1, "a.length = " + a.length);
+ f(2);
+ ok(a.length === 3, "a.length = " + a.length);
+ ok(f.length === 0, "f.length = " + f.length);
+ ok(f.toString() === "\nfunction() {\n [native code]\n}\n", "f.toString() = " + f.toString());
+ ok(a.toString() === "1,1,2", "a = " + a);
+ f.call([], 3);
+ ok(a.toString() === "1,1,2,1,3", "a = " + a);
+
+ f = (function() { return this; }).bind(a);
+ ok(f() === a, "f() != a");
+
+ var t;
+ f = (function() { return t = this; }).bind(a);
+ ok(new f() === t, "new f() != a");
+ ok(typeof(t) === "object", "typeof(t) = " + typeof(t));
+ ok(t != a, "t == a");
+
+ ok(Function.prototype.bind.length === 1, "Function.prototype.bind.length = " + Function.prototype.bind.length);
+
+ next_test();
+}
+
var tests = [
test_date_now,
test_toISOString,
@@ -738,5 +815,6 @@ var tests = [
test_string_trim,
test_global_properties,
test_string_split,
- test_getPrototypeOf
+ test_getPrototypeOf,
+ test_bind
];