| 399 | |
| 400 | |
| 401 | def test_path(): |
| 402 | map = r.Map( |
| 403 | [ |
| 404 | r.Rule(class="st">"/", defaults={class="st">"name": class="st">"FrontPage"}, endpoint=class="st">"page"), |
| 405 | r.Rule(class="st">"/Special", endpoint=class="st">"special"), |
| 406 | r.Rule(class="st">"/<int:year>", endpoint=class="st">"year"), |
| 407 | r.Rule(class="st">"/<path:name>:foo", endpoint=class="st">"foopage"), |
| 408 | r.Rule(class="st">"/<path:name>:<path:name2>", endpoint=class="st">"twopage"), |
| 409 | r.Rule(class="st">"/<path:name>", endpoint=class="st">"page"), |
| 410 | r.Rule(class="st">"/<path:name>/edit", endpoint=class="st">"editpage"), |
| 411 | r.Rule(class="st">"/<path:name>/silly/<path:name2>", endpoint=class="st">"sillypage"), |
| 412 | r.Rule(class="st">"/<path:name>/silly/<path:name2>/edit", endpoint=class="st">"editsillypage"), |
| 413 | r.Rule(class="st">"/Talk:<path:name>", endpoint=class="st">"talk"), |
| 414 | r.Rule(class="st">"/User:<username>", endpoint=class="st">"user"), |
| 415 | r.Rule(class="st">"/User:<username>/<path:name>", endpoint=class="st">"userpage"), |
| 416 | r.Rule( |
| 417 | class="st">"/User:<username>/comment/<int:id>-<int:replyId>", |
| 418 | endpoint=class="st">"usercomment", |
| 419 | ), |
| 420 | r.Rule(class="st">"/Files/<path:file>", endpoint=class="st">"files"), |
| 421 | r.Rule(class="st">"/<admin>/<manage>/<things>", endpoint=class="st">"admin"), |
| 422 | ] |
| 423 | ) |
| 424 | adapter = map.bind(class="st">"example.org", class="st">"/") |
| 425 | |
| 426 | assert adapter.match(class="st">"/") == (class="st">"page", {class="st">"name": class="st">"FrontPage"}) |
| 427 | pytest.raises(r.RequestRedirect, lambda: adapter.match(class="st">"/FrontPage")) |
| 428 | assert adapter.match(class="st">"/Special") == (class="st">"special", {}) |
| 429 | assert adapter.match(class="st">"/2007") == (class="st">"year", {class="st">"year": 2007}) |
| 430 | assert adapter.match(class="st">"/Some:foo") == (class="st">"foopage", {class="st">"name": class="st">"Some"}) |
| 431 | assert adapter.match(class="st">"/Some:bar") == (class="st">"twopage", {class="st">"name": class="st">"Some", class="st">"name2": class="st">"bar"}) |
| 432 | assert adapter.match(class="st">"/Some/Page") == (class="st">"page", {class="st">"name": class="st">"Some/Page"}) |
| 433 | assert adapter.match(class="st">"/Some/Page/edit") == (class="st">"editpage", {class="st">"name": class="st">"Some/Page"}) |
| 434 | assert adapter.match(class="st">"/Foo/silly/bar") == ( |
| 435 | class="st">"sillypage", |
| 436 | {class="st">"name": class="st">"Foo", class="st">"name2": class="st">"bar"}, |
| 437 | ) |
| 438 | assert adapter.match(class="st">"/Foo/silly/bar/edit") == ( |
| 439 | class="st">"editsillypage", |
| 440 | {class="st">"name": class="st">"Foo", class="st">"name2": class="st">"bar"}, |
| 441 | ) |
| 442 | assert adapter.match(class="st">"/Talk:Foo/Bar") == (class="st">"talk", {class="st">"name": class="st">"Foo/Bar"}) |
| 443 | assert adapter.match(class="st">"/User:thomas") == (class="st">"user", {class="st">"username": class="st">"thomas"}) |
| 444 | assert adapter.match(class="st">"/User:thomas/projects/werkzeug") == ( |
| 445 | class="st">"userpage", |
| 446 | {class="st">"username": class="st">"thomas", class="st">"name": class="st">"projects/werkzeug"}, |
| 447 | ) |
| 448 | assert adapter.match(class="st">"/User:thomas/comment/123-456") == ( |
| 449 | class="st">"usercomment", |
| 450 | {class="st">"username": class="st">"thomas", class="st">"id": 123, class="st">"replyId": 456}, |
| 451 | ) |
| 452 | assert adapter.match(class="st">"/Files/downloads/werkzeug/0.2.zip") == ( |
| 453 | class="st">"files", |
| 454 | {class="st">"file": class="st">"downloads/werkzeug/0.2.zip"}, |
| 455 | ) |
| 456 | assert adapter.match(class="st">"/Jerry/eats/cheese") == ( |
| 457 | class="st">"admin", |
| 458 | {class="st">"admin": class="st">"Jerry", class="st">"manage": class="st">"eats", class="st">"things": class="st">"cheese"}, |