diff --git a/src/utils/__tests__/PhutilUtilsTestCase.php b/src/utils/__tests__/PhutilUtilsTestCase.php --- a/src/utils/__tests__/PhutilUtilsTestCase.php +++ b/src/utils/__tests__/PhutilUtilsTestCase.php @@ -1070,4 +1070,45 @@ } } + + public function testStringCasting() { + $cases = array( + array(123, '123', 'number'), + array(null, '', 'null to empty string'), + array('text', 'text', 'string'), + array(17.4, '17.4', 'float'), + array(true, '1', 'boolean true (well done php?)'), + array(false, '', 'boolean false (to empty string)'), + array(0, '0', 'zero (int)'), + array(0.0, '0', 'zero (float'), + ); + + $exception_cases = array( + array(array(), 'array'), + ); + + foreach ($cases as $test_case) { + list($input, $expected_output, $test_name) = $test_case; + + $actual = phutil_string_cast($input); + + $this->assertEqual($expected_output, $actual, $test_name); + } + + + $expect_exceptions = array('Exception'); + foreach ($exception_cases as $test_case) { + list($input, $test_name) = $test_case; + + try { + phutil_string_cast($input); + } catch (Exception $ex) { + $caught = $ex; + } catch (Throwable $ex) { + $caught = $ex; + } + + $this->assertCaught($expect_exceptions, $caught, $test_name); + } + } }