1<?php 2 3namespace dokuwiki\plugin\simplenavi\test; 4 5use DokuWikiTest; 6use TestRequest; 7 8/** 9 * General tests for the simplenavi plugin 10 * 11 * @author Michael Große <grosse@cosmocode.de> 12 * 13 * @group plugin_simplenavi 14 * @group plugins 15 */ 16class SimplenaviTest extends DokuWikiTest 17{ 18 19 protected $pluginsEnabled = array('simplenavi'); 20 21 public function setUp(): void 22 { 23 parent::setUp(); 24 saveWikiText('sidebar', '{{simplenavi>}}', 'create test sidebar'); 25 26 $pages = [ 27 ['namespace1:foo', 'Namespace 1 Foo'], 28 ['namespace1:start', 'ZZZ Namespace 1 Start'], 29 ['namespace2:foo', 'Namespace 2 Foo'], 30 ['namespace2', 'Namespace 2 Start'], 31 ['namespace12:foo', 'Namespace 12 Foo'], 32 ['namespace12:start', 'Namespace 12 Start'], 33 ['namespace123:namespace123', 'AAA Namespace 123 Start'], 34 ['namespace123:foo', 'Namespace 123 Foo'], 35 ['namespace123:deep:start', 'Namespace 123 Deep Start'], 36 ['namespace123:deep:foo', 'Namespace 123 Deep Foo'], 37 ['namespace21:foo', 'Namespace 21 Foo'], 38 ['namespace21:start', 'Namespace 21 Start'], 39 ]; 40 41 foreach ($pages as $page) { 42 saveWikiText('simplenavi:' . $page[0], '====== ' . $page[1] . ' ======', 'create test page'); 43 } 44 45 } 46 47 public function dataProvider() { 48 49 yield [ 50 'set' => 'by ID, all branches closed', 51 'titlesort' => false, 52 'natsort' => false, 53 'current' => 'simplenavi', 54 'expect' => [ 55 'simplenavi:namespace1:start', 56 'simplenavi:namespace12:start', 57 'simplenavi:namespace123:namespace123', 58 'simplenavi:namespace2', 59 'simplenavi:namespace21:start', 60 ] 61 ]; 62 63 yield [ 64 'set' => 'by ID, Natural Sort, all branches closed', 65 'titlesort' => false, 66 'natsort' => true, 67 'current' => 'simplenavi', 68 'expect' => [ 69 'simplenavi:namespace1:start', 70 'simplenavi:namespace2', 71 'simplenavi:namespace12:start', 72 'simplenavi:namespace21:start', 73 'simplenavi:namespace123:namespace123', 74 ] 75 ]; 76 77 yield [ 78 'set' => 'by ID, branch open', 79 'titlesort' => false, 80 'natsort' => false, 81 'current' => 'simplenavi:namespace123:deep:foo', 82 'expect' => [ 83 'simplenavi:namespace1:start', 84 'simplenavi:namespace12:start', 85 'simplenavi:namespace123:namespace123', 86 'simplenavi:namespace123:deep:start', 87 'simplenavi:namespace123:deep:foo', 88 'simplenavi:namespace123:foo', 89 'simplenavi:namespace2', 90 'simplenavi:namespace21:start', 91 ] 92 ]; 93 94 yield [ 95 'set' => 'by ID, Natural Sort, branch open', 96 'titlesort' => false, 97 'natsort' => true, 98 'current' => 'simplenavi:namespace123:deep:foo', 99 'expect' => [ 100 'simplenavi:namespace1:start', 101 'simplenavi:namespace2', 102 'simplenavi:namespace12:start', 103 'simplenavi:namespace21:start', 104 'simplenavi:namespace123:namespace123', 105 'simplenavi:namespace123:deep:start', 106 'simplenavi:namespace123:deep:foo', 107 'simplenavi:namespace123:foo', 108 ] 109 ]; 110 111 yield [ 112 'set' => 'by Title, all branches closed', 113 'titlesort' => true, 114 'natsort' => false, 115 'current' => 'simplenavi', 116 'expect' => [ 117 'simplenavi:namespace123:namespace123', 118 'simplenavi:namespace12:start', 119 'simplenavi:namespace2', 120 'simplenavi:namespace21:start', 121 'simplenavi:namespace1:start', 122 ] 123 ]; 124 125 yield [ 126 'set' => 'by Title, Natural Search, all branches closed', 127 'titlesort' => true, 128 'natsort' => true, 129 'current' => 'simplenavi', 130 'expect' => [ 131 'simplenavi:namespace123:namespace123', 132 'simplenavi:namespace2', 133 'simplenavi:namespace12:start', 134 'simplenavi:namespace21:start', 135 'simplenavi:namespace1:start', 136 ] 137 ]; 138 139 yield [ 140 'set' => 'by Title, branch open', 141 'titlesort' => true, 142 'natsort' => false, 143 'current' => 'simplenavi:namespace123:deep:foo', 144 'expect' => [ 145 'simplenavi:namespace123:namespace123', 146 'simplenavi:namespace123:deep:start', 147 'simplenavi:namespace123:deep:foo', 148 'simplenavi:namespace123:foo', 149 'simplenavi:namespace12:start', 150 'simplenavi:namespace2', 151 'simplenavi:namespace21:start', 152 'simplenavi:namespace1:start', 153 ] 154 ]; 155 156 yield [ 157 'set' => 'by Title, Natural Sort, branch open', 158 'titlesort' => true, 159 'natsort' => true, 160 'current' => 'simplenavi:namespace123:deep:foo', 161 'expect' => [ 162 'simplenavi:namespace123:namespace123', 163 'simplenavi:namespace123:deep:start', 164 'simplenavi:namespace123:deep:foo', 165 'simplenavi:namespace123:foo', 166 'simplenavi:namespace2', 167 'simplenavi:namespace12:start', 168 'simplenavi:namespace21:start', 169 'simplenavi:namespace1:start', 170 ] 171 ]; 172 173 } 174 175 /** 176 * @dataProvider dataProvider 177 */ 178 public function testSorting($set, $titlesort, $natsort, $current, $expect) 179 { 180 $simpleNavi = new \syntax_plugin_simplenavi(); 181 $items = $simpleNavi->getSortedItems('simplenavi', $current, $titlesort, $natsort); 182 $this->assertSame($expect, array_column($items, 'id'), $set); 183 } 184 185} 186 187 188 189