| 1 | "use strict";
|
|---|
| 2 |
|
|---|
| 3 | var jsc = require("jsverify");
|
|---|
| 4 | var refute = require("@sinonjs/referee-sinon").refute;
|
|---|
| 5 |
|
|---|
| 6 | var functionName = require("./function-name");
|
|---|
| 7 |
|
|---|
| 8 | describe("function-name", function () {
|
|---|
| 9 | it("should return empty string if func is falsy", function () {
|
|---|
| 10 | jsc.assertForall("falsy", function (fn) {
|
|---|
| 11 | return functionName(fn) === "";
|
|---|
| 12 | });
|
|---|
| 13 | });
|
|---|
| 14 |
|
|---|
| 15 | it("should use displayName by default", function () {
|
|---|
| 16 | jsc.assertForall("nestring", function (displayName) {
|
|---|
| 17 | var fn = { displayName: displayName };
|
|---|
| 18 |
|
|---|
| 19 | return functionName(fn) === fn.displayName;
|
|---|
| 20 | });
|
|---|
| 21 | });
|
|---|
| 22 |
|
|---|
| 23 | it("should use name if displayName is not available", function () {
|
|---|
| 24 | jsc.assertForall("nestring", function (name) {
|
|---|
| 25 | var fn = { name: name };
|
|---|
| 26 |
|
|---|
| 27 | return functionName(fn) === fn.name;
|
|---|
| 28 | });
|
|---|
| 29 | });
|
|---|
| 30 |
|
|---|
| 31 | it("should fallback to string parsing", function () {
|
|---|
| 32 | jsc.assertForall("nat", function (naturalNumber) {
|
|---|
| 33 | var name = `fn${naturalNumber}`;
|
|---|
| 34 | var fn = {
|
|---|
| 35 | toString: function () {
|
|---|
| 36 | return `\nfunction ${name}`;
|
|---|
| 37 | },
|
|---|
| 38 | };
|
|---|
| 39 |
|
|---|
| 40 | return functionName(fn) === name;
|
|---|
| 41 | });
|
|---|
| 42 | });
|
|---|
| 43 |
|
|---|
| 44 | it("should not fail when a name cannot be found", function () {
|
|---|
| 45 | refute.exception(function () {
|
|---|
| 46 | var fn = {
|
|---|
| 47 | toString: function () {
|
|---|
| 48 | return "\nfunction (";
|
|---|
| 49 | },
|
|---|
| 50 | };
|
|---|
| 51 |
|
|---|
| 52 | functionName(fn);
|
|---|
| 53 | });
|
|---|
| 54 | });
|
|---|
| 55 |
|
|---|
| 56 | it("should not fail when toString is undefined", function () {
|
|---|
| 57 | refute.exception(function () {
|
|---|
| 58 | functionName(Object.create(null));
|
|---|
| 59 | });
|
|---|
| 60 | });
|
|---|
| 61 |
|
|---|
| 62 | it("should not fail when toString throws", function () {
|
|---|
| 63 | refute.exception(function () {
|
|---|
| 64 | var fn;
|
|---|
| 65 | try {
|
|---|
| 66 | // eslint-disable-next-line no-eval
|
|---|
| 67 | fn = eval("(function*() {})")().constructor;
|
|---|
| 68 | } catch (e) {
|
|---|
| 69 | // env doesn't support generators
|
|---|
| 70 | return;
|
|---|
| 71 | }
|
|---|
| 72 |
|
|---|
| 73 | functionName(fn);
|
|---|
| 74 | });
|
|---|
| 75 | });
|
|---|
| 76 | });
|
|---|