@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
at upstream/main 147 lines 4.0 kB view raw
1<?php 2 3final class DiffusionURITestCase extends PhutilTestCase { 4 5 public function testBlobDecode() { 6 $map = array( 7 // This is a basic blob. 8 'branch/path.ext;abc$3' => array( 9 'branch' => 'branch', 10 'path' => 'path.ext', 11 'commit' => 'abc', 12 'line' => '3', 13 ), 14 'branch/path.ext$3' => array( 15 'branch' => 'branch', 16 'path' => 'path.ext', 17 'line' => '3', 18 ), 19 'branch/money;;/$$100' => array( 20 'branch' => 'branch', 21 'path' => 'money;/$100', 22 ), 23 'a%252Fb/' => array( 24 'branch' => 'a/b', 25 ), 26 'branch/path/;Version-1_0_0' => array( 27 'branch' => 'branch', 28 'path' => 'path/', 29 'commit' => 'Version-1_0_0', 30 ), 31 'branch/path/;$$moneytag$$' => array( 32 'branch' => 'branch', 33 'path' => 'path/', 34 'commit' => '$moneytag$', 35 ), 36 'branch/path/semicolon;;;;;$$;;semicolon;;$$$$$100' => array( 37 'branch' => 'branch', 38 'path' => 'path/semicolon;;', 39 'commit' => '$;;semicolon;;$$', 40 'line' => '100', 41 ), 42 'branch/path.ext;abc$3-5,7-12,14' => array( 43 'branch' => 'branch', 44 'path' => 'path.ext', 45 'commit' => 'abc', 46 'line' => '3-5,7-12,14', 47 ), 48 ); 49 50 foreach ($map as $input => $expect) { 51 52 // Simulate decode effect of the webserver. 53 $input = rawurldecode($input); 54 55 $expect = $expect + array( 56 'branch' => null, 57 'path' => null, 58 'commit' => null, 59 'line' => null, 60 ); 61 $expect = array_select_keys( 62 $expect, 63 array('branch', 'path', 'commit', 'line')); 64 65 $actual = $this->parseBlob($input); 66 67 $this->assertEqual( 68 $expect, 69 $actual, 70 pht("Parsing '%s'", $input)); 71 } 72 } 73 74 public function testBlobDecodeFail() { 75 $this->tryTestCaseMap( 76 array( 77 'branch/path/../../../secrets/secrets.key' => false, 78 ), 79 array($this, 'parseBlob')); 80 } 81 82 public function parseBlob($blob) { 83 return DiffusionRequest::parseRequestBlob( 84 $blob, 85 $supports_branches = true); 86 } 87 88 public function testURIGeneration() { 89 $actor = PhabricatorUser::getOmnipotentUser(); 90 91 $repository = PhabricatorRepository::initializeNewRepository($actor) 92 ->setCallsign('A') 93 ->makeEphemeral(); 94 95 $map = array( 96 '/diffusion/A/browse/branch/path.ext;abc$1' => array( 97 'action' => 'browse', 98 'branch' => 'branch', 99 'path' => 'path.ext', 100 'commit' => 'abc', 101 'line' => '1', 102 ), 103 '/diffusion/A/browse/a%252Fb/path.ext' => array( 104 'action' => 'browse', 105 'branch' => 'a/b', 106 'path' => 'path.ext', 107 ), 108 '/diffusion/A/browse/%2B/%20%21' => array( 109 'action' => 'browse', 110 'path' => '+/ !', 111 ), 112 '/diffusion/A/browse/money/%24%24100$2' => array( 113 'action' => 'browse', 114 'path' => 'money/$100', 115 'line' => '2', 116 ), 117 '/diffusion/A/browse/path/to/file.ext?view=things' => array( 118 'action' => 'browse', 119 'path' => 'path/to/file.ext', 120 'params' => array( 121 'view' => 'things', 122 ), 123 ), 124 '/diffusion/A/repository/master/' => array( 125 'action' => 'branch', 126 'branch' => 'master', 127 ), 128 'path/to/file.ext;abc' => array( 129 'action' => 'rendering-ref', 130 'path' => 'path/to/file.ext', 131 'commit' => 'abc', 132 ), 133 '/diffusion/A/browse/branch/path.ext$3-5%2C7-12%2C14' => array( 134 'action' => 'browse', 135 'branch' => 'branch', 136 'path' => 'path.ext', 137 'line' => '3-5,7-12,14', 138 ), 139 ); 140 141 foreach ($map as $expect => $input) { 142 $actual = $repository->generateURI($input); 143 $this->assertEqual($expect, (string)$actual); 144 } 145 } 146 147}