From fb03635e6d1a0a9760b7752147689805f82df5ed Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 15 Dec 2014 00:03:25 -0800 Subject: [PATCH] Adding tests and support for comparing generators. --- index.js | 5 +++++ package.json | 7 +++++-- test.js | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 43106a3..7a726b2 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ var ObjectPrototype = Object.prototype; var toString = ObjectPrototype.toString; var has = ObjectPrototype.hasOwnProperty; +var isGenerator = require('is-generator-function'); var getPrototypeOf = Object.getPrototypeOf; if (!getPrototypeOf) { @@ -69,6 +70,10 @@ module.exports = function isEqual(value, other) { if (!isEqual(value.name, other.name)) { return false; } if (!isEqual(value.length, other.length)) { return false; } + var valueIsGen = isGenerator(value); + var otherIsGen = isGenerator(other); + if (valueIsGen !== otherIsGen) { return false; } + return isEqual(String(value), String(other)); } diff --git a/package.json b/package.json index ad4ae8c..b5bbb84 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,15 @@ "comparison", "equality" ], - "dependencies": {}, + "dependencies": { + "is-generator-function": "~1.0.0" + }, "devDependencies": { "tape": "~3.0.3", "covert": "1.0.0", "jscs": "~1.8.1", - "foreach": "~2.0.5" + "foreach": "~2.0.5", + "make-generator-function": "~1.0.0" }, "testling": { "files": "test.js", diff --git a/test.js b/test.js index 1a94a61..03177b0 100644 --- a/test.js +++ b/test.js @@ -2,6 +2,7 @@ var test = require('tape'); var isEqual = require('./'); +var hasGeneratorSupport = typeof require('make-generator-function') === 'function'; var forEach = require('foreach'); var copyFunction = function (fn) { @@ -122,6 +123,9 @@ test('functions', function (t) { var g = function g() { /* SOME STUFF */ return 1; }; var anon1 = function () { /* ANONYMOUS! */ return 'anon'; }; var anon2 = function () { /* ANONYMOUS! */ return 'anon'; }; + /* jscs: disable */ + var fnNoSpace = function(){}; + /* jscs: enable */ /* for code coverage */ f1(); @@ -143,6 +147,20 @@ test('functions', function (t) { t.notOk(isEqual(f1, f3), 'functions with same names but different implementations are not equal'); t.ok(isEqual(anon1, anon2), 'anon functions with same implementations are equal'); + t.test('generators', { skip: !hasGeneratorSupport }, function (st) { + var genFnStar = Function('return function* () {};')(); + var genFnSpaceStar = Function('return function *() {};')(); + var genNoSpaces = Function('return function*(){};')(); + st.notOk(isEqual(fnNoSpace, genNoSpaces), 'generator and fn that are otherwise identical are not equal'); + + var generators = [genFnStar, genFnSpaceStar, genNoSpaces]; + forEach(generators, function (generator) { + st.ok(isEqual(generator, generator), generator + ' is equal to itself'); + st.ok(isEqual(generator, copyFunction(generator)), generator + ' is equal to copyFunction(generator)'); + }); + st.end(); + }); + t.end(); });