/** * Test if we can dynamically extend the R-facade. * * @return void */ public function testDynamicPlugins() { testpack('Test dynamic plugins'); //basic behaviour R::ext('makeTea', function () { return 'sorry cant do that!'; }); asrt(R::makeTea(), 'sorry cant do that!'); //with parameters R::ext('multiply', function ($a, $b) { return $a * $b; }); asrt(R::multiply(3, 4), 12); //can we call R inside? R::ext('singVersion', function () { return R::getVersion() . ' lalala !'; }); asrt(R::singVersion(), R::getVersion() . ' lalala !'); //should also work with Facade asrt(Facade::singVersion(), R::getVersion() . ' lalala !'); //test error handling try { R::ext('---', function () { }); fail(); } catch (RedException $e) { asrt($e->getMessage(), 'Plugin name may only contain alphanumeric characters.'); } try { R::__callStatic('---', function () { }); fail(); } catch (RedException $e) { asrt($e->getMessage(), 'Plugin name may only contain alphanumeric characters.'); } try { R::invalidMethod(); fail(); } catch (RedException $e) { asrt($e->getMessage(), 'Plugin \'invalidMethod\' does not exist, add this plugin using: R::ext(\'invalidMethod\')'); } }