array('extra' => 10))); assert_length_of($r[2], 5); assert_equal($r[2]["method"], "POST"); assert_match($r[2]["pattern"], "/blog/102"); assert_length_of($r[2]["names"], 1); assert_equal($r[2]["names"][0], "id"); assert_equal($r[2]["callback"], "my_post_func"); assert_not_empty($r[2]["options"]); assert_not_empty($r[2]["options"]['params']); assert_equal($r[2]["options"]['params']['extra'], 10); $r = route("get", "/blog/:id", "my_get_func", array('params' => array('id' => 10))); assert_match($r[2]["pattern"], "/blog/102"); } function test_router_find_route() { route( "get", "/index", "my_index_func" ); route( "get", "/new", "my_new_func" ); route( "post", "/create", "my_create_func" ); route( "get", "/edit/:id", "my_edit_func" ); route( "put", "/update/:id", "my_update_func" ); route( "delete", "/delete/:id", "my_delete_func" ); route( "get", "^/list/(\d+)","my_list_func" ); $routes = route( "get", "/*.jpg/:size","my_jpeg" ); assert_length_of($routes, 8); $r = route_find("GET", "/unkown"); assert_false($r); $r = route_find("GET", "/delete"); assert_false($r); $r = route_find("POST", "/create"); assert_equal($r["callback"], "my_create_func"); $r = route_find("GET", "/edit"); assert_equal($r["callback"], "my_edit_func"); $r = route_find("GET", "/edit/120"); assert_equal($r["callback"], "my_edit_func"); assert_equal($r["params"]["id"], 120); $r = route_find("GET","/limonade.jpg/thumb", 'my_jpeg'); assert_equal($r["callback"], "my_jpeg"); assert_equal($r["params"][0], "limonade"); assert_equal($r["params"]["size"], "thumb"); route( "get", "/index/*", "my_index_func2" ); $routes = route( "delete", "/delete/:id/:confirm", "my_delete_func2" ); assert_length_of($routes, 10); $r = route_find("GET", "/index"); assert_equal($r["callback"], "my_index_func"); $r = route_find("GET", "/index/ok"); assert_equal($r["callback"], "my_index_func2"); $r = route_find("DELETE", "/delete"); assert_equal($r["callback"], "my_delete_func"); $r = route_find("DELETE", "/delete/120"); assert_equal($r["callback"], "my_delete_func"); $r = route_find("DELETE", "/delete/120/ok"); assert_equal($r["callback"], "my_delete_func2"); $r = route_find("GET", "/list/120"); assert_equal($r["callback"], "my_list_func"); /* testing parameterized functions */ $extra_p = array(123, 'id' => 123, 'name' => 'abc'); route( "get", "/no/cat/:id", "my_p_func"); route( "get", "/with/cat/:id", "my_p_func", array('params' => $extra_p)); $routes = route( "get", "/indexed/cat/*", "my_p_func", array('params' => $extra_p)); $r = route_find("GET", "/no/cat/21"); assert_equal($r["callback"], "my_p_func"); assert_equal($r["params"]["id"], 21); $r = route_find("GET", "/with/cat/21"); assert_equal($r["callback"], "my_p_func"); assert_equal($r["params"]["id"], 21); assert_equal($r["params"]["name"], "abc"); $r = route_find("GET", "/indexed/cat/21"); assert_equal($r["callback"], "my_p_func"); assert_equal($r["params"][0], 21); assert_equal($r["params"]["id"], 123); assert_equal($r["params"]["name"], "abc"); /* testing route with special characters */ route( "get", "/mañana/:when", "my_special_func"); $r = route_find("GET", "/mañana/123"); assert_equal($r["callback"], "my_special_func"); assert_equal($r["params"]["when"], 123); $r = route_find("GET", "/mañana/après demain"); assert_equal($r["callback"], "my_special_func"); assert_equal($r["params"]["when"], "après demain"); } end_test_case();