diff options
author | Brion Vibber <brion@pobox.com> | 2009-12-15 13:53:19 -0800 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2009-12-16 09:27:48 -0500 |
commit | 0158f4f73db1c6090c09da8cc3cdcfb97af3883b (patch) | |
tree | d9595dd5285fe0341c93338721cb5216579a86f9 /tests/CurryTest.php | |
parent | 00fb5feff8f2552f63f1ddc7b1bef25ebd408507 (diff) |
PHP 5.3 closure-based implementation of curry(); old implementation used as fallback for older PHP versions. Added unit tests to confirm they both work!
Diffstat (limited to 'tests/CurryTest.php')
-rw-r--r-- | tests/CurryTest.php | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/CurryTest.php b/tests/CurryTest.php new file mode 100644 index 000000000..37b66cc74 --- /dev/null +++ b/tests/CurryTest.php @@ -0,0 +1,72 @@ +<?php + +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(); +} + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); +define('STATUSNET', true); +define('LACONICA', true); + +require_once INSTALLDIR . '/lib/common.php'; + +class CurryTest extends PHPUnit_Framework_TestCase +{ + /** + * @dataProvider provider + * + */ + public function testProduction($callback, $curry_params, $call_params, $expected) + { + $params = array_merge(array($callback), $curry_params); + $curried = call_user_func_array('curry', $params); + $result = call_user_func_array($curried, $call_params); + $this->assertEquals($expected, $result); + } + + static public function provider() + { + $obj = new CurryTestHelperObj('oldval'); + return array(array(array('CurryTest', 'callback'), + array('curried'), + array('called'), + 'called|curried'), + array(array('CurryTest', 'callback'), + array('curried1', 'curried2'), + array('called1', 'called2'), + 'called1|called2|curried1|curried2'), + array(array('CurryTest', 'callbackObj'), + array($obj), + array('newval1'), + 'oldval|newval1'), + // Confirm object identity is retained... + array(array('CurryTest', 'callbackObj'), + array($obj), + array('newval2'), + 'newval1|newval2')); + } + + static function callback() + { + $args = func_get_args(); + return implode("|", $args); + } + + static function callbackObj($val, $obj) + { + $old = $obj->val; + $obj->val = $val; + return "$old|$val"; + } +} + +class CurryTestHelperObj +{ + public $val=''; + + function __construct($val) + { + $this->val = $val; + } +} |