16c000204SPatrick Brown<?php 26c000204SPatrick Brown 36c000204SPatrick Brownclass io_replaceinfile_test extends DokuWikiTest { 46c000204SPatrick Brown 5*9a734b7aSChristopher Smith protected $contents = "The\012Delete\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012"; 6*9a734b7aSChristopher Smith 76c000204SPatrick Brown /* 86c000204SPatrick Brown * dependency for tests needing zlib extension to pass 96c000204SPatrick Brown */ 106c000204SPatrick Brown public function test_ext_zlib() { 116c000204SPatrick Brown if (!extension_loaded('zlib')) { 126c000204SPatrick Brown $this->markTestSkipped('skipping all zlib tests. Need zlib extension'); 136c000204SPatrick Brown } 146c000204SPatrick Brown } 156c000204SPatrick Brown 166c000204SPatrick Brown /* 176c000204SPatrick Brown * dependency for tests needing zlib extension to pass 186c000204SPatrick Brown */ 196c000204SPatrick Brown public function test_ext_bz2() { 206c000204SPatrick Brown if (!extension_loaded('bz2')) { 216c000204SPatrick Brown $this->markTestSkipped('skipping all bzip2 tests. Need bz2 extension'); 226c000204SPatrick Brown } 236c000204SPatrick Brown } 246c000204SPatrick Brown 256c000204SPatrick Brown function _write($file){ 26*9a734b7aSChristopher Smith 27*9a734b7aSChristopher Smith io_saveFile($file, $this->contents); 286c000204SPatrick Brown // Replace one, no regex 296c000204SPatrick Brown $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete00\012", false, 1)); 306c000204SPatrick Brown $this->assertEquals("The\012Delete00\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012", io_readFile($file)); 316c000204SPatrick Brown // Replace all, no regex 326c000204SPatrick Brown $this->assertTrue(io_replaceInFile($file, "Delete\012", "DeleteX\012", false, -1)); 336c000204SPatrick Brown $this->assertEquals("The\012Delete00\012DeleteX\012Delete01\012Delete02\012DeleteX\012DeleteX\012Test\012", io_readFile($file)); 346c000204SPatrick Brown // Replace two, regex and backreference 356c000204SPatrick Brown $this->assertTrue(io_replaceInFile($file, "#Delete(\\d+)\012#", "\\1\012", true, 2)); 366c000204SPatrick Brown $this->assertEquals("The\01200\012DeleteX\01201\012Delete02\012DeleteX\012DeleteX\012Test\012", io_readFile($file)); 376c000204SPatrick Brown // Delete and insert, no regex 386c000204SPatrick Brown $this->assertTrue(io_replaceInFile($file, "DeleteX\012", "Replace\012", false, 0)); 396c000204SPatrick Brown $this->assertEquals("The\01200\01201\012Delete02\012Test\012Replace\012", io_readFile($file)); 406c000204SPatrick Brown } 416c000204SPatrick Brown 426c000204SPatrick Brown function test_replace(){ 436c000204SPatrick Brown $this->_write(TMP_DIR.'/test.txt'); 446c000204SPatrick Brown } 456c000204SPatrick Brown 46*9a734b7aSChristopher Smith 476c000204SPatrick Brown /** 486c000204SPatrick Brown * @depends test_ext_zlib 496c000204SPatrick Brown */ 506c000204SPatrick Brown function test_gzwrite(){ 516c000204SPatrick Brown $this->_write(TMP_DIR.'/test.txt.gz'); 526c000204SPatrick Brown } 536c000204SPatrick Brown 546c000204SPatrick Brown /** 556c000204SPatrick Brown * @depends test_ext_bz2 566c000204SPatrick Brown */ 576c000204SPatrick Brown function test_bzwrite(){ 586c000204SPatrick Brown $this->_write(TMP_DIR.'/test.txt.bz2'); 596c000204SPatrick Brown } 606c000204SPatrick Brown 61*9a734b7aSChristopher Smith /** 62*9a734b7aSChristopher Smith * 63*9a734b7aSChristopher Smith */ 64*9a734b7aSChristopher Smith function test_edgecase1() 65*9a734b7aSChristopher Smith { 66*9a734b7aSChristopher Smith $file = TMP_DIR . '/test.txt'; 67*9a734b7aSChristopher Smith // Replace all, no regex, backreference like construct in replacement line 68*9a734b7aSChristopher Smith io_saveFile($file, $this->contents); 69*9a734b7aSChristopher Smith $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete\\00\012", false, -1)); 70*9a734b7aSChristopher Smith $this->assertEquals("The\012Delete\\00\012Delete\\00\012Delete01\012Delete02\012Delete\\00\012DeleteX\012Test\012", io_readFile($file), "Edge case: backreference like construct in replacement line"); 71*9a734b7aSChristopher Smith } 72*9a734b7aSChristopher Smith /** 73*9a734b7aSChristopher Smith * @small 74*9a734b7aSChristopher Smith */ 75*9a734b7aSChristopher Smith function test_edgecase2() { 76*9a734b7aSChristopher Smith $file = TMP_DIR.'/test.txt'; 77*9a734b7aSChristopher Smith // Replace all, no regex, replacement line == search line 78*9a734b7aSChristopher Smith io_saveFile($file, $this->contents); 79*9a734b7aSChristopher Smith $this->assertTrue(io_replaceInFile($file, "Delete\012", "Delete\012", false, -1)); 80*9a734b7aSChristopher Smith $this->assertEquals("The\012Delete\012Delete\012Delete01\012Delete02\012Delete\012DeleteX\012Test\012", io_readFile($file), "Edge case: new line the same as old line"); 81*9a734b7aSChristopher Smith } 826c000204SPatrick Brown} 83