Page MenuHomePhabricator

D11176.id31691.diff
No OneTemporary

D11176.id31691.diff

diff --git a/src/lint/ArcanistLintMessage.php b/src/lint/ArcanistLintMessage.php
--- a/src/lint/ArcanistLintMessage.php
+++ b/src/lint/ArcanistLintMessage.php
@@ -72,7 +72,7 @@
}
public function setLine($line) {
- $this->line = $line;
+ $this->line = (int)$line;
return $this;
}
@@ -81,7 +81,7 @@
}
public function setChar($char) {
- $this->char = $char;
+ $this->char = (int)$char;
return $this;
}
diff --git a/src/lint/linter/__tests__/ArcanistLinterTestCase.php b/src/lint/linter/__tests__/ArcanistLinterTestCase.php
--- a/src/lint/linter/__tests__/ArcanistLinterTestCase.php
+++ b/src/lint/linter/__tests__/ArcanistLinterTestCase.php
@@ -121,8 +121,8 @@
$linter->addPath($path_name);
$linter->addData($path_name, $data);
-
- foreach (idx($config, 'config', array()) as $key => $value) {
+ $config = idx($config, 'config', array());
+ foreach ($config as $key => $value) {
$linter->setLinterConfigurationValue($key, $value);
}
@@ -175,81 +175,123 @@
$this->compareTransform($xform, $after_lint);
}
- private function compareLint($file, $expect, ArcanistLintResult $result) {
- $seen = array();
- $raised = array();
- $message_map = array();
-
- foreach ($result->getMessages() as $message) {
- $sev = $message->getSeverity();
- $line = $message->getLine();
- $char = $message->getChar();
- $code = $message->getCode();
- $name = $message->getName();
- $message_key = $sev.':'.$line.':'.$char;
- $message_map[$message_key] = $message;
- $seen[] = $message_key;
- $raised[] = sprintf(
- ' %s: %s %s',
- pht('%s at line %d, char %d', $sev, $line, $char),
- $code,
- $name);
- }
+ private function compareLint($file, $expect, ArcanistLintResult $results) {
+ $expected_results = new ArcanistLintResult();
+
$expect = trim($expect);
if ($expect) {
$expect = explode("\n", $expect);
} else {
$expect = array();
}
- foreach ($expect as $key => $expected) {
- $expect[$key] = head(explode(' ', $expected));
- }
+ foreach ($expect as $result) {
+ $parts = explode(':', $result);
+
+ $message = new ArcanistLintMessage();
- $expect = array_fill_keys($expect, true);
- $seen = array_fill_keys($seen, true);
+ if ($severity = idx($parts, 0)) {
+ $message->setSeverity($severity);
+ }
+
+ if ($line = idx($parts, 1)) {
+ $message->setLine((int)$line);
+ }
+ if ($char = idx($parts, 2)) {
+ $message->setChar((int)$char);
+ }
+ if ($code = idx($parts, 3)) {
+ $message->setCode($code);
+ }
- if (!$raised) {
- $raised = array(pht('No messages.'));
+ $expected_results->addMessage($message);
}
- $raised = sprintf(
- "%s:\n%s",
- pht('Actually raised'),
- implode("\n", $raised));
- foreach (array_diff_key($expect, $seen) as $missing => $ignored) {
- $missing = explode(':', $missing);
- $sev = array_shift($missing);
- $pos = $missing;
+ $missing = array();
+ $surprising = $results->getMessages();
- $this->assertFailure(
- pht(
- "In '%s', expected lint to raise %s on line %d at char %d, ".
- "but no %s was raised. %s",
- $file,
- $sev,
- idx($pos, 0),
- idx($pos, 1),
- $sev,
- $raised));
+ // TODO: Make this more efficient.
+ foreach ($expected_results->getMessages() as $expected_message) {
+ $found = false;
+
+ foreach ($results->getMessages() as $ii => $actual_message) {
+ if (!self::compareLintMessageProperty(
+ $expected_message->getSeverity(),
+ $actual_message->getSeverity())) {
+
+ continue;
+ }
+
+ if (!self::compareLintMessageProperty(
+ $expected_message->getLine(),
+ $actual_message->getLine())) {
+
+ continue;
+ }
+
+ if (!self::compareLintMessageProperty(
+ $expected_message->getChar(),
+ $actual_message->getChar())) {
+
+ continue;
+ }
+
+ if (!self::compareLintMessageProperty(
+ $expected_message->getCode(),
+ $actual_message->getCode())) {
+
+ continue;
+ }
+
+ $found = true;
+ unset($surprising[$ii]);
+ }
+
+ if (!$found) {
+ $missing[] = $expected_message;
+ }
}
- foreach (array_diff_key($seen, $expect) as $surprising => $ignored) {
- $message = $message_map[$surprising];
- $message_info = $message->getDescription();
+ if ($missing || $surprising) {
+ $expected = 'Expected to raise';
+ if ($missing) {
+ foreach ($missing as $message) {
+ $expected .= sprintf(
+ "\n %s: %s %s",
+ pht(
+ '%s at line %d, char %d',
+ $message->getSeverity(),
+ $message->getLine(),
+ $message->getChar()),
+ $message->getCode(),
+ $message->getName());
+ }
+ } else {
+ $expected .= sprintf("\n %s", pht('No messages'));
+ }
+
+ $actual = 'Actually raised';
+ if ($surprising) {
+ foreach ($surprising as $message) {
+ $actual .= sprintf(
+ "\n %s: %s %s",
+ pht(
+ '%s at line %d, char %d',
+ $message->getSeverity(),
+ $message->getLine(),
+ $message->getChar()),
+ $message->getCode(),
+ $message->getName());
+ }
+ } else {
+ $actual .= sprintf("\n %s", pht('No messages'));
+ }
- list($sev, $line, $char) = explode(':', $surprising);
$this->assertFailure(
sprintf(
- "%s:\n\n%s\n\n%s",
- pht(
- "In '%s', lint raised %s on line %d at char %d, ".
- "but nothing was expected",
- $file,
- $sev,
- $line,
- $char),
- $message_info,
- $raised));
+ "%s\n\n%s\n\n%s",
+ pht("Lint failed for '%s'.", $file),
+ $expected,
+ $actual));
}
}
@@ -263,4 +305,18 @@
pht('File as patched by lint did not match the expected patched file.'));
}
+ /**
+ * Compare properties of @{class:ArcanistLintMessage} instances.
+ *
+ * The expectation is that if one (or both) of the properties is null, then
+ * we don't care about its value.
+ *
+ * @param wild
+ * @param wild
+ * @return bool
+ */
+ private static function compareLintMessageProperty($x, $y) {
+ return $x === null || $y === null || $x === $y;
+ }
+
}
diff --git a/src/lint/linter/__tests__/text/bad-charset.lint-test b/src/lint/linter/__tests__/text/bad-charset.lint-test
--- a/src/lint/linter/__tests__/text/bad-charset.lint-test
+++ b/src/lint/linter/__tests__/text/bad-charset.lint-test
@@ -1,3 +1,3 @@
❤♎☀★☂♞
~~~~~~~~~~
-error:1:1
+error:1:1:TXT5
diff --git a/src/lint/linter/__tests__/text/bof-whitespace-1.lint-test b/src/lint/linter/__tests__/text/bof-whitespace-1.lint-test
--- a/src/lint/linter/__tests__/text/bof-whitespace-1.lint-test
+++ b/src/lint/linter/__tests__/text/bof-whitespace-1.lint-test
@@ -4,6 +4,6 @@
The quick brown fox jumps over the lazy dog.
~~~~~~~~~~
-autofix:1:1
+autofix:1:1;TXT8
~~~~~~~~~~
The quick brown fox jumps over the lazy dog.
diff --git a/src/lint/linter/__tests__/text/dos-newline.lint-test b/src/lint/linter/__tests__/text/dos-newline.lint-test
--- a/src/lint/linter/__tests__/text/dos-newline.lint-test
+++ b/src/lint/linter/__tests__/text/dos-newline.lint-test
@@ -1,7 +1,7 @@
The quick brown fox
jumps over the lazy dog.
~~~~~~~~~~
-error:1:1
+error:1:1:TXT1
~~~~~~~~~~
The quick brown fox
jumps over the lazy dog.
diff --git a/src/lint/linter/__tests__/text/eof-whitespace.lint-test b/src/lint/linter/__tests__/text/eof-whitespace.lint-test
--- a/src/lint/linter/__tests__/text/eof-whitespace.lint-test
+++ b/src/lint/linter/__tests__/text/eof-whitespace.lint-test
@@ -4,6 +4,6 @@
~~~~~~~~~~
-autofix:2:1
+autofix:2:1:TXT9
~~~~~~~~~~
The quick brown fox jumps over the lazy dog.
diff --git a/src/lint/linter/__tests__/text/line-wrap.lint-test b/src/lint/linter/__tests__/text/line-wrap.lint-test
--- a/src/lint/linter/__tests__/text/line-wrap.lint-test
+++ b/src/lint/linter/__tests__/text/line-wrap.lint-test
@@ -1,6 +1,6 @@
The quick brown fox jumps over the lazy dog.
~~~~~~~~~~
-warning:1:1
+warning:1:1:TXT3
~~~~~~~~~~
~~~~~~~~~~
{"config": {"text.max-line-length": 40}}
diff --git a/src/lint/linter/__tests__/text/trailing-whitespace.lint-test b/src/lint/linter/__tests__/text/trailing-whitespace.lint-test
--- a/src/lint/linter/__tests__/text/trailing-whitespace.lint-test
+++ b/src/lint/linter/__tests__/text/trailing-whitespace.lint-test
@@ -1,8 +1,8 @@
The quick brown fox
jumps over the lazy dog.
~~~~~~~~~~
-autofix:1:20
-autofix:2:25
+autofix:1:20:TXT6
+autofix:2:25:TXT6
~~~~~~~~~~
The quick brown fox
jumps over the lazy dog.

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 13, 2:37 AM (13 h, 32 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7601127
Default Alt Text
D11176.id31691.diff (8 KB)

Event Timeline