@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 108 lines 2.7 kB view raw
1<?php 2 3final class AphrontHTTPHeaderParserTestCase extends PhutilTestCase { 4 5 public function testHeaderParser() { 6 $cases = array( 7 array( 8 'Key: x; y; z', 9 'Key', 10 'x; y; z', 11 array( 12 array('x', null), 13 array('y', null), 14 array('z', null), 15 ), 16 ), 17 array( 18 'Content-Disposition: form-data; name="label"', 19 'Content-Disposition', 20 'form-data; name="label"', 21 array( 22 array('form-data', null), 23 array('name', 'label'), 24 ), 25 ), 26 array( 27 'Content-Type: multipart/form-data; charset=utf-8', 28 'Content-Type', 29 'multipart/form-data; charset=utf-8', 30 array( 31 array('multipart/form-data', null), 32 array('charset', 'utf-8'), 33 ), 34 ), 35 array( 36 'Content-Type: application/octet-stream; charset="ut', 37 'Content-Type', 38 'application/octet-stream; charset="ut', 39 false, 40 ), 41 array( 42 'Content-Type: multipart/form-data; boundary=ABCDEFG', 43 'Content-Type', 44 'multipart/form-data; boundary=ABCDEFG', 45 array( 46 array('multipart/form-data', null), 47 array('boundary', 'ABCDEFG'), 48 ), 49 ), 50 array( 51 'Content-Type: multipart/form-data; boundary="ABCDEFG"', 52 'Content-Type', 53 'multipart/form-data; boundary="ABCDEFG"', 54 array( 55 array('multipart/form-data', null), 56 array('boundary', 'ABCDEFG'), 57 ), 58 ), 59 ); 60 61 foreach ($cases as $case) { 62 $input = $case[0]; 63 $expect_name = $case[1]; 64 $expect_content = $case[2]; 65 66 $parser = id(new AphrontHTTPHeaderParser()) 67 ->parseRawHeader($input); 68 69 $actual_name = $parser->getHeaderName(); 70 $actual_content = $parser->getHeaderContent(); 71 72 $this->assertEqual( 73 $expect_name, 74 $actual_name, 75 pht('Header name for: %s', $input)); 76 77 $this->assertEqual( 78 $expect_content, 79 $actual_content, 80 pht('Header content for: %s', $input)); 81 82 if (isset($case[3])) { 83 $expect_pairs = $case[3]; 84 85 $caught = null; 86 try { 87 $actual_pairs = $parser->getHeaderContentAsPairs(); 88 } catch (Exception $ex) { 89 $caught = $ex; 90 } 91 92 if ($expect_pairs === false) { 93 $this->assertEqual( 94 true, 95 ($caught instanceof Exception), 96 pht('Expect exception for header pairs of: %s', $input)); 97 } else { 98 $this->assertEqual( 99 $expect_pairs, 100 $actual_pairs, 101 pht('Header pairs for: %s', $input)); 102 } 103 } 104 } 105 } 106 107 108}