modularity-rails 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +4 -6
- data/Guardfile +3 -4
- data/demo/.gitignore +15 -0
- data/demo/Gemfile +23 -0
- data/demo/README.rdoc +261 -0
- data/demo/Rakefile +7 -0
- data/demo/app/assets/images/rails.png +0 -0
- data/demo/app/assets/javascripts/application.coffee +2 -0
- data/demo/app/assets/stylesheets/application.css +13 -0
- data/demo/app/controllers/application_controller.rb +3 -0
- data/demo/app/helpers/application_helper.rb +2 -0
- data/demo/app/mailers/.gitkeep +0 -0
- data/demo/app/models/.gitkeep +0 -0
- data/demo/app/views/layouts/application.html.erb +14 -0
- data/demo/config.ru +4 -0
- data/demo/config/application.rb +59 -0
- data/demo/config/boot.rb +6 -0
- data/demo/config/database.yml +25 -0
- data/demo/config/environment.rb +5 -0
- data/demo/config/environments/development.rb +37 -0
- data/demo/config/environments/production.rb +67 -0
- data/demo/config/environments/test.rb +37 -0
- data/demo/config/initializers/backtrace_silencers.rb +7 -0
- data/demo/config/initializers/inflections.rb +15 -0
- data/demo/config/initializers/konacha.rb +5 -0
- data/demo/config/initializers/mime_types.rb +5 -0
- data/demo/config/initializers/secret_token.rb +7 -0
- data/demo/config/initializers/session_store.rb +8 -0
- data/demo/config/initializers/wrap_parameters.rb +14 -0
- data/demo/config/locales/en.yml +5 -0
- data/demo/config/routes.rb +58 -0
- data/demo/db/seeds.rb +7 -0
- data/demo/lib/assets/.gitkeep +0 -0
- data/demo/lib/tasks/.gitkeep +0 -0
- data/demo/log/.gitkeep +0 -0
- data/demo/public/404.html +26 -0
- data/demo/public/422.html +26 -0
- data/demo/public/500.html +25 -0
- data/demo/public/favicon.ico +0 -0
- data/demo/public/index.html +241 -0
- data/demo/public/robots.txt +5 -0
- data/demo/script/rails +6 -0
- data/demo/spec/javascripts/konacha_config.coffee +1 -0
- data/demo/spec/javascripts/mixins/closable_spec.coffee +98 -0
- data/{spec → demo/spec}/javascripts/modularity_spec.coffee +118 -109
- data/demo/spec/javascripts/modules/autogrow_textarea_spec.coffee +43 -0
- data/demo/spec/javascripts/modules/button_spec.coffee +39 -0
- data/demo/spec/javascripts/modules/counter_button_spec.coffee +57 -0
- data/demo/spec/javascripts/sinon-chai.js +116 -0
- data/demo/spec/javascripts/sinon.js +3555 -0
- data/demo/spec/javascripts/spec_helper.coffee +11 -0
- data/demo/spec/javascripts/templates/autogrow_textarea.jst.ejs +2 -0
- data/{spec/javascripts/templates/button.html → demo/spec/javascripts/templates/button.jst.ejs} +0 -0
- data/{spec/javascripts/templates/closable.html → demo/spec/javascripts/templates/closable.jst.ejs} +0 -0
- data/{spec/javascripts/templates/test.html → demo/spec/javascripts/templates/modularity.jst.ejs} +0 -0
- data/{spec → demo/spec}/javascripts/tools/ajax_loader_spec.coffee +21 -27
- data/{spec → demo/spec}/javascripts/tools/cache_spec.coffee +13 -18
- data/demo/vendor/assets/javascripts/.gitkeep +0 -0
- data/demo/vendor/assets/stylesheets/.gitkeep +0 -0
- data/demo/vendor/plugins/.gitkeep +0 -0
- data/lib/modularity-rails/version.rb +1 -1
- data/run_tests +6 -0
- data/vendor/assets/javascripts/modularity.js.coffee +2 -1
- data/vendor/assets/javascripts/modules/autogrow_textarea.coffee +31 -0
- data/vendor/assets/javascripts/modules/counter_button.coffee +2 -0
- metadata +73 -26
- data/spec/javascripts/external/coffee-script.js +0 -8
- data/spec/javascripts/external/jasmine-jquery.js +0 -288
- data/spec/javascripts/external/jquery.min.js +0 -4
- data/spec/javascripts/mixins/closable_spec.coffee +0 -101
- data/spec/javascripts/modules/button_spec.coffee +0 -45
- data/spec/javascripts/modules/counter_button_spec.coffee +0 -64
- data/spec/javascripts/spec_helper.coffee +0 -22
data/demo/script/rails
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1 @@
|
|
1
|
+
Konacha.mochaOptions.ignoreLeaks = true
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#= require spec_helper
|
2
|
+
#= require mixins/closable
|
3
|
+
|
4
|
+
# A standard closable module.
|
5
|
+
class window.ClosableModule1 extends modularity.Module
|
6
|
+
@mixin modularity.closable
|
7
|
+
|
8
|
+
|
9
|
+
describe 'Closable', ->
|
10
|
+
|
11
|
+
spy_alert = null
|
12
|
+
beforeEach ->
|
13
|
+
template 'closable'
|
14
|
+
spy_alert = sinon.stub window, 'alert'
|
15
|
+
|
16
|
+
afterEach ->
|
17
|
+
spy_alert.restore()
|
18
|
+
|
19
|
+
describe 'constructor', ->
|
20
|
+
it 'shows an alert if there is no close button', ->
|
21
|
+
new ClosableModule1('#konacha #closable3')
|
22
|
+
window.alert.should.have.been.called
|
23
|
+
window.alert.args[0][0].should.match(/close button not found/i)
|
24
|
+
|
25
|
+
it 'shows no alert if there is a close button', ->
|
26
|
+
new ClosableModule1('#konacha #closable1')
|
27
|
+
window.alert.should.not.have.been.called
|
28
|
+
|
29
|
+
it 'finds the close button div automatically', ->
|
30
|
+
new ClosableModule1('#konacha #closable1')
|
31
|
+
$('#konacha #closable1 .CloseButton').click()
|
32
|
+
$('#konacha #closable1').should.have.length 0
|
33
|
+
|
34
|
+
|
35
|
+
describe 'when clicking the close button', ->
|
36
|
+
|
37
|
+
it "calls the closable_closing hook on the object if it exists", ->
|
38
|
+
|
39
|
+
# A closable module with the 'closing' hook.
|
40
|
+
class ClosableModule extends modularity.Module
|
41
|
+
@mixin modularity.closable
|
42
|
+
|
43
|
+
constructor: ->
|
44
|
+
super
|
45
|
+
@closing_hook_got_called = no
|
46
|
+
|
47
|
+
closable_closing: => @closing_hook_got_called = yes
|
48
|
+
|
49
|
+
module = new ClosableModule('#konacha #closable1')
|
50
|
+
$('#konacha #closable1 .CloseButton').click()
|
51
|
+
module.closing_hook_got_called.should.be.true
|
52
|
+
|
53
|
+
|
54
|
+
it "calls the closable_closed hook on the object if it exists", ->
|
55
|
+
|
56
|
+
# A closable module with the 'closed' hook.
|
57
|
+
class ClosableModule extends modularity.Module
|
58
|
+
@mixin modularity.closable
|
59
|
+
|
60
|
+
constructor: ->
|
61
|
+
super
|
62
|
+
@closed_hook_got_called = no
|
63
|
+
|
64
|
+
closable_closed: => @closed_hook_got_called = yes
|
65
|
+
|
66
|
+
module = new ClosableModule('#konacha #closable1')
|
67
|
+
$('#konacha #closable1 .CloseButton').click()
|
68
|
+
module.closed_hook_got_called.should.be.true
|
69
|
+
|
70
|
+
|
71
|
+
it "aborts the close operation if the closable_closing method returns false", ->
|
72
|
+
|
73
|
+
class ClosableModuleWithHookThatReturnsFalse extends modularity.Module
|
74
|
+
@mixin modularity.closable
|
75
|
+
closable_closing: -> false
|
76
|
+
|
77
|
+
module = new ClosableModuleWithHookThatReturnsFalse('#konacha #closable1')
|
78
|
+
module.bind_event('closed', (spy = sinon.spy()))
|
79
|
+
|
80
|
+
$('#konacha #closable1 .CloseButton').click()
|
81
|
+
|
82
|
+
spy.should.not.have.been.called
|
83
|
+
|
84
|
+
|
85
|
+
it 'removes the container', ->
|
86
|
+
new ClosableModule1('#konacha #closable1')
|
87
|
+
$('#konacha #closable1 .CloseButton').click()
|
88
|
+
|
89
|
+
$('#konacha #closable1').should.have.length 0
|
90
|
+
|
91
|
+
|
92
|
+
it "fires the 'closed' event", ->
|
93
|
+
closable_module = new ClosableModule1('#konacha #closable1')
|
94
|
+
closable_module.bind_event('closed', (spy = sinon.spy()))
|
95
|
+
|
96
|
+
$('#konacha #closable1 .CloseButton').click()
|
97
|
+
|
98
|
+
spy.should.have.been.calledOnce
|
@@ -1,267 +1,270 @@
|
|
1
1
|
#= require spec_helper
|
2
2
|
|
3
|
-
|
3
|
+
class window.TestModule extends modularity.Module
|
4
4
|
|
5
|
-
it 'loading libraries', ->
|
6
|
-
load_modularity()
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
class window.TestModule extends modularity.Module
|
11
|
-
constructor: (container) ->
|
12
|
-
super
|
6
|
+
describe 'modularity', ->
|
13
7
|
|
8
|
+
alert_stub = null
|
9
|
+
beforeEach ->
|
10
|
+
template 'modularity'
|
11
|
+
alert_stub = sinon.stub window, 'alert'
|
14
12
|
|
15
|
-
|
13
|
+
afterEach ->
|
14
|
+
alert_stub.restore()
|
16
15
|
|
17
|
-
template 'test.html'
|
18
16
|
|
19
17
|
describe 'constructor', ->
|
20
18
|
|
21
|
-
beforeEach ->
|
22
|
-
spyOn window, 'alert'
|
23
|
-
|
24
19
|
it "is defined on the 'window' object", ->
|
25
|
-
|
20
|
+
modularity.Module.should.not.be.undefined
|
26
21
|
|
27
22
|
it 'shows an error if no container is given', ->
|
28
23
|
new TestModule()
|
29
|
-
|
24
|
+
window.alert.should.have.been.called
|
30
25
|
|
31
26
|
it 'tries to load the DOM if the given container is a string', ->
|
32
|
-
new TestModule('#
|
33
|
-
|
27
|
+
new TestModule('#konacha #module_container')
|
28
|
+
window.alert.should.not.have.been.called
|
34
29
|
|
35
30
|
it 'shows an error if the container is not a jQuery object', ->
|
36
31
|
new TestModule({})
|
37
|
-
|
32
|
+
window.alert.should.have.been.called
|
38
33
|
|
39
34
|
it 'shows an error if the container is an empty jQuery object', ->
|
40
|
-
new TestModule($('#
|
41
|
-
|
35
|
+
new TestModule($('#konacha .zonk'))
|
36
|
+
window.alert.should.have.been.called
|
42
37
|
|
43
38
|
it 'shows an error if the container has more than one elements', ->
|
44
|
-
new TestModule($('#
|
45
|
-
|
39
|
+
new TestModule($('#konacha .double'))
|
40
|
+
window.alert.should.have.been.called
|
46
41
|
|
47
42
|
it "allows to provide 'testing' in tests", ->
|
48
43
|
new TestModule('testing')
|
49
|
-
|
44
|
+
window.alert.should.not.have.been.called
|
50
45
|
|
51
46
|
|
52
47
|
describe 'assert', ->
|
53
48
|
|
54
|
-
beforeEach ->
|
55
|
-
spyOn window, 'alert'
|
56
|
-
|
57
49
|
it 'shows an alert with the given message if the given condition is false', ->
|
58
50
|
modularity.assert false, 'Message'
|
59
|
-
|
51
|
+
window.alert.should.have.been.calledWith "Message"
|
60
52
|
|
61
53
|
it 'fails when the condition is null', ->
|
62
54
|
modularity.assert null, 'Message'
|
63
|
-
|
55
|
+
window.alert.should.have.been.calledWith "Message"
|
64
56
|
|
65
57
|
it 'fails when the condition is undefined', ->
|
66
58
|
modularity.assert undefined, 'Message'
|
67
|
-
|
59
|
+
window.alert.should.have.been.calledWith "Message"
|
68
60
|
|
69
61
|
it 'fails when the condition is an empty array', ->
|
70
62
|
modularity.assert [], 'Message'
|
71
|
-
|
63
|
+
window.alert.should.have.been.calledWith "Message"
|
72
64
|
|
73
65
|
it 'fails when the condition is an empty string', ->
|
74
66
|
modularity.assert '', 'Message'
|
75
|
-
|
67
|
+
window.alert.should.have.been.calledWith "Message"
|
76
68
|
|
77
69
|
it 'passes when the condition is a string', ->
|
78
70
|
modularity.assert '123', 'Message'
|
79
|
-
|
71
|
+
window.alert.should.not.have.been.called
|
80
72
|
|
81
73
|
it "returns false if the condition doesn't pass", ->
|
82
|
-
|
74
|
+
modularity.assert(false).should.be.false
|
83
75
|
|
84
76
|
it "returns true if the condition passes", ->
|
85
|
-
|
77
|
+
modularity.assert('123').should.be.true
|
86
78
|
|
87
79
|
|
88
80
|
describe 'jQuery Integration', ->
|
89
81
|
|
90
|
-
beforeEach ->
|
91
|
-
spyOn window, 'alert'
|
92
|
-
|
93
82
|
it 'works', ->
|
94
|
-
$('#
|
95
|
-
|
83
|
+
$('#konacha #module_container').module(TestModule)
|
84
|
+
window.alert.should.not.have.been.called
|
96
85
|
|
97
86
|
it 'returns the created instance', ->
|
98
|
-
result = $('#
|
99
|
-
|
100
|
-
|
87
|
+
result = $('#konacha #module_container').module(modularity.Module)
|
88
|
+
result.should.exist
|
89
|
+
result.should.be.instanceOf modularity.Module
|
101
90
|
|
102
91
|
it 'returns an error if the given parameter is not a class', ->
|
103
|
-
$('#
|
104
|
-
|
92
|
+
$('#konacha').module()
|
93
|
+
window.alert.should.have.been.called
|
105
94
|
|
106
95
|
it 'returns an error if the jQuery object is empty.', ->
|
107
|
-
$('#
|
108
|
-
|
96
|
+
$('#konacha #zonk').module(modularity.Module)
|
97
|
+
window.alert.should.have.been.called
|
109
98
|
|
110
99
|
|
111
100
|
describe 'event handling', ->
|
112
101
|
|
113
|
-
# Variables that should be accessible in both the beforeEach block and the tests.
|
114
102
|
module = null
|
115
103
|
mockContainer = null
|
116
104
|
|
117
105
|
beforeEach ->
|
118
|
-
mockContainer = $('#
|
106
|
+
mockContainer = $('#konacha #module_container')
|
119
107
|
module = new TestModule(mockContainer)
|
120
|
-
spyOn window, 'alert'
|
121
|
-
|
122
108
|
|
123
109
|
describe 'bind_event', ->
|
124
110
|
|
125
111
|
beforeEach ->
|
126
|
-
|
112
|
+
sinon.spy mockContainer, 'bind'
|
127
113
|
|
128
114
|
it 'binds the given custom jQuery event type and the given callback to the container', ->
|
129
115
|
myCallback = ->
|
130
116
|
module.bind_event 'myEventType', myCallback
|
131
|
-
|
132
|
-
|
117
|
+
mockContainer.bind.should.have.been.called
|
118
|
+
mockContainer.bind.args[0][0].should.equal 'myEventType'
|
119
|
+
mockContainer.bind.args[0][1].should.equal myCallback
|
120
|
+
window.alert.should.not.have.been.called
|
133
121
|
|
134
122
|
it "throws an error if no parameters are given", ->
|
135
123
|
module.bind_event()
|
136
|
-
|
137
|
-
|
124
|
+
window.alert.should.have.been.called
|
125
|
+
mockContainer.bind.should.not.have.been.called
|
138
126
|
|
139
127
|
it "throws an error if the given event type doesn't exist", ->
|
140
128
|
module.bind_event undefined, ->
|
141
|
-
|
142
|
-
|
129
|
+
window.alert.should.have.been.called
|
130
|
+
mockContainer.bind.should.not.have.been.called
|
143
131
|
|
144
132
|
it 'throws an error if the given event type is not a string', ->
|
145
133
|
module.bind_event {}, ->
|
146
|
-
|
147
|
-
|
134
|
+
window.alert.should.have.been.called
|
135
|
+
mockContainer.bind.should.not.have.been.called
|
148
136
|
|
149
137
|
it "throws an error if the given callback doesn't exist", ->
|
150
138
|
module.bind_event '123'
|
151
|
-
|
152
|
-
|
139
|
+
window.alert.should.have.been.called
|
140
|
+
mockContainer.bind.should.not.have.been.called
|
153
141
|
|
154
142
|
it 'throws an error if the given callback is not a function', ->
|
155
143
|
module.bind_event '123', {}
|
156
|
-
|
157
|
-
|
144
|
+
window.alert.should.have.been.called
|
145
|
+
mockContainer.bind.should.not.have.been.called
|
158
146
|
|
159
147
|
|
160
148
|
describe 'fire_event', ->
|
161
149
|
|
162
150
|
beforeEach ->
|
163
|
-
|
151
|
+
sinon.spy mockContainer, 'trigger'
|
164
152
|
|
165
153
|
it 'triggers a custom jQuery event with the given event type on the container object', ->
|
166
154
|
module.fire_event 'event type', 'event data'
|
167
|
-
|
155
|
+
mockContainer.trigger.should.have.been.called
|
156
|
+
mockContainer.trigger.args[0][0].should.equal 'event type'
|
157
|
+
mockContainer.trigger.args[0][1].should.equal 'event data'
|
168
158
|
|
169
159
|
describe 'when no payload is given', ->
|
170
160
|
it 'provides an empty object as payload', ->
|
171
161
|
module.fire_event 'event type'
|
172
|
-
|
173
|
-
|
162
|
+
mockContainer.trigger.should.have.been.called
|
163
|
+
mockContainer.trigger.args[0][1].should.eql({})
|
174
164
|
|
175
165
|
it "doesn't change the original payload variable", ->
|
176
166
|
data = undefined
|
177
167
|
module.fire_event 'event type', data
|
178
|
-
expect(data).
|
168
|
+
expect(data).to.be.undefined
|
179
169
|
|
180
170
|
it 'provides 0 as payload if 0 is given', ->
|
181
171
|
module.fire_event 'event type', 0
|
182
|
-
|
183
|
-
|
172
|
+
mockContainer.trigger.should.have.been.called
|
173
|
+
mockContainer.trigger.args[0][1].should.equal(0)
|
184
174
|
|
185
175
|
it 'throws an error if the given event type is not a string', ->
|
186
176
|
module.fire_event {}
|
187
|
-
|
188
|
-
|
177
|
+
mockContainer.trigger.should.not.have.been.called
|
178
|
+
window.alert.should.have.been.called
|
189
179
|
|
190
180
|
|
191
181
|
describe 'global events', ->
|
192
182
|
|
193
|
-
# Variables that should be accessible in both the beforeEach block and the tests.
|
194
183
|
mockGlobalContainer = null
|
195
|
-
|
196
184
|
beforeEach ->
|
197
185
|
mockGlobalContainer = $('#test #module_container')
|
198
|
-
|
186
|
+
sinon.stub(modularity, 'global_event_container').returns(mockGlobalContainer)
|
187
|
+
|
188
|
+
afterEach ->
|
189
|
+
modularity.global_event_container.restore()
|
190
|
+
|
199
191
|
|
200
192
|
describe 'bind_global_event', ->
|
201
193
|
|
202
194
|
beforeEach ->
|
203
|
-
|
195
|
+
sinon.spy mockGlobalContainer, 'bind'
|
196
|
+
|
197
|
+
afterEach ->
|
198
|
+
mockGlobalContainer.bind.restore()
|
204
199
|
|
205
200
|
it 'binds the given event type and callback method to the global event container', ->
|
206
201
|
callback = ->
|
207
202
|
modularity.bind_global_event '123', callback
|
208
|
-
|
203
|
+
mockGlobalContainer.bind.should.have.been.called
|
204
|
+
mockGlobalContainer.bind.args[0][0].should.equal '123'
|
205
|
+
mockGlobalContainer.bind.args[0][1].should.equal callback
|
209
206
|
|
210
207
|
it "throws an error if no parameters are given", ->
|
211
208
|
modularity.bind_global_event()
|
212
|
-
|
213
|
-
|
209
|
+
window.alert.should.have.been.called
|
210
|
+
mockGlobalContainer.bind.should.not.have.been.called
|
214
211
|
|
215
212
|
it "throws an error if the given event type doesn't exist", ->
|
216
213
|
modularity.bind_global_event undefined, ->
|
217
|
-
|
218
|
-
|
214
|
+
window.alert.should.have.been.called
|
215
|
+
mockGlobalContainer.bind.should.not.have.been.called
|
219
216
|
|
220
217
|
it 'throws an error if the given event type is not a string', ->
|
221
218
|
modularity.bind_global_event {}, ->
|
222
|
-
|
223
|
-
|
219
|
+
window.alert.should.have.been.called
|
220
|
+
mockGlobalContainer.bind.should.not.have.been.called
|
224
221
|
|
225
222
|
it "throws an error if the given callback doesn't exist", ->
|
226
223
|
modularity.bind_global_event '123'
|
227
|
-
|
228
|
-
|
224
|
+
window.alert.should.have.been.called
|
225
|
+
mockGlobalContainer.bind.should.not.have.been.called
|
229
226
|
|
230
227
|
it 'throws an error if the given callback is not a function', ->
|
231
228
|
modularity.bind_global_event '123', {}
|
232
|
-
|
233
|
-
|
229
|
+
window.alert.should.have.been.called
|
230
|
+
mockGlobalContainer.bind.should.not.have.been.called
|
234
231
|
|
235
232
|
|
236
233
|
describe 'fire_global_event', ->
|
237
234
|
|
238
235
|
beforeEach ->
|
239
|
-
|
236
|
+
sinon.spy mockGlobalContainer, 'trigger'
|
237
|
+
|
238
|
+
afterEach ->
|
239
|
+
mockGlobalContainer.trigger.restore()
|
240
|
+
|
240
241
|
|
241
242
|
it 'triggers a custom jQuery event with the given event type on the global event container object', ->
|
242
243
|
modularity.fire_global_event 'event type', 'event data'
|
243
|
-
|
244
|
+
mockGlobalContainer.trigger.should.have.been.called
|
245
|
+
mockGlobalContainer.trigger.args[0][0].should.equal 'event type'
|
246
|
+
mockGlobalContainer.trigger.args[0][1].should.equal 'event data'
|
244
247
|
|
245
248
|
describe 'when no payload is given', ->
|
246
249
|
it 'provides an empty object as payload', ->
|
247
250
|
modularity.fire_global_event 'event type'
|
248
|
-
|
249
|
-
|
251
|
+
mockGlobalContainer.trigger.should.have.been.called
|
252
|
+
mockGlobalContainer.trigger.args[0][1].should.eql({})
|
250
253
|
|
251
254
|
it "doesn't change the original payload variable", ->
|
252
255
|
data = undefined
|
253
256
|
modularity.fire_global_event 'event type', data
|
254
|
-
expect(data).
|
257
|
+
expect(data).to.equal.undefined
|
255
258
|
|
256
259
|
it 'provides 0 as payload if 0 is given', ->
|
257
260
|
modularity.fire_global_event 'event type', 0
|
258
|
-
|
259
|
-
|
261
|
+
mockGlobalContainer.trigger.should.have.been.called
|
262
|
+
mockGlobalContainer.trigger.args[0][1].should.equal(0)
|
260
263
|
|
261
264
|
it 'throws an error if the given event type is not a string', ->
|
262
265
|
modularity.fire_global_event {}
|
263
|
-
|
264
|
-
|
266
|
+
mockGlobalContainer.trigger.should.not.have.been.called
|
267
|
+
window.alert.should.have.been.called
|
265
268
|
|
266
269
|
|
267
270
|
describe 'mixins', ->
|
@@ -277,35 +280,41 @@ describe 'modularity', ->
|
|
277
280
|
@mixin myMixin
|
278
281
|
|
279
282
|
|
280
|
-
|
281
283
|
it 'adds all methods from the mixin object to the class prototype', ->
|
282
284
|
instance = new Test('testing')
|
283
|
-
|
285
|
+
instance.method1.should.be.a("function")
|
284
286
|
|
285
287
|
|
286
288
|
it 'calls the proper mixin method when calling from the implementing module', ->
|
287
|
-
|
288
|
-
|
289
|
+
sinon.spy myMixin, 'method1'
|
290
|
+
sinon.spy myMixin, 'method2'
|
289
291
|
instance = new Test('testing')
|
290
292
|
instance.method1()
|
291
|
-
|
292
|
-
|
293
|
+
myMixin.method1.should.have.been.called
|
294
|
+
myMixin.method2.should.not.have.been.called
|
295
|
+
myMixin.method1.restore()
|
296
|
+
myMixin.method2.restore()
|
293
297
|
|
294
298
|
it 'calls the mixin with the proper paramaters', ->
|
295
|
-
|
299
|
+
sinon.spy myMixin, 'method1'
|
296
300
|
instance = new Test('testing')
|
297
301
|
instance.method1("arg1", "arg2")
|
298
|
-
|
302
|
+
myMixin.method1.should.have.been.calledWith("arg1", "arg2")
|
303
|
+
myMixin.method1.restore()
|
299
304
|
|
300
305
|
|
301
306
|
it 'calls the constructor of the mixin', ->
|
302
|
-
|
307
|
+
sinon.spy myMixin, 'constructor'
|
303
308
|
instance = new Test('testing')
|
304
|
-
|
309
|
+
myMixin.constructor.should.have.been.called
|
305
310
|
|
306
311
|
|
307
|
-
it 'calls the constructor with the this pointing to the instance', ->
|
312
|
+
it 'calls the constructor with the this object pointing to the instance', ->
|
308
313
|
instance = new Test('testing')
|
309
|
-
|
314
|
+
recordedSelf.should.equal instance
|
315
|
+
|
316
|
+
it "can handle mixins that don't define a constructor"
|
317
|
+
|
318
|
+
it "shows an error message if the given mixin is undefined"
|
310
319
|
|
311
|
-
|
320
|
+
it 'provides arguments to the @mixin method to the mixin constructor'
|