保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'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();
});