Changeset View
Changeset View
Standalone View
Standalone View
src/utils/__tests__/PhutilProseDiffTestCase.php
Show First 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | $this->assertProseParts( | ||||
array( | array( | ||||
'= ', | '= ', | ||||
'- aaa', | '- aaa', | ||||
'+ bbb', | '+ bbb', | ||||
'= ', | '= ', | ||||
), | ), | ||||
pht('Whole word rewrite with whitespace prefix and suffix.')); | pht('Whole word rewrite with whitespace prefix and suffix.')); | ||||
$this->assertSummaryProseParts( | |||||
"a\nb\nc\nd\ne\nf\ng\nh\n", | |||||
"a\nb\nc\nd\nX\nf\ng\nh\n", | |||||
array( | |||||
'.', | |||||
"= d\n", | |||||
'- e', | |||||
'+ X', | |||||
"= \nf", | |||||
'.', | |||||
), | |||||
pht('Summary diff with middle change.')); | |||||
$this->assertSummaryProseParts( | |||||
"a\nb\nc\nd\ne\nf\ng\nh\n", | |||||
"X\nb\nc\nd\ne\nf\ng\nh\n", | |||||
array( | |||||
'- a', | |||||
'+ X', | |||||
"= \nb", | |||||
'.', | |||||
), | |||||
pht('Summary diff with head change.')); | |||||
$this->assertSummaryProseParts( | |||||
"a\nb\nc\nd\ne\nf\ng\nh\n", | |||||
"a\nb\nc\nd\ne\nf\ng\nX\n", | |||||
array( | |||||
'.', | |||||
"= g\n", | |||||
'- h', | |||||
'+ X', | |||||
"= \n", | |||||
), | |||||
pht('Summary diff with last change.')); | |||||
} | } | ||||
private function assertProseParts($old, $new, array $expect_parts, $label) { | private function assertProseParts($old, $new, array $expect_parts, $label) { | ||||
$engine = new PhutilProseDifferenceEngine(); | $engine = new PhutilProseDifferenceEngine(); | ||||
$diff = $engine->getDiff($old, $new); | $diff = $engine->getDiff($old, $new); | ||||
$parts = $diff->getParts(); | $parts = $diff->getParts(); | ||||
$this->assertParts($expect_parts, $parts, $label); | |||||
} | |||||
private function assertSummaryProseParts( | |||||
$old, | |||||
$new, | |||||
array $expect_parts, | |||||
$label) { | |||||
$engine = new PhutilProseDifferenceEngine(); | |||||
$diff = $engine->getDiff($old, $new); | |||||
$parts = $diff->getSummaryParts(); | |||||
$this->assertParts($expect_parts, $parts, $label); | |||||
} | |||||
private function assertParts( | |||||
array $expect, | |||||
array $actual_parts, | |||||
$label) { | |||||
$actual = array(); | $actual = array(); | ||||
foreach ($parts as $part) { | foreach ($actual_parts as $actual_part) { | ||||
$actual[] = $part['type'].' '.$part['text']; | $type = $actual_part['type']; | ||||
$text = $actual_part['text']; | |||||
switch ($type) { | |||||
case '.': | |||||
$actual[] = $type; | |||||
break; | |||||
default: | |||||
$actual[] = "{$type} {$text}"; | |||||
break; | |||||
} | |||||
} | } | ||||
$this->assertEqual($expect_parts, $actual, $label); | $this->assertEqual($expect, $actual, $label); | ||||
} | } | ||||
} | } |