This repository was archived by the owner on Nov 20, 2020. It is now read-only.
forked from lunarmodules/busted
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathinsulate-expose_spec.lua
150 lines (128 loc) · 4.37 KB
/
insulate-expose_spec.lua
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
assert.is_nil(package.loaded.pl)
assert.is_nil(package.loaded['pl.file'])
describe('Tests insulation', function()
insulate('environment inside insulate', function()
pl = require 'pl'
_G.insuated_global = true
it('updates insuated global table _G', function()
assert.is_not_nil(insuated_global)
assert.is_not_nil(_G.insuated_global)
end)
it('updates package.loaded', function()
assert.is_not_nil(pl)
assert.is_not_nil(Date)
assert.is_not_nil(package.loaded.pl)
assert.is_not_nil(package.loaded['pl.Date'])
end)
end)
describe('environment after insulate', function()
it('restores insuated global table _G', function()
assert.is_nil(insuated_global)
assert.is_nil(_G.insuated_global)
end)
it('restores package.loaded', function()
assert.is_nil(pl)
assert.is_nil(Date)
assert.is_nil(package.loaded.pl)
assert.is_nil(package.loaded['pl.Date'])
end)
end)
end)
insulate('', function()
describe('Tests expose', function()
insulate('inside insulate block', function()
expose('tests environment inside expose block', function()
pl = require 'pl'
exposed_global = true
_G.global = true
it('creates exposed global', function()
assert.is_not_nil(exposed_global)
assert.is_nil(_G.exposed_global)
end)
it('updates global table _G', function()
assert.is_not_nil(global)
assert.is_not_nil(_G.global)
end)
it('updates package.loaded', function()
assert.is_not_nil(pl)
assert.is_not_nil(Date)
assert.is_not_nil(package.loaded.pl)
assert.is_not_nil(package.loaded['pl.Date'])
end)
end)
end)
describe('neutralizes insulation', function()
it('creates exposed global in outer block', function()
assert.is_not_nil(exposed_global)
assert.is_nil(_G.exposed_global)
end)
it('does not restore global table _G', function()
assert.is_not_nil(global)
assert.is_not_nil(_G.global)
end)
it('does not restore package.loaded', function()
assert.is_not_nil(pl)
assert.is_not_nil(Date)
assert.is_not_nil(package.loaded.pl)
assert.is_not_nil(package.loaded['pl.Date'])
end)
end)
end)
it('Tests exposed globals does not exist in outer most block', function()
assert.is_nil(pl)
assert.is_nil(exposed_global)
assert.is_nil(_G.exposed_global)
end)
it('Tests global table _G persists without insulate', function()
assert.is_not_nil(global)
assert.is_not_nil(_G.global)
end)
it('Tests package.loaded persists without insulate', function()
assert.is_not_nil(Date)
assert.is_not_nil(package.loaded.pl)
assert.is_not_nil(package.loaded['pl.Date'])
end)
end)
describe('Tests after insulating an expose block', function()
it('restores global table _G', function()
assert.is_nil(global)
assert.is_nil(_G.global)
end)
it('restores package.loaded', function()
assert.is_nil(pl)
assert.is_nil(Date)
assert.is_nil(package.loaded.pl)
assert.is_nil(package.loaded['pl.Date'])
end)
end)
describe('Tests insulate/expose', function()
local path = require 'pl.path'
local utils = require 'pl.utils'
local busted_cmd = path.is_windows and 'lua bin/busted' or 'bin/busted'
local executeBusted = function(args)
local success, exitcode, out, err = utils.executeex(busted_cmd .. ' ' .. args)
if exitcode > 255 then
exitcode = math.floor(exitcode/256), exitcode - math.floor(exitcode/256)*256
end
return not not success, exitcode, out, err
end
describe('file insulation', function()
it('works between files', function()
local success, exitcode = executeBusted('spec/insulate_file1.lua spec/insulate_file2.lua')
assert.is_true(success)
assert.is_equal(0, exitcode)
end)
it('works between files independent of order', function()
local success, exitcode = executeBusted('spec/insulate_file2.lua spec/insulate_file1.lua')
assert.is_true(success)
assert.is_equal(0, exitcode)
end)
end)
describe('expose from file context', function()
it('works between files', function()
local success, exitcode = executeBusted('spec/expose_file1.lua spec/expose_file2.lua')
assert.is_true(success)
assert.is_equal(0, exitcode)
end)
end)
end)