1<?php 2 3use dokuwiki\ChangeLog\ChangeLog; 4use dokuwiki\ChangeLog\PageChangeLog; 5 6/** 7 * Tests for requesting revisioninfo of a revision of a page with getRevisionInfo() 8 * 9 * This class uses the files: 10 * - data/pages/mailinglist.txt 11 * - data/meta/mailinglist.changes 12 */ 13class changelog_getrelativerevision_test extends DokuWikiTest { 14 15 private $logline = "1362525899 127.0.0.1 E mailinglist pubcie [Data entry] \n"; 16 private $pageid = 'mailinglist'; 17 18 function setup() : void { 19 parent::setup(); 20 global $cache_revinfo; 21 $cache =& $cache_revinfo; 22 unset($cache['nonexist']); 23 unset($cache['mailinglist']); 24 } 25 26 /** 27 * no nonexist.changes meta file available 28 */ 29 function test_changemetadatanotexists() { 30 $rev = 1362525899; 31 $dir = 1; 32 $id = 'nonexist'; 33 $revsexpected = false; 34 35 $pagelog = new PageChangeLog($id, $chunk_size = 8192); 36 $revs = $pagelog->getRelativeRevision($rev, $dir); 37 $this->assertEquals($revsexpected, $revs); 38 } 39 40 /** 41 * no nonexist.changes meta file available 42 */ 43 function test_nodirection() { 44 $rev = 1362525899; 45 $dir = 0; 46 $revsexpected = false; 47 48 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 49 $revs = $pagelog->getRelativeRevision($rev, $dir); 50 $this->assertEquals($revsexpected, $revs); 51 } 52 53 /** 54 * start at exact current revision of mailinglist page 55 * 56 */ 57 function test_startatexactcurrentrev() { 58 $rev = 1385051947; 59 $dir = 1; 60 $revsexpectedpos = false; 61 $revsexpectedneg = 1374261194; 62 63 //set a known timestamp 64 touch(wikiFN($this->pageid), $rev); 65 66 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 67 $revs = $pagelog->getRelativeRevision($rev, $dir); 68 $this->assertEquals($revsexpectedpos, $revs); 69 70 $revs = $pagelog->getRelativeRevision($rev, -$dir); 71 $this->assertEquals($revsexpectedneg, $revs); 72 } 73 74 /** 75 * start at exact last revision of mailinglist page 76 * 77 */ 78 function test_startatexactlastrev() { 79 $rev = 1360110636; 80 $dir = 1; 81 $revsexpectedpos = 1361901536; 82 $revsexpectedneg = false; 83 84 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 85 $revs = $pagelog->getRelativeRevision($rev, $dir); 86 $this->assertEquals($revsexpectedpos, $revs); 87 88 $revs = $pagelog->getRelativeRevision($rev, -$dir); 89 $this->assertEquals($revsexpectedneg, $revs); 90 } 91 92 /** 93 * start at exact one before last revision of mailinglist page 94 * 95 */ 96 function test_requestlastrevisions() { 97 $rev = 1361901536; 98 $dir = -1; 99 $revsexpectedlast = 1360110636; 100 $revsexpectedbeforelast = false; 101 102 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 103 $revs = $pagelog->getRelativeRevision($rev, $dir); 104 $this->assertEquals($revsexpectedlast, $revs); 105 106 $revs = $pagelog->getRelativeRevision($rev, 2 * $dir); 107 $this->assertEquals($revsexpectedbeforelast, $revs); 108 } 109 110 /** 111 * request existing rev and check cache 112 */ 113 function test_requestrev_checkcache() { 114 $rev = 1362525359; 115 $dir = 1; 116 $revexpected = 1362525899; 117 $infoexpected = ChangeLog::parseLogLine($this->logline); 118 119 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 120 $revfound = $pagelog->getRelativeRevision($rev, $dir); 121 $this->assertEquals($revexpected, $revfound); 122 123 //checked info returned from cache 124 $info = $pagelog->getRevisionInfo($revfound); 125 $this->assertEquals($infoexpected, $info); 126 } 127 128 /** 129 * request existing rev 130 */ 131 function test_requestnextrev() { 132 $rev = 1362525899; 133 134 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 135 136 $dir = 1; 137 $revexpected = 1362525926; 138 $revfound = $pagelog->getRelativeRevision($rev, $dir); 139 $this->assertEquals($revexpected, $revfound); 140 141 $dir = 2; 142 $revexpected = 1362526039; 143 $revfound = $pagelog->getRelativeRevision($rev, $dir); 144 $this->assertEquals($revexpected, $revfound); 145 146 $dir = -1; 147 $revexpected = 1362525359; 148 $revfound = $pagelog->getRelativeRevision($rev, $dir); 149 $this->assertEquals($revexpected, $revfound); 150 151 $dir = -2; 152 $revexpected = 1362525145; 153 $revfound = $pagelog->getRelativeRevision($rev, $dir); 154 $this->assertEquals($revexpected, $revfound); 155 } 156 157 /** 158 * request existing rev with chucked reading 159 */ 160 function test_requestnextrev_chuncked() { 161 $rev = 1362525899; 162 163 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 164 165 $dir = 1; 166 $revexpected = 1362525926; 167 $revfound = $pagelog->getRelativeRevision($rev, $dir); 168 $this->assertEquals($revexpected, $revfound); 169 170 $dir = 2; 171 $revexpected = 1362526039; 172 $revfound = $pagelog->getRelativeRevision($rev, $dir); 173 $this->assertEquals($revexpected, $revfound); 174 175 $dir = -1; 176 $revexpected = 1362525359; 177 $revfound = $pagelog->getRelativeRevision($rev, $dir); 178 $this->assertEquals($revexpected, $revfound); 179 180 $dir = -2; 181 $revexpected = 1362525145; 182 $revfound = $pagelog->getRelativeRevision($rev, $dir); 183 $this->assertEquals($revexpected, $revfound); 184 } 185 186 187 /** 188 * request existing rev with chucked reading, chunk size smaller than line length 189 */ 190 function test_requestnextrev_chunkshorterthanlines() { 191 $rev = 1362525899; 192 193 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 194 195 $dir = 1; 196 $revexpected = 1362525926; 197 $revfound = $pagelog->getRelativeRevision($rev, $dir); 198 $this->assertEquals($revexpected, $revfound); 199 200 $dir = 2; 201 $revexpected = 1362526039; 202 $revfound = $pagelog->getRelativeRevision($rev, $dir); 203 $this->assertEquals($revexpected, $revfound); 204 205 $dir = -1; 206 $revexpected = 1362525359; 207 $revfound = $pagelog->getRelativeRevision($rev, $dir); 208 $this->assertEquals($revexpected, $revfound); 209 210 $dir = -2; 211 $revexpected = 1362525145; 212 $revfound = $pagelog->getRelativeRevision($rev, $dir); 213 $this->assertEquals($revexpected, $revfound); 214 } 215 216 /** 217 * request existing rev 218 */ 219 function test_requestnextfifthrev() { 220 $rev = 1362525899; 221 $dir = 5; 222 $revexpected = 1362526767; 223 224 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 225 $revfound = $pagelog->getRelativeRevision($rev, $dir); 226 $this->assertEquals($revexpected, $revfound); 227 } 228 229 /** 230 * request existing rev with chucked reading 231 */ 232 function test_requestnextfifthrev_chuncked() { 233 $rev = 1362525899; 234 $dir = 5; 235 $revexpected = 1362526767; 236 237 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 238 $revfound = $pagelog->getRelativeRevision($rev, $dir); 239 $this->assertEquals($revexpected, $revfound); 240 } 241 242 /** 243 * request existing rev 244 */ 245 function test_requestprevrev() { 246 $rev = 1362525899; 247 $dir1 = -1; 248 $dir5 = -5; 249 $revexpected1 = 1362525359; 250 $revexpected5 = 1360110636; 251 252 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 253 $revfound1 = $pagelog->getRelativeRevision($rev, $dir1); 254 $this->assertEquals($revexpected1, $revfound1); 255 256 $revfound5 = $pagelog->getRelativeRevision($rev, $dir5); 257 $this->assertEquals($revexpected5, $revfound5); 258 } 259 260 /** 261 * request existing rev with chucked reading 262 */ 263 function test_requestprevrev_chuncked() { 264 $rev = 1362525899; 265 $dir1 = -1; 266 $dir5 = -5; 267 $revexpected1 = 1362525359; 268 $revexpected5 = 1360110636; 269 270 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 271 $revfound1 = $pagelog->getRelativeRevision($rev, $dir1); 272 $this->assertEquals($revexpected1, $revfound1); 273 274 $revfound5 = $pagelog->getRelativeRevision($rev, $dir5); 275 $this->assertEquals($revexpected5, $revfound5); 276 } 277 278 /** 279 * request after recentest version in changelog 280 */ 281 function test_requestrecentestlogline_next() { 282 $rev = 1374261194; 283 $dir = 1; 284 $revexpected = false; 285 286 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 287 $revfound = $pagelog->getRelativeRevision($rev, $dir); 288 $this->assertEquals($revexpected, $revfound); 289 } 290 291 /** 292 * request after recentest version in changelog, with chuncked reading 293 */ 294 function test_requestrecentestlogline_next_chuncked() { 295 $rev = 1374261194; 296 $dir = 1; 297 $revexpected = false; 298 299 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 300 $revfound = $pagelog->getRelativeRevision($rev, $dir); 301 $this->assertEquals($revexpected, $revfound); 302 } 303 304 /** 305 * request before current version 306 */ 307 function test_requestrecentestlogline_prev() { 308 $rev = 1374261194; 309 $dir = -1; 310 $revexpected = 1371579614; 311 312 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 313 $revfound = $pagelog->getRelativeRevision($rev, $dir); 314 $this->assertEquals($revexpected, $revfound); 315 } 316 317 /** 318 * request before current version, with chuncked reading 319 */ 320 function test_requestrecentestlogline_prev_chuncked() { 321 $rev = 1374261194; 322 $dir = -1; 323 $revexpected = 1371579614; 324 325 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 326 $revfound = $pagelog->getRelativeRevision($rev, $dir); 327 $this->assertEquals($revexpected, $revfound); 328 } 329 330 /** 331 * Request negative revision 332 * looks in positive direction, so it catches the oldest revision 333 */ 334 function test_negativerev_posdir() { 335 $rev = -10; 336 $dir = 1; 337 $revexpected = 1360110636; 338 339 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 340 $revfound = $pagelog->getRelativeRevision($rev, $dir); 341 $this->assertEquals($revexpected, $revfound); 342 } 343 344 /** 345 * Request negative revision 346 * looks in negative direction, but there is nothing 347 */ 348 function test_negativerev_negdir() { 349 $rev = -10; 350 $dir = -1; 351 $revexpected = false; 352 353 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 354 $revfound = $pagelog->getRelativeRevision($rev, $dir); 355 $this->assertEquals($revexpected, $revfound); 356 } 357 358 /** 359 * Start at non existing revision somewhere between existing revisions 360 */ 361 function test_startatnotexistingrev_next() { 362 $rev = 1362525890; 363 $dir = 1; 364 $revexpected = 1362525899; 365 366 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 367 $revfound = $pagelog->getRelativeRevision($rev, $dir); 368 $this->assertEquals($revexpected, $revfound); 369 } 370 371 /** 372 * Start at non existing revision somewhere between existing revisions 373 */ 374 function test_startatnotexistingrev_prev() { 375 $rev = 1362525890; 376 $dir = -1; 377 $revexpected = 1362525359; 378 379 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 380 $revfound = $pagelog->getRelativeRevision($rev, $dir); 381 $this->assertEquals($revexpected, $revfound); 382 } 383 384 function test_iscurrentpagerevision() { 385 $rev = 1385051947; 386 $currentexpected = true; 387 388 //set a known timestamp 389 touch(wikiFN($this->pageid), $rev); 390 391 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 392 $current = $pagelog->isCurrentRevision($rev); 393 $this->assertEquals($currentexpected, $current); 394 } 395 396 function test_isnotcurrentpagerevision() { 397 $rev = 1385051947; 398 $not_current_rev = $rev - 1; 399 $currentexpected = false; 400 401 //set a known timestamp 402 touch(wikiFN($this->pageid), $rev); 403 404 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 405 $current = $pagelog->isCurrentRevision($not_current_rev); 406 $this->assertEquals($currentexpected, $current); 407 } 408 409 function test_notexistingcurrentpage() { 410 $rev = 1385051947; 411 $currentexpected = false; 412 413 $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192); 414 $current = $pagelog->isCurrentRevision($rev); 415 $this->assertEquals($currentexpected, $current); 416 } 417} 418