Welcome to mirror list, hosted at ThFree Co, Russian Federation.

__set__.test.js « test - github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ef69a0702fec69c350a6ed5f07e40c9110516715 (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
var expect = require("expect.js"),
    __set__ = require("../lib/__set__.js"),
    vm = require("vm"),

    expectTypeError = expectError(TypeError);

function expectError(ErrConstructor) {
    return function expectReferenceError(err) {
        expect(err.constructor.name).to.be(ErrConstructor.name);
    };
}

describe("__set__", function () {
    var moduleFake,
        undo;

    beforeEach(function () {
        moduleFake = {
            module: {
                exports: {}
            },
            myValue: 0,    // copy by value
            myReference: {}       // copy by reference
        };

        vm.runInNewContext(
            //__set__ requires __set__ to be present on module.exports
            "__set__ = module.exports.__set__ = " + __set__.toString() + "; " +
            "getValue = function () { return myValue; }; " +
            "getReference = function () { return myReference; }; ",
            moduleFake
        );
    });
    it("should set the new value when calling with varName, varValue", function () {
        expect(moduleFake.getValue()).to.be(0);
        moduleFake.__set__("myValue", undefined);
        expect(moduleFake.getValue()).to.be(undefined);
        moduleFake.__set__("myValue", null);
        expect(moduleFake.getValue()).to.be(null);
        moduleFake.__set__("myValue", 2);
        expect(moduleFake.getValue()).to.be(2);
        moduleFake.__set__("myValue", "hello");
        expect(moduleFake.getValue()).to.be("hello");
    });
    it("should set the new reference when calling with varName, varValue", function () {
        var newObj = { hello: "hello" },
            newArr = [1, 2, 3],
            regExp = /123/gi;

        function newFn() {
            console.log("hello");
        }

        expect(moduleFake.getReference()).to.eql({});
        moduleFake.__set__("myReference", newObj);
        expect(moduleFake.getReference()).to.be(newObj);
        moduleFake.__set__("myReference", newArr);
        expect(moduleFake.getReference()).to.be(newArr);
        moduleFake.__set__("myReference", newFn);
        expect(moduleFake.getReference()).to.be(newFn);
        moduleFake.__set__("myReference", regExp);
        expect(moduleFake.getReference()).to.be(regExp);
    });
    it("should set the new number and the new obj when calling with an env-obj", function () {
        var newObj = { hello: "hello" };

        expect(moduleFake.getValue()).to.be(0);
        expect(moduleFake.getReference()).to.eql({});
        moduleFake.__set__({
            myValue: 2,
            myReference: newObj
        });
        expect(moduleFake.getValue()).to.be(2);
        expect(moduleFake.getReference()).to.be(newObj);
    });
    it("should return a function that when invoked reverts to the values before set was called", function () {
        undo = moduleFake.__set__("myValue", 4);
        expect(undo).to.be.a("function");
        expect(moduleFake.getValue()).to.be(4);
        undo();
        expect(moduleFake.getValue()).to.be(0);
    });
    it("should be able to revert when calling with an env-obj", function () {
        var newObj = { hello: "hello" };

        expect(moduleFake.getValue()).to.be(0);
        expect(moduleFake.getReference()).to.eql({});

        undo = moduleFake.__set__({
            myValue: 2,
            myReference: newObj
        });

        expect(moduleFake.getValue()).to.be(2);
        expect(moduleFake.getReference()).to.be(newObj);

        undo();

        expect(moduleFake.getValue()).to.be(0);
        expect(moduleFake.getReference()).to.eql({});
    });
    it("should throw a TypeError when passing misfitting params", function () {
        expect(function () {
            moduleFake.__set__();
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__(undefined);
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__(null);
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__(true);
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__(2);
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__("");
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__(function () {});
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__({}, true);   // misfitting number of params
        }).to.throwException(expectTypeError);
        expect(function () {
            moduleFake.__set__("someVar");  // misfitting number of params
        }).to.throwException(expectTypeError);
    });
});