gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
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
66
67
68
69
70
71
72
73
describe('fn.name', function () {
  'use strict';
 
  var assume = require('assume')
    , name = require('./');
 
  it('is exported as a function', function () {
    assume(name).is.a('function');
  });
 
  it('can extract the name from a function declaration', function () {
    function foobar() {}
 
    assume(name(foobar)).equals('foobar');
  });
 
  it('can extract the name from a function expression', function () {
    var a = function bar() {};
 
    assume(name(a)).equals('bar');
  });
 
  it('can be overriden using displayName', function () {
    var a = function bar() {};
    a.displayName = 'bro';
 
    assume(name(a)).equals('bro');
  });
 
  it('works with constructed instances', function () {
    function Bar(){}
 
    var foo = new Bar();
 
    assume(name(foo)).equals('Bar');
  });
 
  it('works with anonymous', function () {
    assume(name(function () {})).equals('anonymous');
  });
 
  it('returns the className if we were not given a function', function () {
    assume(name('string')).equals('String');
  });
 
  //
  // Test if the env supports async functions, if so add a test to ensure
  // that we will work with async functions.
  //
  var asyncfn = true;
  try { new Function('return async function hello() {}')(); }
  catch (e) { asyncfn = false; }
 
  if (asyncfn) it('detects the name of async functions', function () {
    var fn = new Function('return async function hello() {}')();
 
    assume(name(fn)).equals('hello');
  });
 
  //
  // Test that this env supports generators, if so add a test to ensure that
  // we will work with generators.
  //
  var generators = true;
  try { new Function('return function* generator() {}')(); }
  catch (e) { generator = false; }
 
  if (generators) it('detecs the name of a generator', function () {
    var fn = new Function('return function* hello() {}')();
 
    assume(name(fn)).equals('hello');
  });
});