| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | '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();});
 |