TreeHelperTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. //TODO: fixme: the root ul/li elements should also be marked active...
  72. public function testGenerateWithAutoPath() {
  73. $tree = $this->Model->find('threaded');
  74. $output = $this->Tree->generate($tree, array('autoPath' => array(7, 10))); // Two-SubA-1
  75. debug($output);
  76. $expected = <<<TEXT
  77. <ul>
  78. <li>One
  79. <ul>
  80. <li>One-SubA</li>
  81. </ul>
  82. </li>
  83. <li>Two
  84. <ul class="active">
  85. <li class="active">Two-SubA
  86. <ul class="active">
  87. <li class="active">Two-SubA-1
  88. <ul>
  89. <li>Two-SubA-1-1</li>
  90. </ul>
  91. </li>
  92. </ul>
  93. </li>
  94. </ul>
  95. </li>
  96. <li>Three</li>
  97. <li>Four
  98. <ul>
  99. <li>Four-SubA</li>
  100. </ul>
  101. </li>
  102. </ul>
  103. TEXT;
  104. $this->assertTextEquals($expected, $output);
  105. $output = $this->Tree->generate($tree, array('autoPath' => array(8, 9))); // Two-SubA-1-1
  106. debug($output);
  107. $expected = <<<TEXT
  108. <ul>
  109. <li>One
  110. <ul>
  111. <li>One-SubA</li>
  112. </ul>
  113. </li>
  114. <li>Two
  115. <ul class="active">
  116. <li class="active">Two-SubA
  117. <ul class="active">
  118. <li class="active">Two-SubA-1
  119. <ul class="active">
  120. <li class="active">Two-SubA-1-1</li>
  121. </ul>
  122. </li>
  123. </ul>
  124. </li>
  125. </ul>
  126. </li>
  127. <li>Three</li>
  128. <li>Four
  129. <ul>
  130. <li>Four-SubA</li>
  131. </ul>
  132. </li>
  133. </ul>
  134. TEXT;
  135. $this->assertTextEquals($expected, $output);
  136. }
  137. }