Skip to content
Browse files

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
  • Loading branch information...
1 parent 28dce22 commit 0d7816b55d07f51c3347d539350f445bff8c64ba @tractorcow tractorcow committed
View
11 core/Convert.php
@@ -317,4 +317,15 @@ public static function raw2url($title) {
$f = URLSegmentFilter::create();
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
4 core/HTMLCleaner.php
@@ -93,6 +93,8 @@ class TidyHTMLCleaner extends HTMLCleaner {
public function cleanHTML($content) {
$tidy = new tidy();
$output = $tidy->repairString($content, $this->config);
- return $output;
+
+ // Clean leading/trailing whitespace
+ return preg_replace('/(^\s+)|(\s+$)/', '', $output);
}
}
View
4 dev/Deprecation.php
@@ -86,11 +86,11 @@ public static function notification_version($ver, $forModule = null) {
protected static function get_calling_module_from_trace($backtrace) {
if (!isset($backtrace[1]['file'])) return;
- $callingfile = $backtrace[1]['file'];
+ $callingfile = realpath($backtrace[1]['file']);
global $manifest;
foreach ($manifest->getModules() as $name => $path) {
- if (strpos($callingfile, $path) === 0) {
+ if (strpos($callingfile, realpath($path)) === 0) {
return $name;
}
}
View
3 i18n/i18nTextCollector.php
@@ -522,7 +522,8 @@ public function langArrayCodeForEntitySpec($entityFullName, $entitySpec, $locale
$php .= (count($entitySpec) == 1) ? var_export($entitySpec[0], true) : var_export($entitySpec, true);
$php .= ";$eol";
- return $php;
+ // Normalise linebreaks due to fix var_export output
+ return Convert::nl2os($php, $eol);
}
}
View
48 tests/core/ConvertTest.php
@@ -139,5 +139,51 @@ public function testRaw2URL() {
$this->assertEquals('foos-bar-2', Convert::raw2url('foo\'s [bar] (2)'));
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
8 tests/core/HTMLCleanerTest.php
@@ -11,13 +11,13 @@ public function testHTMLClean() {
if ($cleaner) {
$this->assertEquals(
- $cleaner->cleanHTML('<p>wrong <b>nesting</i></p>' . "\n"),
- '<p>wrong <b>nesting</b></p>' . "\n",
+ $cleaner->cleanHTML('<p>wrong <b>nesting</i></p>'),
+ '<p>wrong <b>nesting</b></p>',
"HTML cleaned properly"
);
$this->assertEquals(
- $cleaner->cleanHTML('<p>unclosed paragraph' . "\n"),
- '<p>unclosed paragraph</p>' . "\n",
+ $cleaner->cleanHTML('<p>unclosed paragraph'),
+ '<p>unclosed paragraph</p>',
"HTML cleaned properly"
);
} else {
View
2 tests/i18n/i18nTextCollectorTest.php
@@ -413,7 +413,7 @@ public function testYamlWriter() {
OtherEntityName: 'Other Text'
YAML;
- $this->assertEquals($yaml, $writer->getYaml($entities, 'de'));
+ $this->assertEquals($yaml, Convert::nl2os($writer->getYaml($entities, 'de')));
}
public function testCollectFromIncludedTemplates() {

0 comments on commit 0d7816b

Please sign in to comment.
Something went wrong with that request. Please try again.