/** * Test adding detectors and having them work. * * @return void */ public function testAddDetector() { $request = new Request(); Request::addDetector('closure', function ($request) { return true; }); $this->assertTrue($request->is('closure')); Request::addDetector('get', function ($request) { return $request->env('REQUEST_METHOD') === 'GET'; }); $request->env('REQUEST_METHOD', 'GET'); $this->assertTrue($request->is('get')); Request::addDetector('compare', ['env' => 'TEST_VAR', 'value' => 'something']); $request->env('TEST_VAR', 'something'); $this->assertTrue($request->is('compare'), 'Value match failed.'); $request->env('TEST_VAR', 'wrong'); $this->assertFalse($request->is('compare'), 'Value mis-match failed.'); Request::addDetector('compareCamelCase', ['env' => 'TEST_VAR', 'value' => 'foo']); $request->env('TEST_VAR', 'foo'); $this->assertTrue($request->is('compareCamelCase'), 'Value match failed.'); $this->assertTrue($request->is('comparecamelcase'), 'detectors should be case insensitive'); $this->assertTrue($request->is('COMPARECAMELCASE'), 'detectors should be case insensitive'); $request->env('TEST_VAR', 'not foo'); $this->assertFalse($request->is('compareCamelCase'), 'Value match failed.'); $this->assertFalse($request->is('comparecamelcase'), 'detectors should be case insensitive'); $this->assertFalse($request->is('COMPARECAMELCASE'), 'detectors should be case insensitive'); Request::addDetector('banana', ['env' => 'TEST_VAR', 'pattern' => '/^ban.*$/']); $request->env('TEST_VAR', 'banana'); $this->assertTrue($request->isBanana()); $request->env('TEST_VAR', 'wrong value'); $this->assertFalse($request->isBanana()); Request::addDetector('mobile', ['env' => 'HTTP_USER_AGENT', 'options' => ['Imagination']]); $request->env('HTTP_USER_AGENT', 'Imagination land'); $this->assertTrue($request->isMobile()); Request::addDetector('index', ['param' => 'action', 'value' => 'index']); $request->params['action'] = 'index'; $request->clearDetectorCache(); $this->assertTrue($request->isIndex()); $request->params['action'] = 'add'; $request->clearDetectorCache(); $this->assertFalse($request->isIndex()); Request::addDetector('callme', [$this, 'detectCallback']); $request->return = true; $request->clearDetectorCache(); $this->assertTrue($request->isCallMe()); Request::addDetector('extension', ['param' => '_ext', 'options' => ['pdf', 'png', 'txt']]); $request->params['_ext'] = 'pdf'; $request->clearDetectorCache(); $this->assertTrue($request->is('extension')); $request->params['_ext'] = 'exe'; $request->clearDetectorCache(); $this->assertFalse($request->isExtension()); }