Changeset View
Changeset View
Standalone View
Standalone View
src/utils/__tests__/PhutilUtilsTestCase.php
Show First 20 Lines • Show All 876 Lines • ▼ Show 20 Lines | final class PhutilUtilsTestCase extends PhutilTestCase { | ||||
} | } | ||||
private function shuffleMap(array $map) { | private function shuffleMap(array $map) { | ||||
$keys = array_keys($map); | $keys = array_keys($map); | ||||
shuffle($keys); | shuffle($keys); | ||||
return array_select_keys($map, $keys); | return array_select_keys($map, $keys); | ||||
} | } | ||||
public function testQueryStringEncoding() { | |||||
$expect = array(); | |||||
// As a starting point, we expect every character to encode as an "%XX" | |||||
// escaped version. | |||||
foreach (range(0, 255) as $byte) { | |||||
$c = chr($byte); | |||||
$expect[$c] = sprintf('%%%02X', $byte); | |||||
} | |||||
// We expect these characters to not be escaped. | |||||
$ranges = array( | |||||
range('a', 'z'), | |||||
range('A', 'Z'), | |||||
range('0', '9'), | |||||
array('-', '.', '_', '~'), | |||||
); | |||||
foreach ($ranges as $range) { | |||||
foreach ($range as $preserve_char) { | |||||
$expect[$preserve_char] = $preserve_char; | |||||
} | |||||
} | |||||
foreach (range(0, 255) as $byte) { | |||||
$c = chr($byte); | |||||
$expect_c = $expect[$c]; | |||||
$expect_str = "{$expect_c}={$expect_c}"; | |||||
$actual_str = phutil_build_http_querystring(array($c => $c)); | |||||
$this->assertEqual( | |||||
$expect_str, | |||||
$actual_str, | |||||
pht('HTTP querystring for byte "%s".', sprintf('0x%02x', $byte))); | |||||
} | |||||
} | |||||
} | } |