UNPKG

5.63 kBJavaScriptView Raw
1
2function moduleTests(ui) {
3 var
4 module = ui.module,
5 element = ui.element,
6 singleton = ui.singleton,
7 name = $.fn[module].settings.name,
8
9 testValue = 'Test',
10 fixtures = jasmine.getFixtures(),
11
12 originalSettings,
13 $modules,
14 $oneModule,
15 $module,
16 $clone
17 ;
18
19 // set fixture path
20 fixtures.fixturesPath = 'base/test/fixtures/';
21
22 // disable debug
23 $.fn[module].settings.debug = false;
24 $.fn[module].settings.performance = false;
25 $.fn[module].settings.verbose = false;
26
27
28 beforeEach(function() {
29 // load fixtures
30 fixtures.load(module + '.html');
31 // save settings
32 originalSettings = $.fn[module].settings;
33
34 // module available in scope
35 $module = $(element);
36
37 // one module available in fixture
38 if($module.size() == 1) {
39 $oneModule = $module;
40 $clone = $module.clone().appendTo( $(sandbox()) );
41 $modules = $clone.add($module);
42 }
43 // multiple modules available in fixture
44 else {
45 $modules = $(element);
46 $clone = $module.eq(1);
47 $oneModule = $modules.first();
48 }
49
50 });
51
52 afterEach(function() {
53 // restore settings
54 $.fn[module].settings = originalSettings;
55 // remove element
56 $(element).remove();
57 });
58
59 /*******************************
60 Module
61 *******************************/
62
63 /*-------------------
64 Instantiation
65 --------------------*/
66 describe('Module', function() {
67
68 it("allows chaining when no settings returned", function() {
69 var $chain = $modules[module]();
70 expect($chain).toExist();
71 expect($chain.size()).toBe($modules.size());
72 });
73
74 it("returns a string when one setting returned", function() {
75 var result = $oneModule[module]('setting', 'name');
76 expect(typeof result).toBe('string');
77 });
78
79 it("returns an array when multiple settings returned", function() {
80 var result = $modules[module]('setting', 'name');
81 expect( $.isArray(result) ).toBeTruthy();
82 });
83
84 it("has an instance in metadata after init", function() {
85 $oneModule[module]();
86 expect($module).toHaveData('module-' + module);
87 });
88
89 });
90
91 /*-------------------
92 Settings
93 --------------------*/
94
95 describe('Settings', function() {
96
97 it("clears settings on re-init", function() {
98 $oneModule[module]({
99 name: testValue
100 });
101
102 var retrievedValue = $oneModule[module]('setting', 'name');
103 expect(retrievedValue).toBe(testValue);
104
105 // reinit
106 $oneModule[module]();
107 retrievedValue = $oneModule[module]('setting', 'name');
108 expect(retrievedValue).toBe(name);
109 });
110
111 it("allows default settings to be changed", function() {
112 $.fn[module].settings.name = testValue;
113 $oneModule[module]();
114
115 var retrievedValue = $oneModule[module]('setting', 'name');
116 $.fn[module].settings.name = name;
117
118 expect(retrievedValue).toBe(testValue);
119 });
120
121 it("allows settings to be changed during init", function() {
122 $oneModule[module]({
123 name: testValue
124 });
125
126 var retrievedValue = $oneModule[module]('setting', 'name');
127
128 expect(retrievedValue).toBe(testValue);
129 });
130
131 it("allows settings to be changed during runtime", function() {
132 $oneModule[module]();
133
134 var retrievedValue = $oneModule[module]('setting', 'name');
135
136 expect(retrievedValue).toBe(name);
137 });
138
139 });
140
141 /*-------------------
142 Groups
143 --------------------*/
144
145 if(!singleton) {
146
147 describe('Group Contamination', function() {
148
149 it("creates settings for all instances", function() {
150 $modules[module]('setting', 'name', testValue);
151
152 var retrievedValue = $oneModule[module]('setting', 'name');
153 var clonedSetting = $clone[module]('setting', 'name');
154
155 expect(retrievedValue).toBe(testValue);
156 expect(clonedSetting).toBe(testValue);
157
158 $oneModule[module]({
159 'name': testValue
160 });
161
162 expect(retrievedValue).toBe(testValue);
163 expect(clonedSetting).toBe(testValue);
164
165 });
166
167 it("does not change other elements settings when changing one element", function() {
168 $modules[module]();
169 $oneModule[module]('setting', 'name', testValue);
170
171 var retrievedValue = $oneModule[module]('setting', 'name');
172 var clonedSetting = $clone[module]('setting', 'name');
173
174 expect(retrievedValue).toBe(testValue);
175 expect(clonedSetting).toBe(name);
176
177 });
178
179 it("does not change other elements when re-initialized", function() {
180 $modules[module]();
181
182 $oneModule[module]({
183 'name': testValue
184 });
185
186 var retrievedValue = $oneModule[module]('setting', 'name');
187 var clonedSetting = $clone[module]('setting', 'name');
188
189 expect(retrievedValue).toBe(testValue);
190 expect(clonedSetting).toBe(name);
191
192 });
193
194 });
195
196 }
197
198 /*-------------------
199 Destroy
200 --------------------*/
201 describe('Destroy', function() {
202
203 it("removes all events from page", function() {
204 $module[module]('destroy');
205 if($.events().length > 0) {
206 dump($.events());
207 }
208 expect($.events().length).toBe(0);
209 });
210
211 it("removes instance metadata", function() {
212 $module[module]('destroy');
213 expect( $module.data('module-'+ module) ).toBe(undefined);
214 });
215
216 });
217
218}
\No newline at end of file