Sha256: 5b8fb542dcc54dd91a74b0214daa1db95c6f68d020e28329b63916e17618bf63

Contents?: true

Size: 1.91 KB

Versions: 52

Compression:

Stored size: 1.91 KB

Contents

'use strict';

var test = require('tape');

var hasNames = require('../');

test('named functions', function (t) {
	function f() {} // eslint-disable-line func-style
	var g = function h() {};

	t.equal(typeof hasNames, 'function', 'is a function');
	t.equal(hasNames(), f.name === 'f' && g.name === 'h', 'functions have names or not as expected');

	t.end();
});

var oDP = Object.defineProperty;
if (oDP) {
	try {
		oDP({}, 'a', { value: 1 });
	} catch (e) {
		oDP = null;
	}
}

test('functionsHaveConfigurableNames', function (t) {
	t.equal(typeof hasNames.functionsHaveConfigurableNames, 'function', 'is a function');

	if (hasNames()) {
		var fn = function f() {};
		if (oDP) {
			try {
				oDP(fn, 'name', { configurable: true, value: 'foo' });
			} catch (e) {}
			if (fn.name === 'f') {
				t.equal(hasNames.functionsHaveConfigurableNames(), false, 'function names are not configurable');
			} else if (fn.name === 'foo') {
				t.equal(hasNames.functionsHaveConfigurableNames(), true, 'function names are not configurable');
			} else {
				t.fail('functions have names, but something surprising has happened. Please report this!');
			}
		} else {
			t.equal(hasNames.functionsHaveConfigurableNames(), false, 'function names are not configurable');
		}
	} else {
		t.equal(hasNames.functionsHaveConfigurableNames(), false, 'functions do not have names');
	}

	t.end();
});

test('boundFunctionsHaveNames', function (t) {
	t.equal(typeof hasNames.boundFunctionsHaveNames, 'function', 'is a function');

	var fn = function f() {};
	if (typeof fn.bind !== 'function') {
		t.equal(hasNames.boundFunctionsHaveNames(), false, 'bound functions do not have names, because .bind does not exist');
	} else if (hasNames()) {
		t.equal(hasNames.boundFunctionsHaveNames(), fn.bind().name !== '', 'bound functions have names');
	} else {
		t.equal(hasNames.boundFunctionsHaveNames(), false, 'bound functions do not have names, because none do');
	}

	t.end();
});

Version data entries

52 entries across 52 versions & 2 rubygems

Version Path
immosquare-cleaner-0.1.42 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.41 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.40 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.39 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.38 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.32 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.31 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.30 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.29 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.28 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.27 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.26 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.25 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.24 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.23 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.22 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.21 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.20 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.19 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.18 node_modules/functions-have-names/test/index.js