Projet

Général

Profil

Paste
Télécharger (9,29 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / views_data_export / tests / xml_export.test @ 651307cd

1
<?php
2

    
3
class XMLExportViewsDataExportTests extends ViewsDataExportSimpleExportTest {
4

    
5
  protected $profile = 'testing';
6

    
7
  public static function getInfo() {
8
    return array(
9
      'name' => 'XML Export',
10
      'description' => 'Various tests for exporting to XML.',
11
      'group' => 'Views Data Export',
12
    );
13
  }
14

    
15
  protected $vde_export_type = 'XML';
16

    
17
  protected function getStylePluginName() {
18
    return 'views_data_export_xml';
19
  }
20

    
21
  protected function getExportView($path = 'vde_test') {
22
    // Create the basic view.
23
    $view = $this->getBasicExportView();
24

    
25
    $display = $view->new_display('views_data_export', 'Data export', 'vde_test');
26
    $display->override_option('style_plugin', 'views_data_export_xml');
27
    $display->override_option('path', $path);
28

    
29
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
30
<views_tests>
31
  <views_test>
32
    <ID>1</ID>
33
    <Name>John</Name>
34
    <Age>25</Age>
35
  </views_test>
36
  <views_test>
37
    <ID>2</ID>
38
    <Name>George</Name>
39
    <Age>27</Age>
40
  </views_test>
41
  <views_test>
42
    <ID>3</ID>
43
    <Name>Ringo</Name>
44
    <Age>28</Age>
45
  </views_test>
46
  <views_test>
47
    <ID>4</ID>
48
    <Name>Paul</Name>
49
    <Age>26</Age>
50
  </views_test>
51
  <views_test>
52
    <ID>5</ID>
53
    <Name>Meredith</Name>
54
    <Age>30</Age>
55
  </views_test>
56
</views_tests>';
57

    
58
    return array(&$view, $expected);
59
  }
60

    
61
  /**
62
   * Test to check if empty fields are correctly hidden.
63
   */
64
  protected function testHideEmptySupport() {
65
    $view = $this->getHideIfEmptyExportView();
66

    
67
    // We need to ensure that the test fields are actually empty/0.
68
    db_update('views_test')
69
      ->fields(array('age' => 0,))
70
      ->condition('name', 'Paul')
71
      ->execute();
72

    
73
    db_update('views_test')
74
      ->fields(array('name' => '',))
75
      ->condition('name', 'George')
76
      ->execute();
77

    
78
    db_update('views_test')
79
      ->fields(array('name' => 0,))
80
      ->condition('name', 'John')
81
      ->execute();
82

    
83
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
84
<views_tests>
85
  <views_test>
86
    <ID>1</ID>
87
    <Name>0</Name>
88
    <Age>25</Age>
89
  </views_test>
90
  <views_test>
91
    <ID>2</ID>
92
    <Age>27</Age>
93
  </views_test>
94
  <views_test>
95
    <ID>3</ID>
96
    <Name>Ringo</Name>
97
    <Age>28</Age>
98
  </views_test>
99
  <views_test>
100
    <ID>4</ID>
101
    <Name>Paul</Name>
102
  </views_test>
103
  <views_test>
104
    <ID>5</ID>
105
    <Name>Meredith</Name>
106
    <Age>30</Age>
107
  </views_test>
108
</views_tests>';
109

    
110
    $message = 'Hide if empty support for ' . $this->vde_export_type . ' export matched expected output.';
111

    
112
    $this->executeAndCompareGivenView($view, $expected, $message);
113

    
114
  }
115

    
116
  /**
117
   * Test to ensure that valid XML is produced when someone doesn't specify a label.
118
   */
119
  protected function testEmptyLabels() {
120
    $view = $this->getBasicExportView();
121

    
122
    $display = $view->display['default']->handler;
123

    
124
    $display->override_option('fields', array(
125
      'id' => array(
126
        'id' => 'id',
127
        'table' => 'views_test',
128
        'field' => 'id',
129
        'relationship' => 'none',
130
      ),
131
      'name' => array(
132
        'id' => 'name',
133
        'table' => 'views_test',
134
        'field' => 'name',
135
        'relationship' => 'none',
136
        // Remove the label from the name field.
137
        'label' => '',
138
      ),
139
      'age' => array(
140
        'id' => 'age',
141
        'table' => 'views_test',
142
        'field' => 'age',
143
        'relationship' => 'none',
144
        // Make this label intentially invalid XML.
145
        'label' => '.',
146
      ),
147
    ));
148

    
149
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
150
<views_tests>
151
  <views_test>
152
    <ID>1</ID>
153
    <no-name>John</no-name>
154
    <invalid-tag-name>25</invalid-tag-name>
155
  </views_test>
156
  <views_test>
157
    <ID>2</ID>
158
    <no-name>George</no-name>
159
    <invalid-tag-name>27</invalid-tag-name>
160
  </views_test>
161
  <views_test>
162
    <ID>3</ID>
163
    <no-name>Ringo</no-name>
164
    <invalid-tag-name>28</invalid-tag-name>
165
  </views_test>
166
  <views_test>
167
    <ID>4</ID>
168
    <no-name>Paul</no-name>
169
    <invalid-tag-name>26</invalid-tag-name>
170
  </views_test>
171
  <views_test>
172
    <ID>5</ID>
173
    <no-name>Meredith</no-name>
174
    <invalid-tag-name>30</invalid-tag-name>
175
  </views_test>
176
</views_tests>';
177

    
178
    $message = 'Empty label test in ' . $this->vde_export_type . ' export matched expected output.';
179

    
180
    $this->executeAndCompareGivenView($view, $expected, $message);
181
  }
182

    
183
  /**
184
   * Test to ensure that XML nodes names can be manually specified.
185
   */
186
  protected function testCustomiseXMLNodes() {
187
    $view = $this->getBasicExportView();
188

    
189
    // Load the include that contains the _views_data_export_xml_tag_clean function.
190
    module_load_include('inc', 'views_data_export', 'theme/views_data_export.theme');
191

    
192

    
193
    $root_node = _views_data_export_xml_tag_clean($this->randomName());
194
    $item_node = _views_data_export_xml_tag_clean($this->randomName());
195

    
196
    $style_options = array(
197
      'root_node' => $root_node,
198
      'item_node' => $item_node,
199
    );
200

    
201
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
202
<' . $root_node . '>
203
  <' . $item_node . '>
204
    <ID>1</ID>
205
    <Name>John</Name>
206
    <Age>25</Age>
207
  </' . $item_node . '>
208
  <' . $item_node . '>
209
    <ID>2</ID>
210
    <Name>George</Name>
211
    <Age>27</Age>
212
  </' . $item_node . '>
213
  <' . $item_node . '>
214
    <ID>3</ID>
215
    <Name>Ringo</Name>
216
    <Age>28</Age>
217
  </' . $item_node . '>
218
  <' . $item_node . '>
219
    <ID>4</ID>
220
    <Name>Paul</Name>
221
    <Age>26</Age>
222
  </' . $item_node . '>
223
  <' . $item_node . '>
224
    <ID>5</ID>
225
    <Name>Meredith</Name>
226
    <Age>30</Age>
227
  </' . $item_node . '>
228
</' . $root_node . '>';
229

    
230
    $message = 'Custom XML nodes test in ' . $this->vde_export_type . ' export matched expected output.';
231

    
232
    $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
233
  }
234

    
235
  /**
236
   * Test to ensure certain fields can be optionally non-escaped.
237
   */
238
  protected function testXMLNoEntityEncode() {
239
    $view = $this->getBasicExportView();
240

    
241
    $display = $view->display['default']->handler;
242

    
243
    $style_options = array(
244
      'no_entity_encode' => array(
245
        'id' => 'id',
246
      ),
247
    );
248

    
249
    $display->override_option('fields', array(
250
      'id' => array(
251
        'id' => 'id',
252
        'table' => 'views_test',
253
        'field' => 'id',
254
        'relationship' => 'none',
255
        'alter' => array(
256
          'alter_text' => TRUE,
257
          'text' => '<strong>[id]</strong>',
258
        ),
259
      ),
260
      'name' => array(
261
        'id' => 'name',
262
        'table' => 'views_test',
263
        'field' => 'name',
264
        'relationship' => 'none',
265
        'alter' => array(
266
          'alter_text' => TRUE,
267
          'text' => '<em>[name]</em>',
268
        ),
269
      ),
270
      'age' => array(
271
        'id' => 'age',
272
        'table' => 'views_test',
273
        'field' => 'age',
274
        'relationship' => 'none',
275
      ),
276
    ));
277

    
278
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
279
<views_tests>
280
  <views_test>
281
    <ID><strong>1</strong></ID>
282
    <Name>&lt;em&gt;John&lt;/em&gt;</Name>
283
    <Age>25</Age>
284
  </views_test>
285
  <views_test>
286
    <ID><strong>2</strong></ID>
287
    <Name>&lt;em&gt;George&lt;/em&gt;</Name>
288
    <Age>27</Age>
289
  </views_test>
290
  <views_test>
291
    <ID><strong>3</strong></ID>
292
    <Name>&lt;em&gt;Ringo&lt;/em&gt;</Name>
293
    <Age>28</Age>
294
  </views_test>
295
  <views_test>
296
    <ID><strong>4</strong></ID>
297
    <Name>&lt;em&gt;Paul&lt;/em&gt;</Name>
298
    <Age>26</Age>
299
  </views_test>
300
  <views_test>
301
    <ID><strong>5</strong></ID>
302
    <Name>&lt;em&gt;Meredith&lt;/em&gt;</Name>
303
    <Age>30</Age>
304
  </views_test>
305
</views_tests>';
306

    
307
    $message = 'XML in values test in ' . $this->vde_export_type . ' export matched expected output.';
308

    
309
    $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
310
  }
311

    
312
  /**
313
   * Test to ensure certain fields can be optionally non-escaped.
314
   */
315
  protected function testXMLCDATAWrapper() {
316
    $view = $this->getBasicExportView();
317

    
318
    $style_options = array(
319
      'cdata_wrapper' => array(
320
        'id' => 'id',
321
        'name' => 'name',
322
      ),
323
    );
324

    
325
    $display = $view->display['default']->handler;
326

    
327
    $display->override_option('fields', array(
328
      'id' => array(
329
        'id' => 'id',
330
        'table' => 'views_test',
331
        'field' => 'id',
332
        'relationship' => 'none',
333
      ),
334
      'name' => array(
335
        'id' => 'name',
336
        'table' => 'views_test',
337
        'field' => 'name',
338
        'relationship' => 'none',
339
        'alter' => array(
340
          'alter_text' => TRUE,
341
          'text' => '<em>[name]</em>',
342
        ),
343
      ),
344
      'age' => array(
345
        'id' => 'age',
346
        'table' => 'views_test',
347
        'field' => 'age',
348
        'relationship' => 'none',
349
      ),
350
    ));
351

    
352
    $expected = '<?xml version="1.0" encoding="UTF-8" ?>
353
<views_tests>
354
  <views_test>
355
    <ID><![CDATA[1]]></ID>
356
    <Name><![CDATA[<em>John</em>]]></Name>
357
    <Age>25</Age>
358
  </views_test>
359
  <views_test>
360
    <ID><![CDATA[2]]></ID>
361
    <Name><![CDATA[<em>George</em>]]></Name>
362
    <Age>27</Age>
363
  </views_test>
364
  <views_test>
365
    <ID><![CDATA[3]]></ID>
366
    <Name><![CDATA[<em>Ringo</em>]]></Name>
367
    <Age>28</Age>
368
  </views_test>
369
  <views_test>
370
    <ID><![CDATA[4]]></ID>
371
    <Name><![CDATA[<em>Paul</em>]]></Name>
372
    <Age>26</Age>
373
  </views_test>
374
  <views_test>
375
    <ID><![CDATA[5]]></ID>
376
    <Name><![CDATA[<em>Meredith</em>]]></Name>
377
    <Age>30</Age>
378
  </views_test>
379
</views_tests>';
380

    
381
    $message = 'XML in values test in ' . $this->vde_export_type . ' export matched expected output.';
382

    
383
    $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
384
  }
385

    
386
}