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