Переглянути джерело

Unit tested handlers.php, solving some bugs

Taddeus Kroes 13 роки тому
батько
коміт
6e91a09d5c
2 змінених файлів з 93 додано та 7 видалено
  1. 9 7
      handlers.php
  2. 84 0
      tests/test_handlers.php

+ 9 - 7
handlers.php

@@ -10,28 +10,30 @@ namespace webbasics;
 
 require_once 'router.php';
 
-class BaseHandler implements RouteHandler {
+abstract class BaseHandler implements RouteHandler {
 	function handleRequest(array $data) {
 		$request_type = strtolower($_SERVER['REQUEST_METHOD']);
 		
 		// Try to use first match value as method name, e.g. getAction() if
 		// first match value is "action"
 		if (count($data)) {
-			$method_name = $request_type . Inflector::capitalize(array_splice($data, 0, 1));
+			$method_name = $request_type . camelize($data[0], true);
 			
 			if (method_exists($this, $method_name)) {
-				if (count($data))
-					$this->$method_name($data);
+				array_shift($data);
+				
+				if (count($data)) 
+					return $this->$method_name($data);
 				else
-					$this->$method_name();
+					return $this->$method_name();
 			}
 			
 			// get($data) or post($data)
-			$this->$request_type($data);
+			return $this->$request_type($data);
 		}
 		
 		// get() or post()
-		$this->$request_type();
+		return $this->$request_type();
 	}
 }
 

+ 84 - 0
tests/test_handlers.php

@@ -0,0 +1,84 @@
+<?php
+
+require_once 'handlers.php';
+
+class MyHandler extends webbasics\BaseHandler {
+	function get(array $args=array()) {
+		return 'get ' . implode('-', $args);
+	}
+	
+	function getFoo() {
+		return 'getFoo';
+	}
+	
+	function getBar(array $args) {
+		return 'getBar ' . implode('-', $args);
+	}
+	
+	function post(array $args=array()) {
+		return 'post ' . implode('-', $args);
+	}
+	
+	function postFoo() {
+		return 'postFoo';
+	}
+	
+	function postBar(array $args) {
+		return 'postBar ' . implode('-', $args);
+	}
+}
+
+class HandlersTest extends PHPUnit_Framework_TestCase {
+	private $myhandler;
+	
+	function setUp() {
+		$this->myhandler = new MyHandler;
+	}
+	
+	function testBaseHandlerGetNoMethodNoArgs() {
+		$this->assertHandlesGet('get ', $this->myhandler, array());
+	}
+	
+	function testBaseHandlerGetNoMethodArgs() {
+		$this->assertHandlesGet('get baz', $this->myhandler, array('baz'));
+	}
+	
+	function testBaseHandlerGetMethodNoArgs() {
+		$this->assertHandlesGet('getFoo', $this->myhandler, array('foo'));
+	}
+	
+	function testBaseHandlerGetMethodArgs() {
+		$this->assertHandlesGet('getBar foo-baz', $this->myhandler, array('bar', 'foo', 'baz'));
+	}
+	
+	function testBaseHandlerPostNoMethodNoArgs() {
+		$this->assertHandlesPost('post ', $this->myhandler, array());
+	}
+	
+	function testBaseHandlerPostNoMethodArgs() {
+		$this->assertHandlesPost('post baz', $this->myhandler, array('baz'));
+	}
+	
+	function testBaseHandlerPostMethodNoArgs() {
+		$this->assertHandlesPost('postFoo', $this->myhandler, array('foo'));
+	}
+	
+	function testBaseHandlerPostMethodArgs() {
+		$this->assertHandlesPost('postBar foo-baz', $this->myhandler, array('bar', 'foo', 'baz'));
+	}
+	
+	function assertHandlesGet($result, $handler, array $args=array()) {
+		$this->assertHandlesMethod($result, $handler, $args, 'GET');
+	}
+	
+	function assertHandlesPost($result, $handler, array $args=array()) {
+		$this->assertHandlesMethod($result, $handler, $args, 'POST');
+	}
+	
+	function assertHandlesMethod($result, $handler, array $args, $request_method) {
+		$_SERVER['REQUEST_METHOD'] = $request_method;
+		$this->assertEquals($result, $handler->handleRequest($args));
+	}
+}
+
+?>