Skip to content

Commit

Permalink
Fixes last items for #1665.
Browse files Browse the repository at this point in the history
- Changes double quotes to single quotes.
- Documents and tests array-based string replace.
- Rewrites test case.

Rewrites the test case because the tests didn't work as well as
they should be. The test file copied itself to the tmp directory,
did some string replace stuff on it and then loaded the data to
test its contents. However in those contents were also the
expectations, so assertContains() would always see the string in
the file... even if the replacing didn't work.

Closes #1665.
  • Loading branch information
Phally committed Oct 26, 2013
1 parent 98e11ce commit 9260a78
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
20 changes: 17 additions & 3 deletions lib/Cake/Test/Case/Utility/FileTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -569,18 +569,32 @@ protected function _getTmpFile($paintSkip = true) {
* @return void
*/
public function testReplaceText() {
$TestFile = new File(__FILE__);
$TestFile = new File(dirname(__FILE__) . '/../../test_app/Vendor/welcome.php');
$TmpFile = new File(TMP . 'tests' . DS . 'cakephp.file.test.tmp');

// Copy the test file to the temporary location
$TestFile->copy($TmpFile->path, true);

// Replace the contents of the tempory file
$result = $TmpFile->replaceText("* testReplaceText method", "* testReplaceText method passed");
$result = $TmpFile->replaceText('welcome.php', 'welcome.tmp');
$this->assertTrue($result);

// Double check
$expected = 'This is the welcome.tmp file in vendors directory';
$contents = $TmpFile->read();
$this->assertContains($expected, $contents);

$search = array('This is the', 'welcome.php file', 'in tmp directory');
$replace = array('This should be a', 'welcome.tmp file', 'in the Lib directory');

// Replace the contents of the tempory file
$result = $TmpFile->replaceText($search, $replace);
$this->assertTrue($result);

// Double check
$expected = 'This should be a welcome.tmp file in vendors directory';
$contents = $TmpFile->read();
$this->assertContains("* testReplaceText method passed", $contents);
$this->assertContains($expected, $contents);

$TmpFile->delete();
}
Expand Down
11 changes: 6 additions & 5 deletions lib/Cake/Utility/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -588,13 +588,14 @@ public function clearStatCache($all = false) {
}

/**
* Searches for a given text and replaces the text if found
* @param string $search
* @param string $replace
* Searches for a given text and replaces the text if found.
*
* @param string|array $search Text(s) to search for.
* @param string|array $replace Text(s) to replace with.
* @return boolean Success
*/
public function replaceText($search, $replace) {
if (!$this->open("r+")) {
if (!$this->open('r+')) {
return false;
}

Expand All @@ -604,7 +605,7 @@ public function replaceText($search, $replace) {
}
}

$replaced = $this->write(str_replace($search, $replace, $this->read()), "w", true);
$replaced = $this->write(str_replace($search, $replace, $this->read()), 'w', true);

if ($this->lock !== null) {
flock($this->handle, LOCK_UN);
Expand Down

0 comments on commit 9260a78

Please sign in to comment.