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.62 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.61 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.60 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.59 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.58 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.57 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.56 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.55 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.54 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.53 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.52 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.51 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.50 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.49 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.48 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.47 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.46 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.45 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.44 node_modules/functions-have-names/test/index.js
immosquare-cleaner-0.1.43 node_modules/functions-have-names/test/index.js