Summary: Ref T2222. We have a hunk of logic that purely does text parsing here; separate it and get coverage on it. Test Plan: - Ran new unit tests. - Used `differential.parsecommitmessage`. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2222 Differential Revision: https://secure.phabricator.com/D8444
66 lines
1.9 KiB
PHP
66 lines
1.9 KiB
PHP
<?php
|
|
|
|
final class DifferentialCommitMessageParserTestCase
|
|
extends PhabricatorTestCase {
|
|
|
|
public function testDifferentialCommitMessageParser() {
|
|
$dir = dirname(__FILE__).'/messages/';
|
|
$list = Filesystem::listDirectory($dir, $include_hidden = false);
|
|
foreach ($list as $file) {
|
|
if (!preg_match('/.txt$/', $file)) {
|
|
continue;
|
|
}
|
|
|
|
$data = Filesystem::readFile($dir.$file);
|
|
$divider = "~~~~~~~~~~\n";
|
|
$parts = explode($divider, $data);
|
|
if (count($parts) !== 4) {
|
|
throw new Exception(
|
|
pht(
|
|
'Expected test file "%s" to contain four parts (message, fields, '.
|
|
'output, errors) divided by "~~~~~~~~~~".',
|
|
$file));
|
|
}
|
|
|
|
list($message, $fields, $output, $errors) = $parts;
|
|
$fields = phutil_json_decode($fields, null);
|
|
$output = phutil_json_decode($output, null);
|
|
$errors = phutil_json_decode($errors, null);
|
|
|
|
if ($fields === null || $output === null || $errors === null) {
|
|
throw new Exception(
|
|
pht(
|
|
'Expected test file "%s" to contain valid JSON in its sections.',
|
|
$file));
|
|
}
|
|
|
|
$parser = id(new DifferentialCommitMessageParser())
|
|
->setLabelMap($fields)
|
|
->setTitleKey('title')
|
|
->setSummaryKey('summary');
|
|
|
|
$result_output = $parser->parseCorpus($message);
|
|
$result_errors = $parser->getErrors();
|
|
|
|
$this->assertEqual($output, $result_output);
|
|
$this->assertEqual($errors, $result_errors);
|
|
}
|
|
}
|
|
|
|
public function testDifferentialCommitMessageParserNormalization() {
|
|
$map = array(
|
|
'Test Plan' => 'test plan',
|
|
'REVIEWERS' => 'reviewers',
|
|
'sUmmArY' => 'summary',
|
|
);
|
|
|
|
foreach ($map as $input => $expect) {
|
|
$this->assertEqual(
|
|
$expect,
|
|
DifferentialCommitMessageParser::normalizeFieldLabel($input),
|
|
pht('Field normalization of label "%s".', $input));
|
|
}
|
|
}
|
|
|
|
}
|