BUG Fixed issue with Deprecation failing to extract the module from a stacktrace, especially on non-unix systems

API Added Convert::nl2os function to normalise end of line characters across systems with tests
BUG Fixed i18n unit tests in non-unix systems constantly failing
BUG Fixed problems with HTMLCleaner tests failing in non-unix systems
This commit is contained in:
Damian Mooyman 2012-10-16 17:10:54 +13:00
parent 28dce229a3
commit 0d7816b55d
7 changed files with 70 additions and 10 deletions

View File

@ -317,4 +317,15 @@ class Convert {
$f = URLSegmentFilter::create(); $f = URLSegmentFilter::create();
return $f->filter($title); return $f->filter($title);
} }
/**
* Normalises newline sequences to conform to (an) OS specific format.
* @param string $data Text containing potentially mixed formats of newline
* sequences including \r, \r\n, \n, or unicode newline characters
* @param string $nl The newline sequence to normalise to. Defaults to that
* specified by the current OS
*/
public static function nl2os($data, $nl = PHP_EOL) {
return preg_replace('~\R~u', $nl, $data);
}
} }

View File

@ -93,6 +93,8 @@ class TidyHTMLCleaner extends HTMLCleaner {
public function cleanHTML($content) { public function cleanHTML($content) {
$tidy = new tidy(); $tidy = new tidy();
$output = $tidy->repairString($content, $this->config); $output = $tidy->repairString($content, $this->config);
return $output;
// Clean leading/trailing whitespace
return preg_replace('/(^\s+)|(\s+$)/', '', $output);
} }
} }

View File

@ -86,11 +86,11 @@ class Deprecation {
protected static function get_calling_module_from_trace($backtrace) { protected static function get_calling_module_from_trace($backtrace) {
if (!isset($backtrace[1]['file'])) return; if (!isset($backtrace[1]['file'])) return;
$callingfile = $backtrace[1]['file']; $callingfile = realpath($backtrace[1]['file']);
global $manifest; global $manifest;
foreach ($manifest->getModules() as $name => $path) { foreach ($manifest->getModules() as $name => $path) {
if (strpos($callingfile, $path) === 0) { if (strpos($callingfile, realpath($path)) === 0) {
return $name; return $name;
} }
} }

View File

@ -522,7 +522,8 @@ class i18nTextCollector_Writer_Php implements i18nTextCollector_Writer {
$php .= (count($entitySpec) == 1) ? var_export($entitySpec[0], true) : var_export($entitySpec, true); $php .= (count($entitySpec) == 1) ? var_export($entitySpec[0], true) : var_export($entitySpec, true);
$php .= ";$eol"; $php .= ";$eol";
return $php; // Normalise linebreaks due to fix var_export output
return Convert::nl2os($php, $eol);
} }
} }

View File

@ -139,5 +139,51 @@ class ConvertTest extends SapphireTest {
$this->assertEquals('foos-bar-2', Convert::raw2url('foo\'s [bar] (2)')); $this->assertEquals('foos-bar-2', Convert::raw2url('foo\'s [bar] (2)'));
URLSegmentFilter::$default_allow_multibyte = $orig; URLSegmentFilter::$default_allow_multibyte = $orig;
} }
/**
* Helper function for comparing characters with significant whitespaces
* @param type $expected
* @param type $actual
*/
protected function assertEqualsQuoted($expected, $actual) {
$message = sprintf(
"Expected \"%s\" but given \"%s\"",
addcslashes($expected, "\r\n"),
addcslashes($actual, "\r\n")
);
$this->assertEquals($expected, $actual, $message);
}
public function testNL2OS() {
foreach(array("\r\n", "\r", "\n") as $nl) {
// Base case: no action
$this->assertEqualsQuoted(
"Base case",
Convert::nl2os("Base case", $nl)
);
// Mixed formats
$this->assertEqualsQuoted(
"Test{$nl}Text{$nl}Is{$nl}{$nl}Here{$nl}.",
Convert::nl2os("Test\rText\r\nIs\n\rHere\r\n.", $nl)
);
// Test that multiple runs are non-destructive
$expected = "Test{$nl}Text{$nl}Is{$nl}{$nl}Here{$nl}.";
$this->assertEqualsQuoted(
$expected,
Convert::nl2os($expected, $nl)
);
// Check repeated sequence behaves correctly
$expected = "{$nl}{$nl}{$nl}{$nl}{$nl}{$nl}{$nl}{$nl}";
$input = "\r\r\n\r\r\n\n\n\n\r";
$this->assertEqualsQuoted(
$expected,
Convert::nl2os($input, $nl)
);
}
}
} }

View File

@ -11,13 +11,13 @@ class HTMLCleanerTest extends SapphireTest {
if ($cleaner) { if ($cleaner) {
$this->assertEquals( $this->assertEquals(
$cleaner->cleanHTML('<p>wrong <b>nesting</i></p>' . "\n"), $cleaner->cleanHTML('<p>wrong <b>nesting</i></p>'),
'<p>wrong <b>nesting</b></p>' . "\n", '<p>wrong <b>nesting</b></p>',
"HTML cleaned properly" "HTML cleaned properly"
); );
$this->assertEquals( $this->assertEquals(
$cleaner->cleanHTML('<p>unclosed paragraph' . "\n"), $cleaner->cleanHTML('<p>unclosed paragraph'),
'<p>unclosed paragraph</p>' . "\n", '<p>unclosed paragraph</p>',
"HTML cleaned properly" "HTML cleaned properly"
); );
} else { } else {

View File

@ -413,7 +413,7 @@ de:
OtherEntityName: 'Other Text' OtherEntityName: 'Other Text'
YAML; YAML;
$this->assertEquals($yaml, $writer->getYaml($entities, 'de')); $this->assertEquals($yaml, Convert::nl2os($writer->getYaml($entities, 'de')));
} }
public function testCollectFromIncludedTemplates() { public function testCollectFromIncludedTemplates() {