統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / Test / Case / View / Helper / JqueryEngineHelperTest.php @ 0b1b8047

履歴 | 表示 | アノテート | ダウンロード (12.399 KB)

1
<?php
2
/**
3
 * JqueryEngineTestCase
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://cakephp.org CakePHP Project
14
 * @package       Cake.Test.Case.View.Helper
15
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
16
 */
17

    
18
App::uses('HtmlHelper', 'View/Helper');
19
App::uses('JsHelper', 'View/Helper');
20
App::uses('JqueryEngineHelper', 'View/Helper');
21
App::uses('View', 'View');
22

    
23
/**
24
 * Class JqueryEngineHelperTest
25
 *
26
 * @package       Cake.Test.Case.View.Helper
27
 */
28
class JqueryEngineHelperTest extends CakeTestCase {
29

    
30
/**
31
 * setUp
32
 *
33
 * @return void
34
 */
35
        public function setUp() {
36
                parent::setUp();
37
                $controller = null;
38
                $this->View = $this->getMock('View', array('addScript'), array(&$controller));
39
                $this->Jquery = new JqueryEngineHelper($this->View);
40
        }
41

    
42
/**
43
 * tearDown
44
 *
45
 * @return void
46
 */
47
        public function tearDown() {
48
                parent::tearDown();
49
                unset($this->Jquery);
50
        }
51

    
52
/**
53
 * test selector method
54
 *
55
 * @return void
56
 */
57
        public function testSelector() {
58
                $result = $this->Jquery->get('#content');
59
                $this->assertEquals($this->Jquery, $result);
60
                $this->assertEquals($this->Jquery->selection, '$("#content")');
61

    
62
                $result = $this->Jquery->get('document');
63
                $this->assertEquals($this->Jquery, $result);
64
                $this->assertEquals($this->Jquery->selection, '$(document)');
65

    
66
                $result = $this->Jquery->get('window');
67
                $this->assertEquals($this->Jquery, $result);
68
                $this->assertEquals($this->Jquery->selection, '$(window)');
69

    
70
                $result = $this->Jquery->get('ul');
71
                $this->assertEquals($this->Jquery, $result);
72
                $this->assertEquals($this->Jquery->selection, '$("ul")');
73
        }
74

    
75
/**
76
 * test event binding
77
 *
78
 * @return void
79
 */
80
        public function testEvent() {
81
                $this->Jquery->get('#myLink');
82
                $result = $this->Jquery->event('click', 'doClick', array('wrap' => false));
83
                $expected = '$("#myLink").bind("click", doClick);';
84
                $this->assertEquals($expected, $result);
85

    
86
                $result = $this->Jquery->event('click', '$(this).show();', array('stop' => false));
87
                $expected = '$("#myLink").bind("click", function (event) {$(this).show();});';
88
                $this->assertEquals($expected, $result);
89

    
90
                $result = $this->Jquery->event('click', '$(this).hide();');
91
                $expected = '$("#myLink").bind("click", function (event) {$(this).hide();' . "\n" . 'return false;});';
92
                $this->assertEquals($expected, $result);
93
        }
94

    
95
/**
96
 * test dom ready event creation
97
 *
98
 * @return void
99
 */
100
        public function testDomReady() {
101
                $result = $this->Jquery->domReady('foo.name = "bar";');
102
                $expected = '$(document).ready(function () {foo.name = "bar";});';
103
                $this->assertEquals($expected, $result);
104
        }
105

    
106
/**
107
 * test Each method
108
 *
109
 * @return void
110
 */
111
        public function testEach() {
112
                $this->Jquery->get('#foo');
113
                $result = $this->Jquery->each('$(this).hide();');
114
                $expected = '$("#foo").each(function () {$(this).hide();});';
115
                $this->assertEquals($expected, $result);
116
        }
117

    
118
/**
119
 * test Effect generation
120
 *
121
 * @return void
122
 */
123
        public function testEffect() {
124
                $this->Jquery->get('#foo');
125
                $result = $this->Jquery->effect('show');
126
                $expected = '$("#foo").show();';
127
                $this->assertEquals($expected, $result);
128

    
129
                $result = $this->Jquery->effect('hide');
130
                $expected = '$("#foo").hide();';
131
                $this->assertEquals($expected, $result);
132

    
133
                $result = $this->Jquery->effect('hide', array('speed' => 'fast'));
134
                $expected = '$("#foo").hide("fast");';
135
                $this->assertEquals($expected, $result);
136

    
137
                $result = $this->Jquery->effect('fadeIn');
138
                $expected = '$("#foo").fadeIn();';
139
                $this->assertEquals($expected, $result);
140

    
141
                $result = $this->Jquery->effect('fadeOut');
142
                $expected = '$("#foo").fadeOut();';
143
                $this->assertEquals($expected, $result);
144

    
145
                $result = $this->Jquery->effect('slideIn');
146
                $expected = '$("#foo").slideDown();';
147
                $this->assertEquals($expected, $result);
148

    
149
                $result = $this->Jquery->effect('slideOut');
150
                $expected = '$("#foo").slideUp();';
151
                $this->assertEquals($expected, $result);
152

    
153
                $result = $this->Jquery->effect('slideDown');
154
                $expected = '$("#foo").slideDown();';
155
                $this->assertEquals($expected, $result);
156

    
157
                $result = $this->Jquery->effect('slideUp');
158
                $expected = '$("#foo").slideUp();';
159
                $this->assertEquals($expected, $result);
160
        }
161

    
162
/**
163
 * Test Request Generation
164
 *
165
 * @return void
166
 */
167
        public function testRequest() {
168
                $result = $this->Jquery->request(array('controller' => 'posts', 'action' => 'view', 1));
169
                $expected = '$.ajax({url:"\\/posts\\/view\\/1"});';
170
                $this->assertEquals($expected, $result);
171

    
172
                $result = $this->Jquery->request(array('controller' => 'posts', 'action' => 'view', 1), array(
173
                        'update' => '#content'
174
                ));
175
                $expected = '$.ajax({dataType:"html", success:function (data, textStatus) {$("#content").html(data);}, url:"\/posts\/view\/1"});';
176
                $this->assertEquals($expected, $result);
177

    
178
                $result = $this->Jquery->request('/people/edit/1', array(
179
                        'method' => 'post',
180
                        'before' => 'doBefore',
181
                        'complete' => 'doComplete',
182
                        'success' => 'doSuccess',
183
                        'error' => 'handleError',
184
                        'type' => 'json',
185
                        'data' => array('name' => 'jim', 'height' => '185cm'),
186
                        'wrapCallbacks' => false
187
                ));
188
                $expected = '$.ajax({beforeSend:doBefore, complete:doComplete, data:"name=jim&height=185cm", dataType:"json", error:handleError, success:doSuccess, type:"post", url:"\\/people\\/edit\\/1"});';
189
                $this->assertEquals($expected, $result);
190

    
191
                $result = $this->Jquery->request('/people/edit/1', array(
192
                        'update' => '#updated',
193
                        'success' => 'doFoo',
194
                        'method' => 'post',
195
                        'wrapCallbacks' => false
196
                ));
197
                $expected = '$.ajax({dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
198
                $this->assertEquals($expected, $result);
199

    
200
                $result = $this->Jquery->request('/people/edit/1', array(
201
                        'update' => '#updated',
202
                        'success' => 'doFoo',
203
                        'method' => 'post',
204
                        'dataExpression' => true,
205
                        'data' => '$("#someId").serialize()',
206
                        'wrapCallbacks' => false
207
                ));
208
                $expected = '$.ajax({data:$("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
209
                $this->assertEquals($expected, $result);
210

    
211
                $result = $this->Jquery->request('/people/edit/1', array(
212
                        'success' => 'doFoo',
213
                        'before' => 'doBefore',
214
                        'method' => 'post',
215
                        'dataExpression' => true,
216
                        'data' => '$("#someId").serialize()',
217
                ));
218
                $expected = '$.ajax({beforeSend:function (XMLHttpRequest) {doBefore}, data:$("#someId").serialize(), success:function (data, textStatus) {doFoo}, type:"post", url:"\\/people\\/edit\\/1"});';
219
                $this->assertEquals($expected, $result);
220

    
221
                $result = $this->Jquery->request('/people/edit/1', array(
222
                        'success' => 'doFoo',
223
                        'xhr' => 'return jQuery.ajaxSettings.xhr();',
224
                        'async' => true,
225
                        'method' => 'post',
226
                        'dataExpression' => true,
227
                        'data' => '$("#someId").serialize()',
228
                ));
229
                $expected = '$.ajax({async:true, data:$("#someId").serialize(), success:function (data, textStatus) {doFoo}, type:"post", url:"\/people\/edit\/1", xhr:function () {return jQuery.ajaxSettings.xhr();}});';
230
                $this->assertEquals($expected, $result);
231
        }
232

    
233
/**
234
 * Test that querystring arguments are not double escaped.
235
 *
236
 * @return void
237
 */
238
        public function testRequestWithQueryStringArguments() {
239
                $url = '/users/search/sort:User.name/direction:desc?nome=&cpm=&audience=public';
240
                $result = $this->Jquery->request($url);
241
                $expected = '$.ajax({url:"\\/users\\/search\\/sort:User.name\\/direction:desc?nome=&cpm=&audience=public"});';
242
                $this->assertEquals($expected, $result);
243
        }
244

    
245
/**
246
 * test that alternate jQuery object values work for request()
247
 *
248
 * @return void
249
 */
250
        public function testRequestWithAlternateJqueryObject() {
251
                $this->Jquery->jQueryObject = '$j';
252

    
253
                $result = $this->Jquery->request('/people/edit/1', array(
254
                        'update' => '#updated',
255
                        'success' => 'doFoo',
256
                        'method' => 'post',
257
                        'dataExpression' => true,
258
                        'data' => '$j("#someId").serialize()',
259
                        'wrapCallbacks' => false
260
                ));
261
                $expected = '$j.ajax({data:$j("#someId").serialize(), dataType:"html", success:function (data, textStatus) {doFoo$j("#updated").html(data);}, type:"post", url:"\\/people\\/edit\\/1"});';
262
                $this->assertEquals($expected, $result);
263
        }
264

    
265
/**
266
 * test sortable list generation
267
 *
268
 * @return void
269
 */
270
        public function testSortable() {
271
                $this->Jquery->get('#myList');
272
                $result = $this->Jquery->sortable(array(
273
                        'distance' => 5,
274
                        'containment' => 'parent',
275
                        'start' => 'onStart',
276
                        'complete' => 'onStop',
277
                        'sort' => 'onSort',
278
                        'wrapCallbacks' => false
279
                ));
280
                $expected = '$("#myList").sortable({containment:"parent", distance:5, sort:onSort, start:onStart, stop:onStop});';
281
                $this->assertEquals($expected, $result);
282

    
283
                $result = $this->Jquery->sortable(array(
284
                        'distance' => 5,
285
                        'containment' => 'parent',
286
                        'start' => 'onStart',
287
                        'complete' => 'onStop',
288
                        'sort' => 'onSort',
289
                ));
290
                $expected = '$("#myList").sortable({containment:"parent", distance:5, sort:function (event, ui) {onSort}, start:function (event, ui) {onStart}, stop:function (event, ui) {onStop}});';
291
                $this->assertEquals($expected, $result);
292
        }
293

    
294
/**
295
 * test drag() method
296
 *
297
 * @return void
298
 */
299
        public function testDrag() {
300
                $this->Jquery->get('#element');
301
                $result = $this->Jquery->drag(array(
302
                        'container' => '#content',
303
                        'start' => 'onStart',
304
                        'drag' => 'onDrag',
305
                        'stop' => 'onStop',
306
                        'snapGrid' => array(10, 10),
307
                        'wrapCallbacks' => false
308
                ));
309
                $expected = '$("#element").draggable({containment:"#content", drag:onDrag, grid:[10,10], start:onStart, stop:onStop});';
310
                $this->assertEquals($expected, $result);
311

    
312
                $result = $this->Jquery->drag(array(
313
                        'container' => '#content',
314
                        'start' => 'onStart',
315
                        'drag' => 'onDrag',
316
                        'stop' => 'onStop',
317
                        'snapGrid' => array(10, 10),
318
                ));
319
                $expected = '$("#element").draggable({containment:"#content", drag:function (event, ui) {onDrag}, grid:[10,10], start:function (event, ui) {onStart}, stop:function (event, ui) {onStop}});';
320
                $this->assertEquals($expected, $result);
321
        }
322

    
323
/**
324
 * test drop() method
325
 *
326
 * @return void
327
 */
328
        public function testDrop() {
329
                $this->Jquery->get('#element');
330
                $result = $this->Jquery->drop(array(
331
                        'accept' => '.items',
332
                        'hover' => 'onHover',
333
                        'leave' => 'onExit',
334
                        'drop' => 'onDrop',
335
                        'wrapCallbacks' => false
336
                ));
337
                $expected = '$("#element").droppable({accept:".items", drop:onDrop, out:onExit, over:onHover});';
338
                $this->assertEquals($expected, $result);
339

    
340
                $result = $this->Jquery->drop(array(
341
                        'accept' => '.items',
342
                        'hover' => 'onHover',
343
                        'leave' => 'onExit',
344
                        'drop' => 'onDrop',
345
                ));
346
                $expected = '$("#element").droppable({accept:".items", drop:function (event, ui) {onDrop}, out:function (event, ui) {onExit}, over:function (event, ui) {onHover}});';
347
                $this->assertEquals($expected, $result);
348
        }
349

    
350
/**
351
 * test slider generation
352
 *
353
 * @return void
354
 */
355
        public function testSlider() {
356
                $this->Jquery->get('#element');
357
                $result = $this->Jquery->slider(array(
358
                        'complete' => 'onComplete',
359
                        'change' => 'onChange',
360
                        'min' => 0,
361
                        'max' => 10,
362
                        'value' => 2,
363
                        'direction' => 'vertical',
364
                        'wrapCallbacks' => false
365
                ));
366
                $expected = '$("#element").slider({change:onChange, max:10, min:0, orientation:"vertical", stop:onComplete, value:2});';
367
                $this->assertEquals($expected, $result);
368

    
369
                $result = $this->Jquery->slider(array(
370
                        'complete' => 'onComplete',
371
                        'change' => 'onChange',
372
                        'min' => 0,
373
                        'max' => 10,
374
                        'value' => 2,
375
                        'direction' => 'vertical',
376
                ));
377
                $expected = '$("#element").slider({change:function (event, ui) {onChange}, max:10, min:0, orientation:"vertical", stop:function (event, ui) {onComplete}, value:2});';
378
                $this->assertEquals($expected, $result);
379
        }
380

    
381
/**
382
 * test the serializeForm method
383
 *
384
 * @return void
385
 */
386
        public function testSerializeForm() {
387
                $this->Jquery->get('#element');
388
                $result = $this->Jquery->serializeForm(array('isForm' => false));
389
                $expected = '$("#element").closest("form").serialize();';
390
                $this->assertEquals($expected, $result);
391

    
392
                $result = $this->Jquery->serializeForm(array('isForm' => true));
393
                $expected = '$("#element").serialize();';
394
                $this->assertEquals($expected, $result);
395

    
396
                $result = $this->Jquery->serializeForm(array('isForm' => false, 'inline' => true));
397
                $expected = '$("#element").closest("form").serialize()';
398
                $this->assertEquals($expected, $result);
399
        }
400
}