66 Commits

Author SHA1 Message Date
Simon Knott
208a54529d
fix(ct-react): support shorthand fragment notation (#32900)
Closes https://github.com/microsoft/playwright/issues/32853

Vite turns the shorthand fragment notation `<></>` into `import {
Fragment } from "react"; <Fragment></Fragment>`. On the Node.js side of
things, this `react` import resolves to our mock version of React, which
currently mocks `Fragment` as `{}`. Currently, we pass that straight to
`React.createElement`, which throws an error.

The fix is to make our `Fragment` mock detectable with a tag, and when
we render it replace it with the real `__pwReact.Fragment`.
2024-10-02 11:19:09 +02:00
Max Schmitt
9fa06be49e
fix(ct): throw error if inline component is getting mounted (#32531)
What was happening?
- When we use CT, we go over the test files, look at the imports using
`tsxTransform.ts` and store them inside a map, these we feed into the
import registry which we build using Vite and have access inside the
browser
- In case of an inline component in the same file as where the test file
is, this is not happening.
- jsx-runtime via babel kicks in, transforms every JSX component in
something like that:

```
{
  __pw_type: 'jsx',
  type: [Function: MyInlineComponent],
  props: { value: 'Max' },
  key: undefined
}
```

this then gets passed into `wrapObject` which maps any function from the
Node.js side into expose function calls so they work inside the browser.
The assumption for `wrapObject` was to do it mostly for callbacks. So it
does for `type` - which is actually our component. We then pass this to
the React render function, which calls back the exposed function but we
never return anything, so it mounts `undefined`.

---

While there have been experiments from certain vendors to get the
'client only' code inside a server side file, we should throw for now to
not confuse users. We might revisit this in the future since Babel / TSX
doesn't support it outside of the box.

Fixes https://github.com/microsoft/playwright/issues/32167
2024-09-10 11:15:20 +02:00
Simon Knott
b599335404
chore(ui): enable react/recommended lint rules (#32214)
Closes https://github.com/microsoft/playwright/issues/32159. I
originally set out to enable Strict Mode for our React UI, but found a
way better thing: Enabling the lint rules we had already installed!

`eslint-plugin-react` is already in of our `package.json`, and this PR
enables it and fixes some of the reported issues. Most of them are
around the `key` prop which is mostly about performance, but there's
also fixes for misspelled `data-testid` props.
2024-08-20 14:16:28 +02:00
Dmitry Gozman
e86c8af599
chore: rename route fixture in ct (#31817)
Addresses review feedback.
2024-07-23 07:43:28 -07:00
Dmitry Gozman
369a1eca48
feat(ct): experimental route fixture (#31554)
This fixture accepts the same arguments as `context.route()`, but also
supports request handlers compatible with msw syntax.
2024-07-06 09:35:20 -07:00
Sander
9ce41fa1b0
fix(ct): mount then unmount then mount (#30657)
closes https://github.com/microsoft/playwright/issues/30628
2024-05-14 11:03:46 -07:00
Sander
1a34c85886
chore(ct): bump vite to v5.2.8 (#30264) 2024-04-08 09:48:05 +02:00
Max Schmitt
94e61fc95a
test: bump ct typescript version (#29855) 2024-03-11 17:09:26 +01:00
Sander
015a1bcc1c
feat(ct): double unmounting component throws error (#29650) 2024-02-26 11:16:27 -08:00
Sander
7e502e91b2
fix(ct): solid pass children when they are defined (#29648) 2024-02-26 11:15:08 -08:00
Jeppe Reinhold
4d868f6ba8
fix(ct-react+ct-react17): only pass children to React.createElement when they are defined (#29592) 2024-02-23 12:30:42 -08:00
Pavel Feldman
d61f99034a
fix(ct-react): do not reset mount hooks upon update (#29072)
Fixes https://github.com/microsoft/playwright/issues/29058
2024-01-19 12:55:36 -08:00
Pavel Feldman
71a48c2562
chore: migrate ct to vite5 (#29033)
Closes https://github.com/microsoft/playwright/issues/28607
2024-01-19 11:13:03 -08:00
Sander
4d62784eeb
feat(ct): react component as props (#28382)
closes: https://github.com/microsoft/playwright/issues/28367#issuecomment-1830298864
2023-12-22 20:51:59 -08:00
Sander
f58c1f37eb
fix(ct): empty slots or children (#28225)
closes: https://github.com/microsoft/playwright/issues/28212
2023-11-27 15:53:50 -08:00
Sander
3313381040
fix(ct): react render array as child (#27692)
Signed-off-by: Sander <info@mesander.com>
Co-authored-by: Dmitry Gozman <dgozman@gmail.com>
Co-authored-by: mbr <mbr@mbrs-MacBook-Air.local>
2023-10-28 10:36:48 -07:00
Dmitry Gozman
d426f2fd4e
fix(chromium): continue requests paused for the second time (#27429)
Sometimes Chromium restarts requests. This leads to multiple
`Fetch.requestPaused` for a single `Network.requestWillBeSent`.

Fixes #27294.
2023-10-04 11:18:06 -07:00
Dmitry Gozman
186f86905c
chore: make @playwright/test depend on playwright (#26946) 2023-09-08 14:23:35 -07:00
Pavel Feldman
0409bfca56
chore: ensure module deps in ct-core (#24056)
Fixes https://github.com/microsoft/playwright/issues/23823
2023-07-06 12:01:45 -07:00
Sander
c9cedc78b1
chore(ct): inline reporter in ci (#23608) 2023-06-08 16:23:59 -07:00
Sander
79408ff7a4
test(ct): update child (#22712) 2023-05-01 15:20:46 -07:00
Sander
2428ff8b8b
chore: bump vite to 4.2.1 (#22061) 2023-03-29 14:00:00 -07:00
Sander
5d3128a595
test(ct): remove locators (#21963) 2023-03-24 15:55:32 -07:00
Sebastian Silbermann
fbaf56a13f
feat(ct-react): Support React 18 only (#19814)
BREAKING CHANGE: Drop support for React 17 and earlier
Support for React 17 an earlier is provided by
`@playwright/experimental-ct-react-17`

Closes #19923
2023-03-03 14:28:33 -08:00
Sander
d58d833daf
fix(ct): solid and react JS as child (#20125) 2023-03-02 13:40:51 -08:00
Sander
ec17a1ac75
chore(ct): bump packages (#20724) 2023-02-13 13:19:59 -08:00
Sander
5b3a306284
test(ct): react vite slice by feature (#20098) 2023-01-13 18:15:43 -08:00
Pavel Feldman
e065d608b6
chore: introduce defineConfig for easier JS typing (#20061)
Fixes https://github.com/microsoft/playwright/issues/19694
2023-01-12 13:12:02 -08:00
Sander
ba393f51a8
feat(ct): before mount hook wrapper (#18616) 2022-12-27 14:26:17 -08:00
Sander
c5d9b8d0fb
chore: update to vite 4 (#19690) 2022-12-27 09:14:39 -08:00
sand4rt
84529595cc
test(ct): react vite router (#18601) 2022-11-08 08:39:48 -08:00
sand4rt
fabe42dc28
chore(ct): bump vite to v3.2.1 (#18427) 2022-10-31 08:58:11 -07:00
sand4rt
01d0ff7316
core(ct): rename tests from rerender to update (#18374) 2022-10-31 08:55:29 -07:00
sand4rt
3460f01b47
test(ct): component as slot (#18090) 2022-10-24 12:31:35 -07:00
sand4rt
951cba8142
chore(ct): type check (#18208) 2022-10-20 13:33:25 -07:00
sand4rt
4ed2a01d9c
core(ct): import paths (#18131) 2022-10-19 19:41:21 -07:00
Pavel Feldman
7910f8a165
Revert "chore(ct): type checking" (#18165)
Reverts microsoft/playwright#17931

type checking fails on the bots
2022-10-18 17:00:17 -07:00
sand4rt
49901c8ed7
feat(ct): typed hooks config (#18003) 2022-10-18 13:04:54 -07:00
sand4rt
ced3efb688
fix(ct): render attributes (#17991) 2022-10-18 13:02:53 -07:00
sand4rt
689c3eb5fe
chore(ct): type checking (#17931) 2022-10-18 13:00:37 -07:00
sand4rt
1a43af3fb6
feat(ct): rerender to update (#17972) 2022-10-10 19:56:33 -07:00
sand4rt
704ff5fda3
core(ct): align styling (#17573)
aligned the global styling of the ct test projects and added dark mode
2022-09-28 10:54:24 +02:00
Dmitry Gozman
f17d345ac9
fix(ct): support empty fragments (#17475)
Currently, we ues `#root` vs `#root > *` selector for component roots
depending on the number of root children. This heuristic detects
fragments that render multiple elements inside the root.

However, this does not work with empty fragments that do not render
anything.

The fix is to make the `#root >> control=component` selector that would
dynamically detect the root. This supports empty fragments and also
allows for dynamic updates of the fragments.
2022-09-21 15:12:18 -07:00
sand4rt
72a18754ef
core(ct): rename tests (#17216) 2022-09-12 09:27:53 -07:00
sand4rt
3785298ddf
fix(ct): react favicon path (#16572) 2022-08-16 10:48:41 -07:00
sand4rt
d9850e0e86
feat(ct): react rerender (#16560) 2022-08-16 10:47:33 -07:00
sand4rt
b41da08c1e
chore(ct): react vite tests (#16525) 2022-08-15 13:17:56 -07:00
Pavel Feldman
e64b09cc28 Revert "feat(ct): react rerender (#16549)"
This reverts commit a62accf8aebd0d6cc08fd461ee8281f72ab86d33.
I'll reapply them in order.
2022-08-15 13:17:15 -07:00
sand4rt
a62accf8ae
feat(ct): react rerender (#16549) 2022-08-15 13:10:38 -07:00
sand4rt
557db4c35e
chore(ct): mount result refactor (#16067) 2022-07-29 20:07:23 -07:00