Skip to content

Commit 7640f90

Browse files
authored
fix: reverse route handlers order (#804)
1 parent 85f3177 commit 7640f90

File tree

4 files changed

+30
-27
lines changed

4 files changed

+30
-27
lines changed

playwright/_impl/_browser_context.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,8 @@ async def expose_function(self, name: str, callback: Callable) -> None:
240240
await self.expose_binding(name, lambda source, *args: callback(*args))
241241

242242
async def route(self, url: URLMatch, handler: RouteHandler) -> None:
243-
self._routes.append(
244-
RouteHandlerEntry(URLMatcher(self._options.get("baseURL"), url), handler)
243+
self._routes.insert(
244+
0, RouteHandlerEntry(URLMatcher(self._options.get("baseURL"), url), handler)
245245
)
246246
if len(self._routes) == 1:
247247
await self._channel.send(

playwright/_impl/_page.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,11 @@ async def add_init_script(
510510
await self._channel.send("addInitScript", dict(source=script))
511511

512512
async def route(self, url: URLMatch, handler: RouteHandler) -> None:
513-
self._routes.append(
513+
self._routes.insert(
514+
0,
514515
RouteHandlerEntry(
515516
URLMatcher(self._browser_context._options.get("baseURL"), url), handler
516-
)
517+
),
517518
)
518519
if len(self._routes) == 1:
519520
await self._channel.send(

tests/async/test_browsercontext.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -464,30 +464,31 @@ def handler(route, request, ordinal):
464464
intercepted.append(ordinal)
465465
asyncio.create_task(route.continue_())
466466

467-
def handler1(route, request):
468-
handler(route, request, 1)
469-
470-
await context.route("**/empty.html", handler1)
467+
await context.route("**/*", lambda route, request: handler(route, request, 1))
471468
await context.route(
472469
"**/empty.html", lambda route, request: handler(route, request, 2)
473470
)
474471
await context.route(
475472
"**/empty.html", lambda route, request: handler(route, request, 3)
476473
)
477-
await context.route("**/*", lambda route, request: handler(route, request, 4))
474+
475+
def handler4(route, request):
476+
handler(route, request, 4)
477+
478+
await context.route("**/empty.html", handler4)
478479

479480
await page.goto(server.EMPTY_PAGE)
480-
assert intercepted == [1]
481+
assert intercepted == [4]
481482

482483
intercepted = []
483-
await context.unroute("**/empty.html", handler1)
484+
await context.unroute("**/empty.html", handler4)
484485
await page.goto(server.EMPTY_PAGE)
485-
assert intercepted == [2]
486+
assert intercepted == [3]
486487

487488
intercepted = []
488489
await context.unroute("**/empty.html")
489490
await page.goto(server.EMPTY_PAGE)
490-
assert intercepted == [4]
491+
assert intercepted == [1]
491492

492493

493494
async def test_route_should_yield_to_page_route(context, server):

tests/async/test_interception.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,47 +46,48 @@ async def handle_request(route, request):
4646
async def test_page_route_should_unroute(page: Page, server):
4747
intercepted = []
4848

49-
def handler1(route):
50-
intercepted.append(1)
51-
asyncio.create_task(route.continue_())
52-
53-
await page.route("**/empty.html", handler1)
5449
await page.route(
55-
"**/empty.html",
50+
"**/*",
5651
lambda route: (
57-
intercepted.append(2), # type: ignore
52+
intercepted.append(1),
5853
asyncio.create_task(route.continue_()),
5954
),
6055
)
6156

6257
await page.route(
6358
"**/empty.html",
6459
lambda route: (
65-
intercepted.append(3), # type: ignore
60+
intercepted.append(2),
6661
asyncio.create_task(route.continue_()),
6762
),
6863
)
6964

7065
await page.route(
71-
"**/*",
66+
"**/empty.html",
7267
lambda route: (
73-
intercepted.append(4), # type: ignore
68+
intercepted.append(3),
7469
asyncio.create_task(route.continue_()),
7570
),
7671
)
7772

73+
def handler4(route):
74+
intercepted.append(4)
75+
asyncio.create_task(route.continue_())
76+
77+
await page.route("**/empty.html", handler4)
78+
7879
await page.goto(server.EMPTY_PAGE)
79-
assert intercepted == [1]
80+
assert intercepted == [4]
8081

8182
intercepted = []
82-
await page.unroute("**/empty.html", handler1)
83+
await page.unroute("**/empty.html", handler4)
8384
await page.goto(server.EMPTY_PAGE)
84-
assert intercepted == [2]
85+
assert intercepted == [3]
8586

8687
intercepted = []
8788
await page.unroute("**/empty.html")
8889
await page.goto(server.EMPTY_PAGE)
89-
assert intercepted == [4]
90+
assert intercepted == [1]
9091

9192

9293
async def test_page_route_should_work_when_POST_is_redirected_with_302(page, server):

0 commit comments

Comments
 (0)