| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | 
							
- describe('Function', function() {
 
-     "use strict";
 
-     describe('bind', function() {
 
-         var actual, expected,
 
-             testSubject;
 
-         
 
-         testSubject = {
 
-             push: function(o) {
 
-                 this.a.push(o);
 
-             }
 
-         };
 
-         
 
-         function func() {
 
-             Array.prototype.forEach.call(arguments, function(a) {
 
-                 this.push(a);
 
-             }, this);
 
-             return this;
 
-         };
 
-         
 
-         beforeEach(function() {
 
-             actual = [];
 
-             testSubject.a = [];
 
-         });
 
-         
 
-         it('binds properly without a context', function() {
 
-             var context;
 
-             testSubject.func = function() {
 
-                 context = this;
 
-             }.bind();
 
-             testSubject.func();
 
-             expect(context).toBe(function() {return this}.call());
 
-         });
 
-         it('binds properly without a context, and still supplies bound arguments', function() {
 
-             var a, context;
 
-             testSubject.func = function() {
 
-                 a = Array.prototype.slice.call(arguments);
 
-                 context = this;
 
-             }.bind(undefined, 1,2,3);
 
-             testSubject.func(1,2,3);
 
-             expect(a).toEqual([1,2,3,1,2,3]);
 
-             expect(context).toBe(function() {return this}.call());
 
-         });
 
-         it('binds a context properly', function() {
 
-             testSubject.func = func.bind(actual);
 
-             testSubject.func(1,2,3);
 
-             expect(actual).toEqual([1,2,3]);
 
-             expect(testSubject.a).toEqual([]);
 
-         });
 
-         it('binds a context and supplies bound arguments', function() {
 
-             testSubject.func = func.bind(actual, 1,2,3);
 
-             testSubject.func(4,5,6);
 
-             expect(actual).toEqual([1,2,3,4,5,6]);
 
-             expect(testSubject.a).toEqual([]);
 
-         });
 
-         
 
-         it('returns properly without binding a context', function() {
 
-             testSubject.func = function() {
 
-                 return this;
 
-             }.bind();
 
-             var context = testSubject.func();
 
-             expect(context).toBe(function() {return this}.call());
 
-         });
 
-         it('returns properly without binding a context, and still supplies bound arguments', function() {
 
-             var context;
 
-             testSubject.func = function() {
 
-                 context = this;
 
-                 return Array.prototype.slice.call(arguments);
 
-             }.bind(undefined, 1,2,3);
 
-             actual = testSubject.func(1,2,3);
 
-             expect(context).toBe(function() {return this}.call());
 
-             expect(actual).toEqual([1,2,3,1,2,3]);
 
-         });
 
-         it('returns properly while binding a context properly', function() {
 
-             var ret;
 
-             testSubject.func = func.bind(actual);
 
-             ret = testSubject.func(1,2,3);
 
-             expect(ret).toBe(actual);
 
-             expect(ret).not.toBe(testSubject);
 
-         });
 
-         it('returns properly while binding a context and supplies bound arguments', function() {
 
-             var ret;
 
-             testSubject.func = func.bind(actual, 1,2,3);
 
-             ret = testSubject.func(4,5,6);
 
-             expect(ret).toBe(actual);
 
-             expect(ret).not.toBe(testSubject);
 
-         });
 
-         it('passes the correct arguments as a constructor', function() {
 
-             var ret, expected = { name: "Correct" };
 
-             testSubject.func = function(arg) {
 
-                 return arg;
 
-             }.bind({ name: "Incorrect" });
 
-             ret = new testSubject.func(expected);
 
-             expect(ret).toBe(expected);
 
-         });
 
-         it('returns the return value of the bound function when called as a constructor', function () {
 
-             var oracle = [1, 2, 3];
 
-             var subject = function () {
 
-                 return oracle;
 
-             }.bind(null);
 
-             var result = new subject;
 
-             expect(result).toBe(oracle);
 
-         });
 
-         it('returns the correct value if constructor returns primitive', function() {
 
-             var oracle = [1, 2, 3];
 
-             var subject = function () {
 
-                 return oracle;
 
-             }.bind(null);
 
-             var result = new subject;
 
-             expect(result).toBe(oracle);
 
-             oracle = {};
 
-             result = new subject;
 
-             expect(result).toBe(oracle);
 
-             oracle = function(){};
 
-             result = new subject;
 
-             expect(result).toBe(oracle);
 
-             oracle = "asdf";
 
-             result = new subject;
 
-             expect(result).not.toBe(oracle);
 
-             oracle = null;
 
-             result = new subject;
 
-             expect(result).not.toBe(oracle);
 
-             oracle = true;
 
-             result = new subject;
 
-             expect(result).not.toBe(oracle);
 
-             oracle = 1;
 
-             result = new subject;
 
-             expect(result).not.toBe(oracle);
 
-         });
 
-         it('returns the value that instance of original "class" when called as a constructor', function() {
 
-             var classA = function(x) {
 
-                 this.name = x || "A";
 
-             }
 
-             var classB = classA.bind(null, "B");
 
-             
 
-             var result = new classB;
 
-             expect(result instanceof classA).toBe(true);
 
-             expect(result instanceof classB).toBe(true);
 
-         });
 
-     });
 
- });
 
 
  |