TreeHelperTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. App::uses('TreeHelper', 'Tools.View/Helper');
  3. App::uses('MyCakeTestCase', 'Tools.TestSuite');
  4. App::uses('View', 'View');
  5. class TreeHelperTest extends MyCakeTestCase {
  6. public $fixtures = array('core.after_tree');
  7. public $Model;
  8. public function setUp() {
  9. parent::setUp();
  10. $this->Tree = new TreeHelper(new View(null));
  11. $this->Model = ClassRegistry::init('AfterTree');
  12. $this->Model->Behaviors->attach('Tree');
  13. $this->Model->truncate();
  14. $data = array(
  15. array('name' => 'One'),
  16. array('name' => 'Two'),
  17. array('name' => 'Three'),
  18. array('name' => 'Four'),
  19. array('name' => 'One-SubA', 'parent_id' => 1),
  20. array('name' => 'Two-SubA', 'parent_id' => 2),
  21. array('name' => 'Four-SubA', 'parent_id' => 4),
  22. array('name' => 'Two-SubA-1', 'parent_id' => 6),
  23. array('name' => 'Two-SubA-1-1', 'parent_id' => 8),
  24. );
  25. foreach ($data as $row) {
  26. $this->Model->create();
  27. $this->Model->save($row);
  28. }
  29. }
  30. public function tearDown() {
  31. parent::tearDown();
  32. }
  33. public function testObject() {
  34. $this->assertTrue(is_a($this->Tree, 'TreeHelper'));
  35. }
  36. public function testGenerate() {
  37. $tree = $this->Model->find('threaded');
  38. $output = $this->Tree->generate($tree);
  39. $expected = <<<TEXT
  40. <ul>
  41. <li>One
  42. <ul>
  43. <li>One-SubA</li>
  44. </ul>
  45. </li>
  46. <li>Two
  47. <ul>
  48. <li>Two-SubA
  49. <ul>
  50. <li>Two-SubA-1
  51. <ul>
  52. <li>Two-SubA-1-1</li>
  53. </ul>
  54. </li>
  55. </ul>
  56. </li>
  57. </ul>
  58. </li>
  59. <li>Three</li>
  60. <li>Four
  61. <ul>
  62. <li>Four-SubA</li>
  63. </ul>
  64. </li>
  65. </ul>
  66. TEXT;
  67. $this->assertTextEquals($expected, $output);
  68. $this->assertTrue(substr_count($output, '<ul>') === substr_count($output, '</ul>'));
  69. $this->assertTrue(substr_count($output, '<li>') === substr_count($output, '</li>'));
  70. }
  71. public function testGenerateWithSettings() {
  72. $tree = $this->Model->find('threaded');
  73. $output = $this->Tree->generate($tree, array('class' => 'navi', 'id' => 'main', 'type' => 'ol'));
  74. $expected = <<<TEXT
  75. <ol class="navi" id="main">
  76. <li>One
  77. <ol>
  78. <li>One-SubA</li>
  79. </ol>
  80. </li>
  81. <li>Two
  82. <ol>
  83. <li>Two-SubA
  84. <ol>
  85. <li>Two-SubA-1
  86. <ol>
  87. <li>Two-SubA-1-1</li>
  88. </ol>
  89. </li>
  90. </ol>
  91. </li>
  92. </ol>
  93. </li>
  94. <li>Three</li>
  95. <li>Four
  96. <ol>
  97. <li>Four-SubA</li>
  98. </ol>
  99. </li>
  100. </ol>
  101. TEXT;
  102. $this->assertTextEquals($expected, $output);
  103. }
  104. public function testGenerateWithMaxDepth() {
  105. $tree = $this->Model->find('threaded');
  106. $output = $this->Tree->generate($tree, array('maxDepth' => 2));
  107. $expected = <<<TEXT
  108. <ul>
  109. <li>One
  110. <ul>
  111. <li>One-SubA</li>
  112. </ul>
  113. </li>
  114. <li>Two
  115. <ul>
  116. <li>Two-SubA
  117. <ul>
  118. <li>Two-SubA-1</li>
  119. </ul>
  120. </li>
  121. </ul>
  122. </li>
  123. <li>Three</li>
  124. <li>Four
  125. <ul>
  126. <li>Four-SubA</li>
  127. </ul>
  128. </li>
  129. </ul>
  130. TEXT;
  131. $this->assertTextEquals($expected, $output);
  132. }
  133. public function testGenerateWithAutoPath() {
  134. $tree = $this->Model->find('threaded');
  135. debug($tree);
  136. $output = $this->Tree->generate($tree, array('autoPath' => array(7, 10))); // Two-SubA-1
  137. debug($output);
  138. $expected = <<<TEXT
  139. <ul>
  140. <li>One
  141. <ul>
  142. <li>One-SubA</li>
  143. </ul>
  144. </li>
  145. <li class="active">Two
  146. <ul>
  147. <li class="active">Two-SubA
  148. <ul>
  149. <li class="active">Two-SubA-1
  150. <ul>
  151. <li>Two-SubA-1-1</li>
  152. </ul>
  153. </li>
  154. </ul>
  155. </li>
  156. </ul>
  157. </li>
  158. <li>Three</li>
  159. <li>Four
  160. <ul>
  161. <li>Four-SubA</li>
  162. </ul>
  163. </li>
  164. </ul>
  165. TEXT;
  166. $this->assertTextEquals($expected, $output);
  167. $output = $this->Tree->generate($tree, array('autoPath' => array(8, 9))); // Two-SubA-1-1
  168. debug($output);
  169. $expected = <<<TEXT
  170. <ul>
  171. <li>One
  172. <ul>
  173. <li>One-SubA</li>
  174. </ul>
  175. </li>
  176. <li class="active">Two
  177. <ul>
  178. <li class="active">Two-SubA
  179. <ul>
  180. <li class="active">Two-SubA-1
  181. <ul>
  182. <li class="active">Two-SubA-1-1</li>
  183. </ul>
  184. </li>
  185. </ul>
  186. </li>
  187. </ul>
  188. </li>
  189. <li>Three</li>
  190. <li>Four
  191. <ul>
  192. <li>Four-SubA</li>
  193. </ul>
  194. </li>
  195. </ul>
  196. TEXT;
  197. $this->assertTextEquals($expected, $output);
  198. }
  199. }