Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add regression test for editor JS crash caused by rtlcss parsing exception #29326

Closed

Conversation

fullofcaffeine
Copy link
Member

@fullofcaffeine fullofcaffeine commented Feb 25, 2021

Description

Issue: #29250.

Add regression test to prevent issues related to RTL being active at the WP-admin level.*

*it seems you can activate RTL in two places: wp-admin and in the Gutenberg editor. The error we're trying to avoid a regression for only happens when RTL is active at the "WP admin level" (someone please correct me if this is the wrong mental model / I'm using the wrong term here).

After investigating where rtlcss is parsing the CSS (see: https://github.com/ItsJonQ/g2/blob/main/packages/create-styles/src/create-compiler/plugins/rtl.js#L38), the challenge was then making sure that document.dir = 'rtl' ran before that. Played with several approaches, including using Puppeteer's evaluateOnNewDocument to execute the snippet, but none of them worked.

Had to do some gymnastics to make sure the snippet ran before the corresponding js. With that test, I am able to reproduce the error in GB <= 10.0.0. Still need to clean it up, and it's less than perfect (it effectively reloads the script after the page already loaded, while making sure the dir RTL property is set in the document) but it seems this approach is feasible.

How to test

  1. Easiest way is to checkout v10.0.0 (or revert commit 2f93c432a3), then npm ci && npm run build and start a wp-env instance from there. Finally, in another Gutenberg copy, check out this branch (add/regression-test-rtlcss-parser-comment-crash) and run this test (you might also call only in the it to restrict the run to the single test added in this PR, if you'd like). The loads editor without errors when RTL is set at the WP admin level test should fail 🔴:

expect

  1. Now, where you had v10.0.0 checkout, checkout v10.0.2 (or master) instead, run npm ci && npm run build and go back to the other Gutenberg instance, and run the test again. It should pass 🟢:

pass

Types of changes

New E2E test.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@github-actions
Copy link

github-actions bot commented Feb 25, 2021

Size Change: +1.39 kB (0%)

Total Size: 1.39 MB

Filename Size Change
build/a11y/index.js 1.14 kB -1 B (0%)
build/annotations/index.js 3.79 kB +1 B (0%)
build/api-fetch/index.js 3.4 kB -2 B (0%)
build/autop/index.js 2.84 kB +1 B (0%)
build/block-directory/index.js 8.63 kB -468 B (-5%)
build/block-directory/style-rtl.css 1 kB -6 B (-1%)
build/block-directory/style.css 1.01 kB -5 B (0%)
build/block-editor/index.js 125 kB +28 B (0%)
build/block-library/blocks/spacer/editor-rtl.css 317 B +15 B (+5%) 🔍
build/block-library/blocks/spacer/editor.css 317 B +15 B (+5%) 🔍
build/block-library/editor-rtl.css 9.54 kB +15 B (0%)
build/block-library/editor.css 9.53 kB +14 B (0%)
build/block-library/index.js 148 kB +232 B (0%)
build/block-serialization-default-parser/index.js 1.87 kB -5 B (0%)
build/blocks/index.js 48.3 kB +1 B (0%)
build/components/index.js 273 kB +761 B (0%)
build/compose/index.js 11.1 kB -2 B (0%)
build/customize-widgets/index.js 4.09 kB +2 B (0%)
build/data-controls/index.js 830 B -1 B (0%)
build/data/index.js 8.86 kB -5 B (0%)
build/date/index.js 31.8 kB +2 B (0%)
build/edit-navigation/index.js 11 kB +5 B (0%)
build/edit-post/index.js 307 kB -4 B (0%)
build/edit-site/index.js 27.1 kB +722 B (+3%)
build/edit-site/style-rtl.css 4.47 kB +53 B (+1%)
build/edit-site/style.css 4.46 kB +53 B (+1%)
build/edit-widgets/index.js 20.2 kB -37 B (0%)
build/editor/index.js 42.1 kB +4 B (0%)
build/format-library/index.js 6.78 kB +6 B (0%)
build/i18n/index.js 4.01 kB +1 B (0%)
build/list-reusable-blocks/index.js 3.14 kB -1 B (0%)
build/media-utils/index.js 5.36 kB -3 B (0%)
build/nux/index.js 3.42 kB +1 B (0%)
build/priority-queue/index.js 790 B -1 B (0%)
build/redux-routine/index.js 2.84 kB +3 B (0%)
build/reusable-blocks/index.js 3.81 kB -1 B (0%)
build/rich-text/index.js 13.5 kB -1 B (0%)
build/shortcode/index.js 1.7 kB -1 B (0%)
build/url/index.js 3.02 kB +1 B (0%)
build/wordcount/index.js 1.22 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/blob/index.js 665 B 0 B
build/block-editor/style-rtl.css 12.1 kB 0 B
build/block-editor/style.css 12.1 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 103 B 0 B
build/block-library/blocks/audio/style.css 103 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 479 B 0 B
build/block-library/blocks/button/style.css 479 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 364 B 0 B
build/block-library/blocks/buttons/style.css 363 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 421 B 0 B
build/block-library/blocks/columns/style.css 421 B 0 B
build/block-library/blocks/cover/editor-rtl.css 390 B 0 B
build/block-library/blocks/cover/editor.css 389 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.25 kB 0 B
build/block-library/blocks/cover/style.css 1.25 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 396 B 0 B
build/block-library/blocks/embed/style.css 395 B 0 B
build/block-library/blocks/file/editor-rtl.css 199 B 0 B
build/block-library/blocks/file/editor.css 198 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 689 B 0 B
build/block-library/blocks/gallery/editor.css 690 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.07 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/group/editor-rtl.css 318 B 0 B
build/block-library/blocks/group/editor.css 317 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 477 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 159 B 0 B
build/block-library/blocks/latest-comments/editor.css 158 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 269 B 0 B
build/block-library/blocks/latest-comments/style.css 269 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/list/editor-rtl.css 65 B 0 B
build/block-library/blocks/list/editor.css 65 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 681 B 0 B
build/block-library/blocks/navigation-link/editor.css 683 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 694 B 0 B
build/block-library/blocks/navigation-link/style.css 692 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.34 kB 0 B
build/block-library/blocks/navigation/editor.css 1.34 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 213 B 0 B
build/block-library/blocks/navigation/style.css 214 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 214 B 0 B
build/block-library/blocks/page-list/editor.css 214 B 0 B
build/block-library/blocks/page-list/style-rtl.css 527 B 0 B
build/block-library/blocks/page-list/style.css 526 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 109 B 0 B
build/block-library/blocks/paragraph/editor.css 109 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 288 B 0 B
build/block-library/blocks/paragraph/style.css 289 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 63 B 0 B
build/block-library/blocks/preformatted/style.css 63 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 316 B 0 B
build/block-library/blocks/pullquote/style.css 316 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 90 B 0 B
build/block-library/blocks/query-loop/editor.css 89 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query/editor-rtl.css 814 B 0 B
build/block-library/blocks/query/editor.css 812 B 0 B
build/block-library/blocks/quote/editor-rtl.css 61 B 0 B
build/block-library/blocks/quote/editor.css 61 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 236 B 0 B
build/block-library/blocks/separator/style.css 236 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 504 B 0 B
build/block-library/blocks/shortcode/editor.css 504 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 696 B 0 B
build/block-library/blocks/social-links/editor.css 696 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.32 kB 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 99 B 0 B
build/block-library/blocks/subhead/editor.css 99 B 0 B
build/block-library/blocks/subhead/style-rtl.css 80 B 0 B
build/block-library/blocks/subhead/style.css 80 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 390 B 0 B
build/block-library/blocks/table/style.css 390 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 557 B 0 B
build/block-library/blocks/template-part/editor.css 556 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 62 B 0 B
build/block-library/blocks/verse/editor.css 62 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 193 B 0 B
build/block-library/blocks/video/style.css 193 B 0 B
build/block-library/common-rtl.css 1.08 kB 0 B
build/block-library/common.css 1.08 kB 0 B
build/block-library/style-rtl.css 8.85 kB 0 B
build/block-library/style.css 8.85 kB 0 B
build/block-library/theme-rtl.css 736 B 0 B
build/block-library/theme.css 736 B 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/core-data/index.js 16.8 kB 0 B
build/customize-widgets/style-rtl.css 168 B 0 B
build/customize-widgets/style.css 168 B 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/style-rtl.css 1.26 kB 0 B
build/edit-navigation/style.css 1.25 kB 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-widgets/style-rtl.css 3.2 kB 0 B
build/edit-widgets/style.css 3.2 kB 0 B
build/editor/editor-styles-rtl.css 543 B 0 B
build/editor/editor-styles.css 545 B 0 B
build/editor/style-rtl.css 3.9 kB 0 B
build/editor/style.css 3.9 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.96 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/notices/index.js 1.86 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.61 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/react-i18n/index.js 1.45 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/server-side-render/index.js 2.82 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B

compressed-size-action

@fullofcaffeine fullofcaffeine force-pushed the add/regression-test-rtlcss-parser-comment-crash branch from 41859d4 to f17d95f Compare February 25, 2021 02:48
@ockham
Copy link
Contributor

ockham commented Feb 25, 2021

Wondering if we could a different puppeteer helper here, such as page.evaluateOnNewDocument, to avoid some of the clunkiness of the script removal/appending 😬

@fullofcaffeine
Copy link
Member Author

Wondering if we could a different puppeteer helper here, such as page.evaluateOnNewDocument, to avoid some of the clunkiness of the script removal/appending grimacing

This was the first approach I tried. I've set the dir attribute on document from this callback but it ended up not being available when the actual document loaded. It seems the objects are different. I'll double-check nevertheless.

@fullofcaffeine
Copy link
Member Author

Wondering if we could a different puppeteer helper here, such as page.evaluateOnNewDocument, to avoid some of the clunkiness of the script removal/appending grimacing

I tried again and setting the attribute on evaluateOnNewDocument before calling createNewPost(), but it doesn't seem to do the trick, the dir attribute doesn't persist over to the actual page load for post-new.php:

Peek.2021-02-25.13-13.mp4

Screenshot from 2021-02-25 13-02-44

@fullofcaffeine fullofcaffeine force-pushed the add/regression-test-rtlcss-parser-comment-crash branch from f17d95f to 0e518ca Compare February 25, 2021 20:57
@fullofcaffeine
Copy link
Member Author

fullofcaffeine commented Feb 25, 2021

Spent more time tinkering, seems the only way is to re-append the scripts, let me know if you have any other ideas. I've updated and cleaned it up. I was also having a hard time coming up with a jest expectation that would detect the error. Without any expects, an error was still being captured by Jest, but no additional details were being shown:

nodtails

Which could work but would make it a bit harder to diagnose the test by looking at it. I tried to use an expectation like:

 expect( console ).not.toHaveErrored();

But it didn't work, it wouldn't detect the CSS syntax error, I guess because of a race condition. I've found a workaround, refer to the commit. This seems to work consistently. EDIT: I might actually try to capture the error message to also expose it in the `expect error message. EDIT2: There seems to be no straightforward way of adding a custom error message in Jest without creating a custom matcher. I'll leave it as is this time.

@fullofcaffeine fullofcaffeine marked this pull request as ready for review February 25, 2021 23:24
@fullofcaffeine fullofcaffeine self-assigned this Feb 25, 2021
@fullofcaffeine fullofcaffeine changed the title Add regression test for editor JS crash caused by rtlcss parsing exception (WIP) Add regression test for editor JS crash caused by rtlcss parsing exception Feb 25, 2021
const head = document.head;

const componentsScriptSrc = scripts.find( ( s ) =>
s.src.match( 'components/index.js' )
Copy link
Member Author

@fullofcaffeine fullofcaffeine Feb 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't quite like the fact that this ends up coupling this test with the build output (to a portion of the path to the compiled entry-point for @wordpress/components), but maybe it's fine as it won't change often ¯_(ツ)_/¯

The alternative would be to just get all scripts without filtering, unshift the snippetScriptEl, and then re-add all of them again later. I tried that approach and it works, but then we would be re-evaluating all scripts, which is quite inefficient because we only really need to reload @wordpress/components.

As much as I don't quite like the current approach, I think it provides the best trade-offs. Both approaches would be kind of hacky, but I don't see any other way of reproducing the crash caused by rtlcss from an e2e test at the moment. See my other attempts here.

Copy link
Member Author

@fullofcaffeine fullofcaffeine Feb 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another thing is that there might be a possibility of a false-positive if the error is caught by the global error handler after the test finishes, which would mean the window._loadedWithoutErrors would still be true. While testing locally, the test consistently failed when I tested against v10.0.0 though. I didn't find a good way to wait for the error without it creating a bottleneck in the case the error doesn't happen.

Base automatically changed from master to trunk March 1, 2021 15:46
…ge context

Setting a variable to indicate an error happened is not needed as the uncaught error on the page will case the test to fail.

Also, the additional message added by having the expect was not really adding much value.
@ockham
Copy link
Contributor

ockham commented Mar 3, 2021

Thanks @fullofcaffeine, it's great to see an e2e that actually manages to catch that issue!

That said, I agree that the way we have to remove and re-add script tags here is problematic (and very tightly coupled to implementation details). Furthermore, a point can be made that for consistency's sake, we should use the same kind of "RTL setting" for all tests in rtl.test.js -- preferably the kind that is as close as possible to real-world usage of GB, and is thus able to capture the most issues.

At this point, I think it'd be worth trying out to actually change the RTL test to install and activate an actual RTL language (for all the checks it runs). Let's maybe explore that in a different PR. Would you like to give that a try, or should I do that? 😄

@ockham
Copy link
Contributor

ockham commented Mar 3, 2021

Oh, there's also this plugin that I just learned about: https://wordpress.org/plugins/rtl-tester/

If we fail to make the e2e test install an RTL language, we might try to make it install that plugin instead 🤔

@ockham
Copy link
Contributor

ockham commented Mar 5, 2021

Oh, there's also this plugin that I just learned about: https://wordpress.org/plugins/rtl-tester/

If we fail to make the e2e test install an RTL language, we might try to make it install that plugin instead

We can even take this a bit further:

Turns out we already maintain a few helper plugins for e2e tests in Gutenberg, see https://github.com/WordPress/gutenberg/tree/6449773e1340d38c2eb4e0555677df54df531040/packages/e2e-tests/plugins

Those are mostly used by the tests in https://github.com/WordPress/gutenberg/tree/6449773e1340d38c2eb4e0555677df54df531040/packages/e2e-tests/specs/editor/plugins.

The relevant logic in the RTL tester plugin is fairly simple: https://github.com/yoavf/RTL-Tester/blob/0f53a0468a70a3af4dbb736703481e9921d7caea/rtl-tester.php#L87-L91

So let's maybe just copy that code into a newly added packages/e2e-tests/plugins/rtl.php, and use that for our e2e test 😄

@fullofcaffeine
Copy link
Member Author

Follow up: #29598.

@fullofcaffeine fullofcaffeine deleted the add/regression-test-rtlcss-parser-comment-crash branch March 6, 2021 01:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants