Projet

Général

Profil

Paste
Télécharger (30,3 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ds / tests / ds.entities.test @ bf6fb0ee

1
<?php
2

    
3
/**
4
 * @file
5
 * Entities tests
6
 */
7

    
8
class dsNodeTests extends dsBaseTest {
9

    
10
  /**
11
   * Implements getInfo().
12
   */
13
  public static function getInfo() {
14
    return array(
15
      'name' => t('Node display'),
16
      'description' => t('Tests for display of nodes and fields.'),
17
      'group' => t('Display Suite'),
18
    );
19
  }
20

    
21
  /**
22
   * Utility function to setup for all kinds of tests.
23
   *
24
   * @param $label
25
   *   How the body label must be set.
26
   */
27
  function entitiesTestSetup($label = 'above') {
28

    
29
    // Create a node.
30
    $settings = array('type' => 'article', 'promote' => 1);
31
    $node = $this->drupalCreateNode($settings);
32

    
33
    // Create field CSS classes.
34
    $edit = array('ds_classes_fields' => "test_field_class\ntest_field_class_2|Field class 2");
35
    $this->drupalPost('admin/structure/ds/classes', $edit, t('Save configuration'));
36

    
37
    // Create a token and php field.
38
    $token_field = array(
39
      'name' => 'Token field',
40
      'field' => 'token_field',
41
      'entities[node]' => '1',
42
      'code[value]' => '<div class="token-class">[node:title]</span>',
43
      'use_token' => '1',
44
    );
45
    $php_field = array(
46
      'name' => 'PHP field',
47
      'field' => 'php_field',
48
      'entities[node]' => '1',
49
      'code[value]' => "<?php echo 'I am a PHP field'; ?>",
50
      'use_token' => '0',
51
    );
52
    $this->dsCreateCodeField($token_field);
53
    $this->dsCreateCodeField($php_field);
54

    
55
    // Select layout.
56
    $this->dsSelectLayout();
57

    
58
    // Configure fields.
59
    $fields = array(
60
      'fields[token_field][region]' => 'header',
61
      'fields[php_field][region]' => 'left',
62
      'fields[body][region]' => 'right',
63
      'fields[node_link][region]' => 'footer',
64
      'fields[body][label]' => $label,
65
      'fields[submitted_by][region]' => 'header',
66
    );
67
    $this->dsConfigureUI($fields);
68

    
69
    return $node;
70
  }
71

    
72
  /**
73
   * Utility function to clear field settings.
74
   */
75
  function entitiesClearFieldSettings() {
76
    db_query('TRUNCATE {ds_field_settings}');
77
    cache_clear_all('ds_fields:', 'cache', TRUE);
78
    cache_clear_all('ds_field_settings', 'cache');
79
  }
80

    
81
  /**
82
   * Set the label.
83
   */
84
  function entitiesSetLabelClass($label, $text = '', $class = '', $hide_colon = FALSE) {
85
    $edit = array(
86
      'fields[body][label]' => $label,
87
    );
88
    if (!empty($text)) {
89
      $edit['fields[body][settings_edit_form][settings][ft][lb]'] = $text;
90
    }
91
    if (!empty($class)) {
92
      $edit['fields[body][settings_edit_form][settings][ft][classes][]'] = $class;
93
    }
94
    if ($hide_colon) {
95
      $edit['fields[body][settings_edit_form][settings][ft][lb-col]'] = '1';
96
    }
97
    $this->dsEditFormatterSettings($edit);
98
  }
99

    
100
  /**
101
   * Test basic node display fields.
102
   */
103
  function testDSNodeEntity() {
104

    
105
    $node = $this->entitiesTestSetup();
106
    $node_author = user_load($node->uid);
107

    
108
    // Test theme_hook_suggestions in ds_entity_variables().
109
    $this->drupalGet('node/' . $node->nid, array('query' => array('store' => 1)));
110
    $cache = cache_get('ds_test');
111
    $this->assertTrue(!empty($cache));
112
    $hook_suggestions = $cache->data['theme_hook_suggestions'];
113
    $expected_hook_suggestions = array(
114
      'node__article',
115
      'node__1',
116
      'ds_2col_stacked',
117
      'ds_2col_stacked__node',
118
      'ds_2col_stacked__node_full',
119
      'ds_2col_stacked__node_article',
120
      'ds_2col_stacked__node_article_full',
121
      'ds_2col_stacked__node__1'
122
    );
123
    $this->assertEqual($hook_suggestions, $expected_hook_suggestions);
124

    
125
    // Look at node and verify token and block field.
126
    $this->drupalGet('node/' . $node->nid);
127
    $this->assertRaw('view-mode-full', 'Template file found (in full view mode)');
128
    $this->assertRaw('<div class="token-class">' . $node->title . '</span>', t('Token field found'));
129
    $this->assertRaw('I am a PHP field', t('PHP field found'));
130
    $this->assertRaw('group-header', 'Template found (region header)');
131
    $this->assertRaw('group-footer', 'Template found (region footer)');
132
    $this->assertRaw('group-left', 'Template found (region left)');
133
    $this->assertRaw('group-right', 'Template found (region right)');
134
    $this->assertPattern('/<div[^>]*>Submitted[^<]*<a[^>]+href="' . preg_quote(base_path(), '/') . 'user\/' . $node_author->uid . '"[^>]*>' . check_plain($node_author->name) . '<\/a>.<\/div>/', t('Submitted by line found'));
135

    
136
    // Configure teaser layout.
137
    $teaser = array(
138
      'additional_settings[layout]' => 'ds_2col',
139
    );
140
    $teaser_assert = array(
141
      'regions' => array(
142
        'left' => '<td colspan="8">' . t('Left') . '</td>',
143
        'right' => '<td colspan="8">' . t('Right') . '</td>',
144
      ),
145
    );
146
    $this->dsSelectLayout($teaser, $teaser_assert, 'admin/structure/types/manage/article/display/teaser');
147

    
148
    $fields = array(
149
      'fields[token_field][region]' => 'left',
150
      'fields[php_field][region]' => 'left',
151
      'fields[body][region]' => 'right',
152
      'fields[links][region]' => 'right',
153
    );
154
    $this->dsConfigureUI($fields, 'admin/structure/types/manage/article/display/teaser');
155

    
156
    // Switch view mode on full node page.
157
    $edit = array('ds_switch' => 'teaser');
158
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
159
    $this->assertRaw('view-mode-teaser', 'Switched to teaser mode');
160
    $this->assertRaw('group-left', 'Template found (region left)');
161
    $this->assertRaw('group-right', 'Template found (region right)');
162
    $this->assertNoRaw('group-header', 'Template found (no region header)');
163
    $this->assertNoRaw('group-footer', 'Template found (no region footer)');
164

    
165
    $edit = array('ds_switch' => '');
166
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
167
    $this->assertRaw('view-mode-full', 'Switched to full mode again');
168

    
169
    // Test all options of a block field.
170
    $block = array(
171
      'name' => 'Test block field',
172
      'field' => 'test_block_field',
173
      'entities[node]' => '1',
174
      'block' => 'node|recent',
175
      'block_render' => DS_BLOCK_TEMPLATE,
176
    );
177
    $this->dsCreateBlockField($block);
178
    $fields = array(
179
      'fields[test_block_field][region]' => 'left',
180
      'fields[token_field][region]' => 'hidden',
181
      'fields[php_field][region]' => 'hidden',
182
      'fields[body][region]' => 'hidden',
183
      'fields[links][region]' => 'hidden',
184
    );
185
    $this->dsConfigureUI($fields);
186
    $this->drupalGet('node/' . $node->nid);
187
    $this->assertRaw('<h2>Recent content</h2>');
188

    
189
    $block = array(
190
      'block_render' => DS_BLOCK_TITLE_CONTENT,
191
    );
192
    $this->dsCreateBlockField($block, 'admin/structure/ds/fields/manage_block/test_block_field', FALSE);
193
    $this->drupalGet('node/' . $node->nid);
194
    $this->assertNoRaw('<h2>Recent content</h2>');
195
    $this->assertRaw('Recent content');
196

    
197
    $block = array(
198
      'block_render' => DS_BLOCK_CONTENT,
199
    );
200
    $this->dsCreateBlockField($block, 'admin/structure/ds/fields/manage_block/test_block_field', FALSE);
201
    $this->drupalGet('node/' . $node->nid);
202
    $this->assertNoRaw('<h2>Recent content</h2>');
203
    $this->assertNoRaw('Recent content');
204

    
205
    // Remove the page title (we'll use the switch view mode functionality too for this).
206
    $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '1');
207
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser');
208
    $this->drupalGet('node/' . $node->nid);
209
    $this->assertRaw('<h1 class="title" id="page-title">
210
          '. $node->title . '        </h1>');
211
    $edit = array('ds_switch' => 'teaser');
212
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
213
    $this->drupalGet('node/' . $node->nid);
214
    $this->assertNoRaw('<h1 class="title" id="page-title">
215
          '. $node->title . '        </h1>');
216

    
217
    // Use page title substitutions.
218
    $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Change title: %node:type');
219
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser');
220
    $this->drupalGet('node/' . $node->nid);
221
    $this->assertRaw('<h1 class="title" id="page-title">
222
          Change title: '. $node->type . '        </h1>');
223
    $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '0');
224
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/teaser');
225

    
226
    // Go to home page, page title shouldn't bleed here
227
    // see http://drupal.org/node/1446554.
228
    $edit = array('ds_switch' => '');
229
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
230
    $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Bleed title: %node:type');
231
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display');
232
    $this->drupalGet('node/' . $node->nid);
233
    $this->assertRaw('<h1 class="title" id="page-title">
234
          Bleed title: article        </h1>');
235
    $this->drupalGet('node');
236
    $this->assertNoText('Bleed title');
237

    
238
    // Test revisions. Enable the revision view mode
239
    $edit = array('additional_settings[modes][view_modes_custom][revision]' => '1');
240
    $this->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save'));
241

    
242
    // Select layout and configure fields.
243
    $edit = array(
244
      'additional_settings[layout]' => 'ds_2col',
245
    );
246
    $assert = array(
247
      'regions' => array(
248
        'left' => '<td colspan="8">' . t('Left') . '</td>',
249
        'right' => '<td colspan="8">' . t('Right') . '</td>',
250
      ),
251
    );
252
    $this->dsSelectLayout($edit, $assert, 'admin/structure/types/manage/article/display/revision');
253
    $edit = array(
254
      'fields[body][region]' => 'left',
255
      'fields[links][region]' => 'right',
256
      'fields[author][region]' => 'right',
257
    );
258
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/revision');
259

    
260
    // Create revision of the node.
261
    $edit = array(
262
      'revision' => TRUE,
263
      'log' => 'Test revision',
264
    );
265
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
266
    $this->assertText('Revisions');
267

    
268
    // Assert revision is using 2 col template.
269
    $this->drupalGet('node/' . $node->nid . '/revisions/1/view');
270
    $this->assertText('Body:', 'Body label');
271

    
272
    // Change title of revision.
273
    $edit = array('additional_settings[ds_page_title][ds_page_title_options][page_option_type]' => '2', 'additional_settings[ds_page_title][ds_page_title_options][page_option_title]' => 'Custom revision title');
274

    
275
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display/revision');
276
    $this->drupalGet('node/' . $node->nid . '/revisions/1/view');
277
    $this->assertText('Custom revision title', 'Custom title on revision view mode');
278

    
279
    // Assert full view is using stacked template.
280
    $this->drupalGet('node/' . $node->nid);
281
    $this->assertNoText('Body:', 'Body label');
282

    
283
    // Test formatter limit on article with tags.
284
    $edit = array(
285
      'ds_switch' => '',
286
      'field_tags[und]' => 'Tag 1, Tag 2'
287
    );
288
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
289
    $edit = array(
290
      'fields[field_tags][region]' => 'right',
291
    );
292
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display');
293
    $this->drupalGet('node/' . $node->nid);
294
    $this->assertText('Tag 1');
295
    $this->assertText('Tag 2');
296
    $edit = array(
297
      'fields[field_tags][format][limit]' => '1',
298
    );
299
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display');
300
    $this->drupalGet('node/' . $node->nid);
301
    $this->assertText('Tag 1');
302
    $this->assertNoText('Tag 2');
303

    
304
    // Test check_plain() on ds_render_field() with the title field.
305
    $edit = array(
306
      'fields[title][region]' => 'right',
307
    );
308
    $this->dsConfigureUI($edit, 'admin/structure/types/manage/article/display');
309
    $edit = array(
310
      'title' => 'Hi, I am an article <script>alert(\'with a javascript tag in the title\');</script>',
311
    );
312
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
313
    $this->drupalGet('node/' . $node->nid);
314
    $this->assertRaw('<h2>Hi, I am an article &lt;script&gt;alert(&#039;with a javascript tag in the title&#039;);&lt;/script&gt;</h2>');
315
  }
316

    
317
  /**
318
   * Tests on field templates.
319
   */
320
  function testDSFieldTemplate() {
321

    
322
    // Get a node.
323
    $node = $this->entitiesTestSetup('hidden');
324
    $body_field = $node->body[$node->language][0]['value'];
325

    
326
    // -------------------------
327
    // Default theming function.
328
    // -------------------------
329
    $this->drupalGet('node/' . $node->nid);
330
    $this->assertRaw("<div class=\"field field-name-body field-type-text-with-summary field-label-hidden\"><div class=\"field-items\"><div class=\"field-item even\" property=\"content:encoded\"><p>" . $body_field . "</p>
331
</div></div></div>");
332

    
333
    $this->entitiesSetLabelClass('above');
334
    $this->drupalGet('node/' . $node->nid);
335
    $this->assertRaw("<div class=\"field field-name-body field-type-text-with-summary field-label-above\"><div class=\"field-label\">Body:&nbsp;</div><div class=\"field-items\"><div class=\"field-item even\" property=\"content:encoded\"><p>" . $body_field . "</p>
336
</div></div></div>");
337

    
338
    $this->entitiesSetLabelClass('above', 'My body');
339
    $this->drupalGet('node/' . $node->nid);
340
    $this->assertRaw("<div class=\"field field-name-body field-type-text-with-summary field-label-above\"><div class=\"field-label\">My body:&nbsp;</div><div class=\"field-items\"><div class=\"field-item even\" property=\"content:encoded\"><p>" . $body_field . "</p>
341
</div></div></div>");
342

    
343
    $this->entitiesSetLabelClass('hidden', '', 'test_field_class');
344
    $this->drupalGet('node/' . $node->nid);
345
    $this->assertRaw("<div class=\"field field-name-body field-type-text-with-summary field-label-hidden test_field_class\"><div class=\"field-items\"><div class=\"field-item even\" property=\"content:encoded\"><p>" . $body_field . "</p>
346
</div></div></div>");
347

    
348
    $this->entitiesClearFieldSettings();
349

    
350
    // -----------------------
351
    // Reset theming function.
352
    // -----------------------
353
    $edit = array(
354
      'additional_settings[fs1][ft-default]' => 'theme_ds_field_reset',
355
    );
356
    $this->drupalPost('admin/structure/ds/list/extras', $edit, t('Save configuration'));
357
    $this->drupalGet('node/' . $node->nid);
358
    $this->assertRaw("<div class=\"group-right\">
359
    <p>" . $body_field . "</p>");
360

    
361
    $this->entitiesSetLabelClass('above');
362
    $this->drupalGet('node/' . $node->nid);
363
    $this->assertRaw("<div class=\"group-right\">
364
    <div class=\"label-above\">Body:&nbsp;</div><p>" . $body_field . "</p>");
365

    
366
    $this->entitiesSetLabelClass('inline');
367
    $this->drupalGet('node/' . $node->nid);
368
    $this->assertRaw("<div class=\"group-right\">
369
    <div class=\"label-inline\">Body:&nbsp;</div><p>" . $body_field . "</p>");
370

    
371
    $this->entitiesSetLabelClass('above', 'My body');
372
    $this->drupalGet('node/' . $node->nid);
373
    $this->assertRaw("<div class=\"group-right\">
374
    <div class=\"label-above\">My body:&nbsp;</div><p>" . $body_field . "</p>");
375

    
376
    $this->entitiesSetLabelClass('inline', 'My body');
377
    $this->drupalGet('node/' . $node->nid);
378
    $this->assertRaw("<div class=\"group-right\">
379
    <div class=\"label-inline\">My body:&nbsp;</div><p>" . $body_field . "</p>");
380

    
381
    variable_set('ft-kill-colon', TRUE);
382
    $this->refreshVariables();
383
    $this->drupalGet('node/' . $node->nid);
384
    $this->assertRaw("<div class=\"group-right\">
385
    <div class=\"label-inline\">My body</div><p>" . $body_field . "</p>");
386

    
387
    $this->entitiesSetLabelClass('hidden');
388
    $this->drupalGet('node/' . $node->nid);
389
    $this->assertRaw("<div class=\"group-right\">
390
    <p>" . $body_field . "</p>");
391
    $this->entitiesClearFieldSettings();
392

    
393
    // ----------------------
394
    // Custom field function.
395
    // ----------------------
396

    
397
    // With outer wrapper.
398
    $edit = array(
399
      'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert',
400
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
401
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
402
    );
403
    $this->dsEditFormatterSettings($edit);
404

    
405
    $this->drupalGet('node/' . $node->nid);
406
    $this->assertRaw("<div class=\"group-right\">
407
    <div><p>" . $body_field . "</p>
408
</div>  </div>");
409

    
410
    // With outer div wrapper and class.
411
    $edit = array(
412
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
413
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
414
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class'
415
    );
416
    $this->dsEditFormatterSettings($edit);
417
    $this->drupalGet('node/' . $node->nid);
418
    $this->assertRaw("<div class=\"group-right\">
419
    <div class=\"ow-class\"><p>" . $body_field . "</p>
420
</div>  </div>");
421

    
422
    // With outer span wrapper and class.
423
    $edit = array(
424
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
425
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'span',
426
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class-2'
427
    );
428
    $this->dsEditFormatterSettings($edit);
429
    $this->drupalGet('node/' . $node->nid);
430
    $this->assertRaw("<div class=\"group-right\">
431
    <span class=\"ow-class-2\"><p>" . $body_field . "</p>
432
</span>  </div>");
433

    
434
    // Clear field settings.
435
    $this->entitiesClearFieldSettings();
436

    
437
    // With outer wrapper and field items wrapper.
438
    $edit = array(
439
      'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert',
440
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
441
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
442
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
443
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div'
444
    );
445
    $this->dsEditFormatterSettings($edit);
446
    $this->drupalGet('node/' . $node->nid);
447
    $this->assertRaw("<div class=\"group-right\">
448
    <div><div><p>" . $body_field . "</p>
449
</div></div>  </div>");
450

    
451
    // With outer wrapper and field items div wrapper with class.
452
    $edit = array(
453
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
454
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
455
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
456
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
457
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div',
458
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class'
459
    );
460
    $this->dsEditFormatterSettings($edit);
461
    $this->drupalGet('node/' . $node->nid);
462
    $this->assertRaw("<div class=\"group-right\">
463
    <div><div class=\"fi-class\"><p>" . $body_field . "</p>
464
</div></div>  </div>");
465

    
466
    // With outer wrapper and field items span wrapper and class.
467
    $edit = array(
468
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
469
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
470
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
471
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span',
472
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class'
473
    );
474
    $this->dsEditFormatterSettings($edit);
475
    $this->drupalGet('node/' . $node->nid);
476
    $this->assertRaw("<div class=\"group-right\">
477
    <div><span class=\"fi-class\"><p>" . $body_field . "</p>
478
</span></div>  </div>");
479

    
480
    // With outer wrapper class and field items span wrapper and class.
481
    $edit = array(
482
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
483
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
484
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
485
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
486
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span',
487
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class'
488
    );
489
    $this->dsEditFormatterSettings($edit);
490
    $this->drupalGet('node/' . $node->nid);
491
    $this->assertRaw("<div class=\"group-right\">
492
    <div class=\"ow-class\"><span class=\"fi-class\"><p>" . $body_field . "</p>
493
</span></div>  </div>");
494

    
495
    // With outer wrapper span class and field items span wrapper and class.
496
    $edit = array(
497
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
498
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'span',
499
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
500
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
501
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'span',
502
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2'
503
    );
504
    $this->dsEditFormatterSettings($edit);
505
    $this->drupalGet('node/' . $node->nid);
506
    $this->assertRaw("<div class=\"group-right\">
507
    <span class=\"ow-class\"><span class=\"fi-class-2\"><p>" . $body_field . "</p>
508
</span></span>  </div>");
509

    
510
    // Clear field settings.
511
    $this->entitiesClearFieldSettings();
512

    
513
    // With field item div wrapper.
514
    $edit = array(
515
      'fields[body][settings_edit_form][settings][ft][func]' => 'theme_ds_field_expert',
516
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
517
    );
518
    $this->dsEditFormatterSettings($edit);
519
    $this->drupalGet('node/' . $node->nid);
520
    $this->assertRaw("<div class=\"group-right\">
521
    <div><p>" . $body_field . "</p>
522
</div>  </div>");
523

    
524
    // With field item span wrapper.
525
    $edit = array(
526
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
527
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span',
528
    );
529
    $this->dsEditFormatterSettings($edit);
530
    $this->drupalGet('node/' . $node->nid);
531
    $this->assertRaw("<div class=\"group-right\">
532
    <span><p>" . $body_field . "</p>
533
</span>  </div>");
534

    
535
    // With field item span wrapper and class and odd even.
536
    $edit = array(
537
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
538
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span',
539
      'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class',
540
      'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1',
541
      'fields[body][settings_edit_form][settings][ft][fi-first-last]' => '1',
542
    );
543
    $this->dsEditFormatterSettings($edit);
544
    $this->drupalGet('node/' . $node->nid);
545
    $this->assertRaw("<div class=\"group-right\">
546
    <span class=\"even fi-class\"><p>" . $body_field . "</p>
547
</span>  </div>");
548

    
549
    // With fis and fi.
550
    $edit = array(
551
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
552
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div',
553
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2',
554
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
555
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'div',
556
      'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class',
557
      'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1',
558
      'fields[body][settings_edit_form][settings][ft][fi-first-last]' => '1',
559
    );
560
    $this->dsEditFormatterSettings($edit);
561
    $this->drupalGet('node/' . $node->nid);
562
    $this->assertRaw("<div class=\"group-right\">
563
    <div class=\"fi-class-2\"><div class=\"even fi-class\"><p>" . $body_field . "</p>
564
</div></div>  </div>");
565
    // With all wrappers.
566
    $edit = array(
567
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
568
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
569
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
570
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
571
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div',
572
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2',
573
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
574
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span',
575
      'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class',
576
      'fields[body][settings_edit_form][settings][ft][fi-odd-even]' => '1',
577
      'fields[body][settings_edit_form][settings][ft][fi-first-last]' => '1',
578
    );
579
    $this->dsEditFormatterSettings($edit);
580
    $this->drupalGet('node/' . $node->nid);
581
    $this->assertRaw("<div class=\"group-right\">
582
    <div class=\"ow-class\"><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
583
</span></div></div>  </div>");
584

    
585
    // With all wrappers and attributes.
586
    $edit = array(
587
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
588
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
589
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
590
      'fields[body][settings_edit_form][settings][ft][ow-at]' => 'name="ow-att"',
591
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
592
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div',
593
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2',
594
      'fields[body][settings_edit_form][settings][ft][fis-at]' => 'name="fis-att"',
595
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
596
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span',
597
      'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class',
598
      'fields[body][settings_edit_form][settings][ft][fi-at]' => 'name="fi-at"',
599
    );
600
    $this->dsEditFormatterSettings($edit);
601
    $this->drupalGet('node/' . $node->nid);
602
    $this->assertRaw("<div class=\"group-right\">
603
    <div class=\"ow-class\" name=\"ow-att\"><div class=\"fi-class-2\" name=\"fis-att\"><span class=\"even fi-class\" name=\"fi-at\"><p>" . $body_field . "</p>
604
</span></div></div>  </div>");
605

    
606
    // Remove attributes.
607
    $edit = array(
608
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
609
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
610
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
611
      'fields[body][settings_edit_form][settings][ft][ow-at]' => '',
612
      'fields[body][settings_edit_form][settings][ft][fis]' => '1',
613
      'fields[body][settings_edit_form][settings][ft][fis-el]' => 'div',
614
      'fields[body][settings_edit_form][settings][ft][fis-cl]' => 'fi-class-2',
615
      'fields[body][settings_edit_form][settings][ft][fis-at]' => '',
616
      'fields[body][settings_edit_form][settings][ft][fi]' => '1',
617
      'fields[body][settings_edit_form][settings][ft][fi-el]' => 'span',
618
      'fields[body][settings_edit_form][settings][ft][fi-cl]' => 'fi-class',
619
      'fields[body][settings_edit_form][settings][ft][fi-at]' => '',
620
    );
621
    $this->dsEditFormatterSettings($edit);
622

    
623
    // Label tests with custom function.
624
    $this->entitiesSetLabelClass('above');
625
    $this->drupalGet('node/' . $node->nid);
626
    $this->assertRaw("<div class=\"group-right\">
627
    <div class=\"ow-class\"><div class=\"label-above\">Body:&nbsp;</div><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
628
</span></div></div>  </div>");
629

    
630
    $this->entitiesSetLabelClass('inline');
631
    $this->drupalGet('node/' . $node->nid);
632
    $this->assertRaw("<div class=\"group-right\">
633
    <div class=\"ow-class\"><div class=\"label-inline\">Body:&nbsp;</div><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
634
</span></div></div>  </div>");
635

    
636
    $this->entitiesSetLabelClass('above', 'My body');
637
    $this->drupalGet('node/' . $node->nid);
638
    $this->assertRaw("<div class=\"group-right\">
639
    <div class=\"ow-class\"><div class=\"label-above\">My body:&nbsp;</div><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
640
</span></div></div>  </div>");
641

    
642
    $this->entitiesSetLabelClass('inline', 'My body');
643
    $this->drupalGet('node/' . $node->nid);
644
    $this->assertRaw("<div class=\"group-right\">
645
    <div class=\"ow-class\"><div class=\"label-inline\">My body:&nbsp;</div><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
646
</span></div></div>  </div>");
647

    
648
    $this->entitiesSetLabelClass('inline', 'My body', '', TRUE);
649
    $this->drupalGet('node/' . $node->nid);
650
    $this->assertRaw("<div class=\"group-right\">
651
    <div class=\"ow-class\"><div class=\"label-inline\">My body</div><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
652
</span></div></div>  </div>");
653

    
654
    $this->entitiesSetLabelClass('hidden');
655
    $this->drupalGet('node/' . $node->nid);
656
    $this->assertRaw("<div class=\"group-right\">
657
    <div class=\"ow-class\"><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
658
</span></div></div>  </div>");
659

    
660
    // Test default classes on outer wrapper.
661
    $edit = array(
662
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
663
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
664
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
665
      'fields[body][settings_edit_form][settings][ft][ow-def-cl]' => '1',
666
    );
667
    $this->dsEditFormatterSettings($edit);
668
    $this->drupalGet('node/' . $node->nid);
669
    $this->assertRaw("<div class=\"group-right\">
670
    <div class=\"ow-class field field-name-body field-type-text-with-summary field-label-hidden\"><div class=\"fi-class-2\"><span class=\"even fi-class\"><p>" . $body_field . "</p>
671
</span></div></div>  </div>");
672

    
673
    // Test default attributes on field item.
674
    $edit = array(
675
      'fields[body][settings_edit_form][settings][ft][ow]' => '1',
676
      'fields[body][settings_edit_form][settings][ft][ow-el]' => 'div',
677
      'fields[body][settings_edit_form][settings][ft][ow-cl]' => 'ow-class',
678
      'fields[body][settings_edit_form][settings][ft][ow-def-cl]' => '1',
679
      'fields[body][settings_edit_form][settings][ft][fi-def-at]' => '1',
680
    );
681
    $this->dsEditFormatterSettings($edit);
682
    $this->drupalGet('node/' . $node->nid);
683
    $this->assertRaw("<div class=\"group-right\">
684
    <div class=\"ow-class field field-name-body field-type-text-with-summary field-label-hidden\"><div class=\"fi-class-2\"><span class=\"even fi-class\"  property=\"content:encoded\"><p>" . $body_field . "</p>
685
</span></div></div>  </div>");
686

    
687
    // Use the test field theming function to test that this function is
688
    // registered in the theme registry through ds_extras_theme().
689
    $edit = array(
690
      'fields[body][settings_edit_form][settings][ft][func]' => 'ds_test_theming_function',
691
    );
692

    
693
    $this->dsEditFormatterSettings($edit);
694
    $this->drupalGet('node/' . $node->nid);
695
    $this->assertRaw("<div class=\"group-right\">
696
    Testing field output through custom function  </div>");
697
  }
698
}