@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 118 lines 3.3 kB view raw
1<?php 2 3final class DifferentialParseRenderTestCase extends PhabricatorTestCase { 4 5 private function getTestDataDirectory() { 6 return dirname(__FILE__).'/data/'; 7 } 8 9 public function testParseRender() { 10 $dir = $this->getTestDataDirectory(); 11 foreach (Filesystem::listDirectory($dir, $show_hidden = false) as $file) { 12 if (!preg_match('/\.diff$/', $file)) { 13 continue; 14 } 15 $data = Filesystem::readFile($dir.$file); 16 17 // Strip trailing "~" characters from inputs so they may contain 18 // trailing whitespace. 19 $data = preg_replace('/~$/m', '', $data); 20 21 $opt_file = $dir.$file.'.options'; 22 if (Filesystem::pathExists($opt_file)) { 23 $options = Filesystem::readFile($opt_file); 24 try { 25 $options = phutil_json_decode($options); 26 } catch (PhutilJSONParserException $ex) { 27 throw new Exception( 28 pht('Invalid options file: %s.', $opt_file), 29 0, 30 $ex); 31 } 32 } else { 33 $options = array(); 34 } 35 36 foreach (array('one', 'two') as $type) { 37 $this->runParser($type, $data, $file, 'expect'); 38 $this->runParser($type, $data, $file, 'unshielded'); 39 } 40 } 41 } 42 43 private function runParser($type, $data, $file, $extension) { 44 $dir = $this->getTestDataDirectory(); 45 $test_file = $dir.$file.'.'.$type.'.'.$extension; 46 if (!Filesystem::pathExists($test_file)) { 47 return; 48 } 49 50 $unshielded = false; 51 switch ($extension) { 52 case 'unshielded': 53 $unshielded = true; 54 break; 55 } 56 57 $parsers = $this->buildChangesetParsers($type, $data, $file); 58 $actual = $this->renderParsers($parsers, $unshielded); 59 $expect = Filesystem::readFile($test_file); 60 61 $this->assertEqual($expect, $actual, basename($test_file)); 62 } 63 64 private function renderParsers(array $parsers, $unshield) { 65 $result = array(); 66 foreach ($parsers as $parser) { 67 if ($unshield) { 68 $s_range = 0; 69 $e_range = 0xFFFF; 70 } else { 71 $s_range = null; 72 $e_range = null; 73 } 74 75 $result[] = $parser->render($s_range, $e_range, array()); 76 } 77 return implode(str_repeat('~', 80)."\n", $result); 78 } 79 80 private function buildChangesetParsers($type, $data, $file) { 81 $parser = new ArcanistDiffParser(); 82 $changes = $parser->parseDiff($data); 83 84 $diff = DifferentialDiff::newFromRawChanges( 85 PhabricatorUser::getOmnipotentUser(), 86 $changes); 87 88 $changesets = $diff->getChangesets(); 89 90 $engine = new PhabricatorMarkupEngine(); 91 $engine->setViewer(new PhabricatorUser()); 92 93 $viewstate = new PhabricatorChangesetViewState(); 94 95 $parsers = array(); 96 foreach ($changesets as $changeset) { 97 $cparser = id(new DifferentialChangesetParser()) 98 ->setViewer(new PhabricatorUser()) 99 ->setDisableCache(true) 100 ->setChangeset($changeset) 101 ->setMarkupEngine($engine) 102 ->setViewState($viewstate); 103 104 if ($type == 'one') { 105 $cparser->setRenderer(new DifferentialChangesetOneUpTestRenderer()); 106 } else if ($type == 'two') { 107 $cparser->setRenderer(new DifferentialChangesetTwoUpTestRenderer()); 108 } else { 109 throw new Exception(pht('Unknown renderer type "%s"!', $type)); 110 } 111 112 $parsers[] = $cparser; 113 } 114 115 return $parsers; 116 } 117 118}