Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php
12262 views
1
<?php
2
3
final class DifferentialCommitMessageParserTestCase
4
extends PhabricatorTestCase {
5
6
public function testDifferentialCommitMessageParser() {
7
$dir = dirname(__FILE__).'/messages/';
8
$list = Filesystem::listDirectory($dir, $include_hidden = false);
9
foreach ($list as $file) {
10
if (!preg_match('/.txt$/', $file)) {
11
continue;
12
}
13
14
$data = Filesystem::readFile($dir.$file);
15
$divider = "~~~~~~~~~~\n";
16
$parts = explode($divider, $data);
17
if (count($parts) !== 4) {
18
throw new Exception(
19
pht(
20
'Expected test file "%s" to contain four parts (message, fields, '.
21
'output, errors) divided by "%s".',
22
$file,
23
'~~~~~~~~~~'));
24
}
25
26
list($message, $fields, $output, $errors) = $parts;
27
$fields = phutil_json_decode($fields);
28
$output = phutil_json_decode($output);
29
$errors = phutil_json_decode($errors);
30
31
$parser = id(new DifferentialCommitMessageParser())
32
->setLabelMap($fields)
33
->setTitleKey('title')
34
->setSummaryKey('summary');
35
36
$result_output = $parser->parseCorpus($message);
37
$result_errors = $parser->getErrors();
38
39
$this->assertEqual($output, $result_output);
40
$this->assertEqual($errors, $result_errors);
41
}
42
}
43
44
45
public function testDifferentialCommitMessageFieldParser() {
46
$message = <<<EOMESSAGE
47
This is the title.
48
49
Summary: This is the summary.
50
EOMESSAGE;
51
52
$fields = array(
53
new DifferentialTitleCommitMessageField(),
54
new DifferentialSummaryCommitMessageField(),
55
);
56
57
$expect = array(
58
DifferentialTitleCommitMessageField::FIELDKEY =>
59
'This is the title.',
60
DifferentialSummaryCommitMessageField::FIELDKEY =>
61
'This is the summary.',
62
);
63
64
$parser = id(new DifferentialCommitMessageParser())
65
->setCommitMessageFields($fields)
66
->setTitleKey(DifferentialTitleCommitMessageField::FIELDKEY)
67
->setSummaryKey(DifferentialSummaryCommitMessageField::FIELDKEY);
68
69
$actual = $parser->parseFields($message);
70
71
$this->assertEqual($expect, $actual);
72
}
73
74
public function testDifferentialCommitMessageParserNormalization() {
75
$map = array(
76
'Test Plan' => 'test plan',
77
'REVIEWERS' => 'reviewers',
78
'sUmmArY' => 'summary',
79
);
80
81
foreach ($map as $input => $expect) {
82
$this->assertEqual(
83
$expect,
84
DifferentialCommitMessageParser::normalizeFieldLabel($input),
85
pht('Field normalization of label "%s".', $input));
86
}
87
}
88
89
}
90
91