views_plugin_style.test 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <?php
  2. /**
  3. * @file
  4. * Definition of ViewsPluginStyleTestCase.
  5. */
  6. /**
  7. * Tests some general style plugin related functionality.
  8. */
  9. class ViewsPluginStyleTestCase extends ViewsPluginStyleTestBase {
  10. public static function getInfo() {
  11. return array(
  12. 'name' => 'Styles',
  13. 'description' => 'Test general style functionality.',
  14. 'group' => 'Views Plugins',
  15. );
  16. }
  17. /**
  18. * Tests the grouping legacy features of styles.
  19. */
  20. function testGroupingLegacy() {
  21. $view = $this->getBasicView();
  22. // Setup grouping by the job.
  23. $view->init_display();
  24. $view->init_style();
  25. $view->style_plugin->options['grouping'] = 'job';
  26. // Reduce the amount of items to make the test a bit easier.
  27. // Set up the pager.
  28. $view->display['default']->handler->override_option('pager', array(
  29. 'type' => 'some',
  30. 'options' => array('items_per_page' => 3),
  31. ));
  32. // Add the job field .
  33. $view->display['default']->handler->override_option('fields', array(
  34. 'name' => array(
  35. 'id' => 'name',
  36. 'table' => 'views_test',
  37. 'field' => 'name',
  38. 'relationship' => 'none',
  39. ),
  40. 'job' => array(
  41. 'id' => 'job',
  42. 'table' => 'views_test',
  43. 'field' => 'job',
  44. 'relationship' => 'none',
  45. ),
  46. ));
  47. // Now run the query and groupby the result.
  48. $this->executeView($view);
  49. // This is the old way to call it.
  50. $sets = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping']);
  51. $expected = array();
  52. // Use Job: as label, so be sure that the label is used for groupby as well.
  53. $expected['Job: Singer'] = array();
  54. $expected['Job: Singer'][0] = new StdClass();
  55. $expected['Job: Singer'][0]->views_test_name = 'John';
  56. $expected['Job: Singer'][0]->views_test_job = 'Singer';
  57. $expected['Job: Singer'][0]->views_test_id = '1';
  58. $expected['Job: Singer'][1] = new StdClass();
  59. $expected['Job: Singer'][1]->views_test_name = 'George';
  60. $expected['Job: Singer'][1]->views_test_job = 'Singer';
  61. $expected['Job: Singer'][1]->views_test_id = '2';
  62. $expected['Job: Drummer'] = array();
  63. $expected['Job: Drummer'][2] = new StdClass();
  64. $expected['Job: Drummer'][2]->views_test_name = 'Ringo';
  65. $expected['Job: Drummer'][2]->views_test_job = 'Drummer';
  66. $expected['Job: Drummer'][2]->views_test_id = '3';
  67. $this->assertEqual($sets, $expected, t('The style plugin should proper group the results with grouping by the rendered output.'));
  68. $expected = array();
  69. $expected['Job: Singer'] = array();
  70. $expected['Job: Singer']['group'] = 'Job: Singer';
  71. $expected['Job: Singer']['rows'][0] = new StdClass();
  72. $expected['Job: Singer']['rows'][0]->views_test_name = 'John';
  73. $expected['Job: Singer']['rows'][0]->views_test_job = 'Singer';
  74. $expected['Job: Singer']['rows'][0]->views_test_id = '1';
  75. $expected['Job: Singer']['rows'][1] = new StdClass();
  76. $expected['Job: Singer']['rows'][1]->views_test_name = 'George';
  77. $expected['Job: Singer']['rows'][1]->views_test_job = 'Singer';
  78. $expected['Job: Singer']['rows'][1]->views_test_id = '2';
  79. $expected['Job: Drummer'] = array();
  80. $expected['Job: Drummer']['group'] = 'Job: Drummer';
  81. $expected['Job: Drummer']['rows'][2] = new StdClass();
  82. $expected['Job: Drummer']['rows'][2]->views_test_name = 'Ringo';
  83. $expected['Job: Drummer']['rows'][2]->views_test_job = 'Drummer';
  84. $expected['Job: Drummer']['rows'][2]->views_test_id = '3';
  85. // The newer api passes the value of the grouping as well.
  86. $sets_new_rendered = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], TRUE);
  87. $sets_new_value = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], FALSE);
  88. $this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper group the results with grouping by the rendered output.'));
  89. // Reorder the group structure to group by value.
  90. $expected['Singer'] = $expected['Job: Singer'];
  91. $expected['Drummer'] = $expected['Job: Drummer'];
  92. unset($expected['Job: Singer']);
  93. unset($expected['Job: Drummer']);
  94. $this->assertEqual($sets_new_value, $expected, t('The style plugins should proper group the results with grouping by the value.'));
  95. }
  96. function testGrouping() {
  97. $this->_testGrouping(FALSE);
  98. $this->_testGrouping(TRUE);
  99. }
  100. /**
  101. * Tests the grouping features of styles.
  102. */
  103. function _testGrouping($stripped = FALSE) {
  104. $view = $this->getBasicView();
  105. // Setup grouping by the job and the age field.
  106. $view->init_display();
  107. $view->init_style();
  108. $view->style_plugin->options['grouping'] = array(
  109. array('field' => 'job'),
  110. array('field' => 'age'),
  111. );
  112. // Reduce the amount of items to make the test a bit easier.
  113. // Set up the pager.
  114. $view->display['default']->handler->override_option('pager', array(
  115. 'type' => 'some',
  116. 'options' => array('items_per_page' => 3),
  117. ));
  118. // Add the job and age field.
  119. $view->display['default']->handler->override_option('fields', array(
  120. 'name' => array(
  121. 'id' => 'name',
  122. 'table' => 'views_test',
  123. 'field' => 'name',
  124. 'relationship' => 'none',
  125. ),
  126. 'job' => array(
  127. 'id' => 'job',
  128. 'table' => 'views_test',
  129. 'field' => 'job',
  130. 'relationship' => 'none',
  131. ),
  132. 'age' => array(
  133. 'id' => 'age',
  134. 'table' => 'views_test',
  135. 'field' => 'age',
  136. 'relationship' => 'none',
  137. ),
  138. ));
  139. // Now run the query and groupby the result.
  140. $this->executeView($view);
  141. $expected = array();
  142. $expected['Job: Singer'] = array();
  143. $expected['Job: Singer']['group'] = 'Job: Singer';
  144. $expected['Job: Singer']['rows']['Age: 25'] = array();
  145. $expected['Job: Singer']['rows']['Age: 25']['group'] = 'Age: 25';
  146. $expected['Job: Singer']['rows']['Age: 25']['rows'][0] = new StdClass();
  147. $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_name = 'John';
  148. $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_job = 'Singer';
  149. $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_age = '25';
  150. $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_id = '1';
  151. $expected['Job: Singer']['rows']['Age: 27'] = array();
  152. $expected['Job: Singer']['rows']['Age: 27']['group'] = 'Age: 27';
  153. $expected['Job: Singer']['rows']['Age: 27']['rows'][1] = new StdClass();
  154. $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_name = 'George';
  155. $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_job = 'Singer';
  156. $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_age = '27';
  157. $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_id = '2';
  158. $expected['Job: Drummer'] = array();
  159. $expected['Job: Drummer']['group'] = 'Job: Drummer';
  160. $expected['Job: Drummer']['rows']['Age: 28'] = array();
  161. $expected['Job: Drummer']['rows']['Age: 28']['group'] = 'Age: 28';
  162. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2] = new StdClass();
  163. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_name = 'Ringo';
  164. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_job = 'Drummer';
  165. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_age = '28';
  166. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_id = '3';
  167. // Alter the results to support the stripped case.
  168. if ($stripped) {
  169. // Add some html to the result and expected value.
  170. $rand = '<a data="' . $this->randomName() . '" />';
  171. $view->result[0]->views_test_job .= $rand;
  172. $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_job = 'Singer' . $rand;
  173. $expected['Job: Singer']['group'] = 'Job: Singer';
  174. $rand = '<a data="' . $this->randomName() . '" />';
  175. $view->result[1]->views_test_job .= $rand;
  176. $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_job = 'Singer' . $rand;
  177. $rand = '<a data="' . $this->randomName() . '" />';
  178. $view->result[2]->views_test_job .= $rand;
  179. $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_job = 'Drummer' . $rand;
  180. $expected['Job: Drummer']['group'] = 'Job: Drummer';
  181. $view->style_plugin->options['grouping'][0] = array('field' => 'job', 'rendered' => TRUE, 'rendered_strip' => TRUE);
  182. $view->style_plugin->options['grouping'][1] = array('field' => 'age', 'rendered' => TRUE, 'rendered_strip' => TRUE);
  183. }
  184. // The newer api passes the value of the grouping as well.
  185. $sets_new_rendered = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], TRUE);
  186. $this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper group the results with grouping by the rendered output.'));
  187. // Don't test stripped case, because the actual value is not stripped.
  188. if (!$stripped) {
  189. $sets_new_value = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], FALSE);
  190. // Reorder the group structure to grouping by value.
  191. $expected['Singer'] = $expected['Job: Singer'];
  192. $expected['Singer']['rows']['25'] = $expected['Job: Singer']['rows']['Age: 25'];
  193. $expected['Singer']['rows']['27'] = $expected['Job: Singer']['rows']['Age: 27'];
  194. $expected['Drummer'] = $expected['Job: Drummer'];
  195. $expected['Drummer']['rows']['28'] = $expected['Job: Drummer']['rows']['Age: 28'];
  196. unset($expected['Job: Singer']);
  197. unset($expected['Singer']['rows']['Age: 25']);
  198. unset($expected['Singer']['rows']['Age: 27']);
  199. unset($expected['Job: Drummer']);
  200. unset($expected['Drummer']['rows']['Age: 28']);
  201. $this->assertEqual($sets_new_value, $expected, t('The style plugins should proper group the results with grouping by the value.'));
  202. }
  203. }
  204. /**
  205. * Tests custom css classes.
  206. */
  207. function testCustomRowClasses() {
  208. $view = $this->getBasicView();
  209. // Setup some random css class.
  210. $view->init_display();
  211. $view->init_style();
  212. $random_name = drupal_html_class($this->randomName());
  213. $view->style_plugin->options['row_class'] = $random_name . " test-token-[name]";
  214. $rendered_output = $view->preview();
  215. $this->storeViewPreview($rendered_output);
  216. $rows = $this->elements->body->div->div->div;
  217. $count = 0;
  218. foreach ($rows as $row) {
  219. $attributes = $row->attributes();
  220. $class = (string) $attributes['class'][0];
  221. $this->assertTrue(strpos($class, $random_name) !== FALSE, 'Take sure that a custom css class is added to the output.');
  222. // Check token replacement.
  223. $name = drupal_html_class($view->field['name']->get_value($view->result[$count]));
  224. $this->assertTrue(strpos($class, "test-token-$name") !== FALSE, 'Take sure that a token in custom css class is replaced.');
  225. $count++;
  226. }
  227. }
  228. }