diff --git a/.maestro/README.md b/.maestro/README.md index e4484beb6..3a1061a7b 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -12,6 +12,8 @@ End-to-end UI tests for the example app, exercising both the display component ( │ ├── subflows/ ← suite-local helpers │ └── screenshots/ ← golden images, per platform ├── enrichedMarkdownInput/ ← editor suite (same shape) +├── androidExample/ ← native Android example app (CommonMark flows) +├── iosExample/ ← native iOS example app (CommonMark flows) ├── subflows/ ← cross-suite helpers └── scripts/ ← runner shell scripts + setup ``` @@ -34,6 +36,12 @@ All scripts wrap `.maestro/scripts/run-tests.sh` (single platform) or `.maestro/ | `yarn test:e2e:mobile:update-screenshots` | Refresh golden screenshots for both platforms instead of asserting. | | `yarn test:e2e:ios:update-screenshots` | Refresh golden screenshots for iOS only. | | `yarn test:e2e:android:update-screenshots` | Refresh golden screenshots for Android only. | +| `yarn test:e2e:ios-native` | CommonMark E2E tests on the native iOS example app. | +| `yarn test:e2e:ios-native:smoke` | Smoke CommonMark tests on the native iOS example app. | +| `yarn test:e2e:ios-native:update-screenshots` | Refresh golden screenshots for the native iOS example app. | +| `yarn test:e2e:android-native` | CommonMark E2E tests on the native Android example app. | +| `yarn test:e2e:android-native:smoke` | Smoke CommonMark tests on the native Android example app. | +| `yarn test:e2e:android-native:update-screenshots` | Refresh golden screenshots for the native Android example app. | ### When to use which diff --git a/.maestro/iosExample/config-commonmark-smoke.yaml b/.maestro/iosExample/config-commonmark-smoke.yaml new file mode 100644 index 000000000..6cd303de2 --- /dev/null +++ b/.maestro/iosExample/config-commonmark-smoke.yaml @@ -0,0 +1,4 @@ +flows: + - "iosExample/enrichedMarkdownText/flows/**" +includeTags: + - smoke diff --git a/.maestro/iosExample/config-commonmark.yaml b/.maestro/iosExample/config-commonmark.yaml new file mode 100644 index 000000000..07cce92f9 --- /dev/null +++ b/.maestro/iosExample/config-commonmark.yaml @@ -0,0 +1,2 @@ +flows: + - "iosExample/enrichedMarkdownText/flows/**" diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_code_block_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_code_block_combo_test.yaml new file mode 100644 index 000000000..4e6661e2d --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_code_block_combo_test.yaml @@ -0,0 +1,34 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - blockquote + - code_block + - text +--- +# checks the combination of blockquotes and code blocks (quoted context around code) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + > From the docs: + + ``` + npm install my-package + ``` + + > Then import it: + + ```js + import pkg from 'my-package' + ``` + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'blockquote_code_block_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_image_combo_test.yaml new file mode 100644 index 000000000..342fe4d0b --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_image_combo_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - blockquote + - text +--- +# checks the combination of a blockquote followed by a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + > A quoted line before the image. + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'blockquote_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_list_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_list_combo_test.yaml new file mode 100644 index 000000000..b121f9008 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/blockquote_list_combo_test.yaml @@ -0,0 +1,33 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - blockquote + - list + - text +--- +# checks the combination of blockquotes and lists (quoted content adjacent to list items) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + > Key principles: + + - Keep it simple + - Be consistent + - Test everything + + > Avoid: + + 1. Over-engineering + 2. Premature optimization + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'blockquote_list_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/code_block_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/code_block_image_combo_test.yaml new file mode 100644 index 000000000..c3d5e228b --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/code_block_image_combo_test.yaml @@ -0,0 +1,32 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - code_block + - text +--- +# checks the combination of a code block followed by a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ``` + print("hello world") + ``` + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'code_block_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_blockquote_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_blockquote_combo_test.yaml new file mode 100644 index 000000000..05e20879c --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_blockquote_combo_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - blockquote + - header + - text +--- +# checks the combination of headers and blockquotes (section headers with quoted content) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ## Famous Quote + + > The only way to do great work is to love what you do. + + ## Another Quote + + > In the middle of difficulty lies opportunity. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_blockquote_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_code_block_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_code_block_combo_test.yaml new file mode 100644 index 000000000..f45253c28 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_code_block_combo_test.yaml @@ -0,0 +1,35 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - code_block + - header + - text +--- +# checks the combination of headers and code blocks (section headers above code snippets) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ## Installation + + ``` + npm install + ``` + + ## Usage + + ```js + import { run } from './app' + run() + ``` + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_code_block_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_image_combo_test.yaml new file mode 100644 index 000000000..9b4d62e14 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_image_combo_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - header + - text +--- +# checks the combination of a header followed by a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ## Logo + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_list_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_list_combo_test.yaml new file mode 100644 index 000000000..4cf10623a --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_list_combo_test.yaml @@ -0,0 +1,34 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - header + - list + - text +--- +# checks the combination of headers and lists (section headers followed by list items) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ## Ingredients + + - Flour + - Eggs + - Butter + + ## Steps + + 1. Mix dry ingredients + 2. Add wet ingredients + 3. Bake at 180C + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_list_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_paragraph_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_paragraph_combo_test.yaml new file mode 100644 index 000000000..7ac93c9a8 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/header_paragraph_combo_test.yaml @@ -0,0 +1,31 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - header + - paragraph + - text +--- +# checks the combination of headers and paragraphs (spacing, visual separation) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + # Section One + Short intro paragraph. + + ## Subsection + Another short paragraph. + + ### Deep section + Final paragraph. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_paragraph_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/list_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/list_image_combo_test.yaml new file mode 100644 index 000000000..2a2d6fdbf --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/list_image_combo_test.yaml @@ -0,0 +1,32 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - list + - text +--- +# checks the combination of a list followed by a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + - Item one + - Item two + - Item three + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'list_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_blockquote_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_blockquote_combo_test.yaml new file mode 100644 index 000000000..c7b63c9d3 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_blockquote_combo_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - blockquote + - paragraph + - text +--- +# checks the combination of paragraphs and blockquotes (interleaved flow) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + A paragraph before a quote. + + > This is a blockquote. + + A paragraph after the quote. + + > Another blockquote at the end. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'paragraph_blockquote_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_code_block_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_code_block_combo_test.yaml new file mode 100644 index 000000000..4fe4c301f --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_code_block_combo_test.yaml @@ -0,0 +1,31 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - code_block + - paragraph + - text +--- +# checks the combination of paragraphs and code blocks (prose around code) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Call the function like this: + + ``` + result = add(1, 2) + print(result) + ``` + + Then check the output above. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'paragraph_code_block_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_image_combo_test.yaml new file mode 100644 index 000000000..c53dd966e --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_image_combo_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - paragraph + - text +--- +# checks the combination of a paragraph followed by a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + A short paragraph before the image. + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'paragraph_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_list_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_list_combo_test.yaml new file mode 100644 index 000000000..b7fd50c79 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/paragraph_list_combo_test.yaml @@ -0,0 +1,36 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - list + - paragraph + - text +--- +# checks the combination of paragraphs and lists (unordered and ordered adjacent to prose) +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Pick a fruit: + + - Apple + - Banana + - Mango + + Then pick a number: + + 1. One + 2. Two + 3. Three + + Done. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'paragraph_list_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_combo_test.yaml new file mode 100644 index 000000000..9864ffd23 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_combo_test.yaml @@ -0,0 +1,42 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - text + - thematic_break +--- +# checks thematic breaks separating different block element types +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + A paragraph before a break. + + --- + + > A blockquote after a break. + + --- + + - List item one + - List item two + + --- + + ``` + code block + ``` + + --- + + ## Header after break + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'thematic_break_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_image_combo_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_image_combo_test.yaml new file mode 100644 index 000000000..22f09b642 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/advanced/block_elements/thematic_break_image_combo_test.yaml @@ -0,0 +1,32 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - block + - advanced + - image + - text + - thematic_break +--- +# checks the combination of thematic breaks surrounding a block image +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Content above the break. + + --- + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'thematic_break_image_combo_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/blockquote_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/blockquote_test.yaml new file mode 100644 index 000000000..aa8e3407f --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/blockquote_test.yaml @@ -0,0 +1,26 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - blockquote + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + > this is a text inside a blockquote + + >this is also a text inside a blockquote + + .>this isn't + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'blockquote_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/code_block_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/code_block_test.yaml new file mode 100644 index 000000000..d8f84e325 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/code_block_test.yaml @@ -0,0 +1,29 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - code_block + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + ``` + sum = 0 + for i in range(20): + print(i % 3) + sum += i % 3 + print(sum) + ``` + + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'code_block_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/header_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/header_test.yaml new file mode 100644 index 000000000..d7993fd90 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/header_test.yaml @@ -0,0 +1,28 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - header + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + # H1 + ## H2 + ### H3 + #### H4 + ##### H5 + ###### H6 + ####### H not existing + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'header_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/image_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/image_test.yaml new file mode 100644 index 000000000..6532c64eb --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/image_test.yaml @@ -0,0 +1,22 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - image + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- tapOn: + id: insert-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'image_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/mixed_nested_list_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/mixed_nested_list_test.yaml new file mode 100644 index 000000000..dc444b247 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/mixed_nested_list_test.yaml @@ -0,0 +1,31 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - list + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + - Frontend + - React + - Hooks + - Components + - Vue + - Backend + - Node.js + - Python + 1. Django + 2. FastAPI + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'mixed_nested_list_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_blockquote_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_blockquote_test.yaml new file mode 100644 index 000000000..6cd18e6da --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_blockquote_test.yaml @@ -0,0 +1,29 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - blockquote + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + > top-level blockquote + >> nested blockquote inside the first + >>> deeply nested blockquote + + > outer + >> nested + > + > outer + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'nested_blockquote_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_ordered_list_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_ordered_list_test.yaml new file mode 100644 index 000000000..a75757e7e --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_ordered_list_test.yaml @@ -0,0 +1,27 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - list + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + 1. First + 1. Nested + 1. Deep nested + 2. Deep nested + 2. Nested + 2. First + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'nested_ordered_list_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_unordered_list_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_unordered_list_test.yaml new file mode 100644 index 000000000..cc0852e96 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/nested_unordered_list_test.yaml @@ -0,0 +1,27 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - list + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + - Item + - Nested + - Deep nested + - Deep nested + - Nested + - Item + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'nested_unordered_list_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/ordered_list_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/ordered_list_test.yaml new file mode 100644 index 000000000..6424a0df0 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/ordered_list_test.yaml @@ -0,0 +1,26 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - list + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + 1. Preheat oven to 180C + 2. Mix flour, sugar, and butter + 3. Add eggs and vanilla extract + 4. Pour into a greased tin + 5. Bake for 30 minutes + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'ordered_list_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/paragraph_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/paragraph_test.yaml new file mode 100644 index 000000000..b7f7e420c --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/paragraph_test.yaml @@ -0,0 +1,22 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - paragraph + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'paragraph_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/thematic_break_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/thematic_break_test.yaml new file mode 100644 index 000000000..20f3bb4c9 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/thematic_break_test.yaml @@ -0,0 +1,30 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - text + - thematic_break +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Above the first break + + --- + + Between the breaks + + *** + + Below the last break + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'thematic_break_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/unordered_list_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/unordered_list_test.yaml new file mode 100644 index 000000000..f4cd47c8c --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/block_elements/unordered_list_test.yaml @@ -0,0 +1,27 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - block + - list + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + - Apples + - Bananas + - Mango + * Dragonfruit + * Guava + * Fig + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'unordered_list_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/bold_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/bold_test.yaml new file mode 100644 index 000000000..f5d686f6a --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/bold_test.yaml @@ -0,0 +1,25 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - inline + - bold + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- tapOn: + id: underline-button + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + **Bold text** and normal text and __more bold__. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'bold_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_code_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_code_test.yaml new file mode 100644 index 000000000..88afaf223 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_code_test.yaml @@ -0,0 +1,22 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - inline + - inline_code + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Use `pthread*` to debug and `null` to clear. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'inline_code_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_image_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_image_test.yaml new file mode 100644 index 000000000..dd7e6ee0f --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/inline_image_test.yaml @@ -0,0 +1,22 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - inline + - image + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- tapOn: + id: insert-inline-image-button + +- tapOn: + id: blur-button + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'inline_image_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/italic_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/italic_test.yaml new file mode 100644 index 000000000..1459c6094 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/italic_test.yaml @@ -0,0 +1,25 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - inline + - italic + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- tapOn: + id: underline-button + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + *Italic text* and normal text and _also italic_. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'italic_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/link_test.yaml b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/link_test.yaml new file mode 100644 index 000000000..794883a5d --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/flows/basic/inline_elements/link_test.yaml @@ -0,0 +1,22 @@ +appId: swmansion.enriched.markdown.ios.example +tags: + - smoke + - inline + - link + - text +--- +- launchApp + +- runFlow: + file: '../../../../subflows/move_to_playground.yaml' + +- runFlow: + file: '../../../subflows/set_enriched_text_value.yaml' + env: + VALUE: | + Visit [React Native](https://reactnative.dev) for docs. + +- runFlow: + file: '../../../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'link_display' diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_code_block_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_code_block_combo_display.png new file mode 100644 index 000000000..ebd74793f Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_code_block_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_display.png new file mode 100644 index 000000000..33802702f Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_image_combo_display.png new file mode 100644 index 000000000..99e2353f9 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_list_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_list_combo_display.png new file mode 100644 index 000000000..ddcdf5804 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/blockquote_list_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/bold_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/bold_display.png new file mode 100644 index 000000000..38b5d82ec Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/bold_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_display.png new file mode 100644 index 000000000..c65637018 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_image_combo_display.png new file mode 100644 index 000000000..845fc478f Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/code_block_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_blockquote_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_blockquote_combo_display.png new file mode 100644 index 000000000..9a4f85702 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_blockquote_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_code_block_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_code_block_combo_display.png new file mode 100644 index 000000000..fae866494 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_code_block_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_display.png new file mode 100644 index 000000000..f5943a02a Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_image_combo_display.png new file mode 100644 index 000000000..5f71158f6 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_list_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_list_combo_display.png new file mode 100644 index 000000000..826180c35 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_list_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_paragraph_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_paragraph_combo_display.png new file mode 100644 index 000000000..2be2c26bb Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/header_paragraph_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/image_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/image_display.png new file mode 100644 index 000000000..80075e9dc Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/image_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_code_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_code_display.png new file mode 100644 index 000000000..10b6ca5f1 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_code_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_image_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_image_display.png new file mode 100644 index 000000000..5a7edf68a Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/inline_image_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/italic_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/italic_display.png new file mode 100644 index 000000000..b91b371a7 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/italic_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/link_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/link_display.png new file mode 100644 index 000000000..c177d99bb Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/link_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/list_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/list_image_combo_display.png new file mode 100644 index 000000000..8d930df86 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/list_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/mixed_nested_list_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/mixed_nested_list_display.png new file mode 100644 index 000000000..b03483f90 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/mixed_nested_list_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_blockquote_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_blockquote_display.png new file mode 100644 index 000000000..3cd908778 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_blockquote_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_ordered_list_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_ordered_list_display.png new file mode 100644 index 000000000..e919004de Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_ordered_list_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_unordered_list_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_unordered_list_display.png new file mode 100644 index 000000000..bc0c38804 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/nested_unordered_list_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/ordered_list_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/ordered_list_display.png new file mode 100644 index 000000000..7171b2217 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/ordered_list_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_blockquote_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_blockquote_combo_display.png new file mode 100644 index 000000000..92e722f7d Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_blockquote_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_code_block_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_code_block_combo_display.png new file mode 100644 index 000000000..e230bff2a Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_code_block_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_display.png new file mode 100644 index 000000000..8852933a2 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_image_combo_display.png new file mode 100644 index 000000000..f1a04c290 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_list_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_list_combo_display.png new file mode 100644 index 000000000..f6e4116f1 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/paragraph_list_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_combo_display.png new file mode 100644 index 000000000..b55118c55 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_display.png new file mode 100644 index 000000000..f9e296b99 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_image_combo_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_image_combo_display.png new file mode 100644 index 000000000..9f7a19995 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/thematic_break_image_combo_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/unordered_list_display.png b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/unordered_list_display.png new file mode 100644 index 000000000..6f48558a4 Binary files /dev/null and b/.maestro/iosExample/enrichedMarkdownText/screenshots/ios/unordered_list_display.png differ diff --git a/.maestro/iosExample/enrichedMarkdownText/subflows/capture_or_assert_screenshot.yaml b/.maestro/iosExample/enrichedMarkdownText/subflows/capture_or_assert_screenshot.yaml new file mode 100644 index 000000000..069683ddf --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/subflows/capture_or_assert_screenshot.yaml @@ -0,0 +1,7 @@ +appId: swmansion.enriched.markdown.ios.example +--- +- runFlow: + file: '../../subflows/capture_or_assert_screenshot.yaml' + env: + ELEMENT_ID: 'preview-container' + SCREENSHOT_PREFIX: 'iosExample/enrichedMarkdownText' diff --git a/.maestro/iosExample/enrichedMarkdownText/subflows/set_enriched_text_value.yaml b/.maestro/iosExample/enrichedMarkdownText/subflows/set_enriched_text_value.yaml new file mode 100644 index 000000000..f6f9e99a5 --- /dev/null +++ b/.maestro/iosExample/enrichedMarkdownText/subflows/set_enriched_text_value.yaml @@ -0,0 +1,13 @@ +appId: swmansion.enriched.markdown.ios.example +--- + +- tapOn: + id: set-markdown-button + +- tapOn: + id: set-markdown-input + +- inputText: ${VALUE} + +- tapOn: + id: set-markdown-confirm diff --git a/.maestro/iosExample/subflows/capture_or_assert_screenshot.yaml b/.maestro/iosExample/subflows/capture_or_assert_screenshot.yaml new file mode 100644 index 000000000..cbaa0b182 --- /dev/null +++ b/.maestro/iosExample/subflows/capture_or_assert_screenshot.yaml @@ -0,0 +1,20 @@ +appId: swmansion.enriched.markdown.ios.example +--- +- runFlow: + when: + true: ${UPDATE_SCREENSHOTS === "true"} + commands: + - takeScreenshot: + path: "${SCREENSHOT_ROOT}/${SCREENSHOT_PREFIX}/screenshots/${maestro.platform}/${SCREENSHOT_NAME}" + cropOn: + id: "${ELEMENT_ID}" + +- runFlow: + when: + true: ${UPDATE_SCREENSHOTS !== "true"} + commands: + - assertScreenshot: + path: "${SCREENSHOT_ROOT}/${SCREENSHOT_PREFIX}/screenshots/${maestro.platform}/${SCREENSHOT_NAME}" + thresholdPercentage: 100 + cropOn: + id: "${ELEMENT_ID}" diff --git a/.maestro/iosExample/subflows/move_to_playground.yaml b/.maestro/iosExample/subflows/move_to_playground.yaml new file mode 100644 index 000000000..482a8e638 --- /dev/null +++ b/.maestro/iosExample/subflows/move_to_playground.yaml @@ -0,0 +1,4 @@ +appId: swmansion.enriched.markdown.ios.example +--- +- tapOn: + id: home-block-playground diff --git a/.maestro/scripts/run-tests.sh b/.maestro/scripts/run-tests.sh index a4badf318..358ec7a29 100755 --- a/.maestro/scripts/run-tests.sh +++ b/.maestro/scripts/run-tests.sh @@ -8,7 +8,7 @@ # Opts: # --platform Required. Target platform, either ios or android. # -# --app Which app to test: rn (default) or android-native. +# --app Which app to test: rn (default), android-native, or ios-native. # # --config Path to a Maestro config.yaml to use for tag filtering and # flow discovery. When set, defaults to the enrichedMarkdownText @@ -88,6 +88,8 @@ if [ -z "$FLOWS" ]; then FLOWS="$MAESTRO_ROOT" elif [ "$APP" = "android-native" ]; then FLOWS="$MAESTRO_ROOT/androidExample/enrichedMarkdownText/flows" + elif [ "$APP" = "ios-native" ]; then + FLOWS="$MAESTRO_ROOT/iosExample/enrichedMarkdownText/flows" else FLOWS=$(find "$MAESTRO_ROOT/enrichedMarkdownText/flows" "$MAESTRO_ROOT/enrichedMarkdownInput/flows" -name "*.yaml" -exec dirname {} \; 2>/dev/null | sort -u | tr '\n' ' ') fi @@ -104,8 +106,15 @@ case "$APP" in exit 1 fi ;; + ios-native) + BUNDLE_ID="swmansion.enriched.markdown.ios.example" + if [ "$PLATFORM" != ios ]; then + echo "Error: --app ios-native requires --platform ios" >&2 + exit 1 + fi + ;; *) - echo "Error: unknown --app value '$APP'. Use rn or android-native." >&2 + echo "Error: unknown --app value '$APP'. Use rn, android-native, or ios-native." >&2 exit 1 ;; esac @@ -116,7 +125,9 @@ case "$PLATFORM" in *) echo "Error: --platform is required. (--platform )" >&2; exit 1 ;; esac -DEVICE_ID=$("$SETUP" | tee /dev/tty | grep "^DEVICE_ID=" | cut -d= -f2) +SETUP_OUTPUT=$("$SETUP" 2>&1) +echo "$SETUP_OUTPUT" +DEVICE_ID=$(echo "$SETUP_OUTPUT" | grep "^DEVICE_ID=" | cut -d= -f2) shutdown_device() { if [ "$PLATFORM" = ios ]; then @@ -141,6 +152,14 @@ if [ -n "$REBUILD" ] || ! app_installed; then if [ "$APP" = "android-native" ]; then ANDROID_SERIAL="$DEVICE_ID" yarn android-example build adb -s "$DEVICE_ID" install -r "$REPO_ROOT/apps/android-example/app/build/outputs/apk/debug/app-debug.apk" + elif [ "$APP" = "ios-native" ]; then + IOS_SIMULATOR_UDID="$DEVICE_ID" yarn ios-example build + IOS_APP=$(find "$REPO_ROOT/apps/ios-example/build" -name 'EnrichedMarkdownExample.app' -path '*Debug-iphonesimulator*' | head -1) + if [ -z "$IOS_APP" ]; then + echo "Error: EnrichedMarkdownExample.app not found after build" >&2 + exit 1 + fi + xcrun simctl install "$DEVICE_ID" "$IOS_APP" elif [ "$PLATFORM" = ios ]; then yarn react-native-example ios --udid "$DEVICE_ID" else diff --git a/.maestro/scripts/setup-ios-simulator.sh b/.maestro/scripts/setup-ios-simulator.sh index cc5cebbde..cbb516cca 100755 --- a/.maestro/scripts/setup-ios-simulator.sh +++ b/.maestro/scripts/setup-ios-simulator.sh @@ -2,7 +2,7 @@ set -euo pipefail DEVICE_TYPE="com.apple.CoreSimulator.SimDeviceType.iPhone-17" -IOS_VERSION="26.3" +IOS_VERSION="26.5" RUNTIME="com.apple.CoreSimulator.SimRuntime.iOS-$(echo "$IOS_VERSION" | tr '.' '-')" RUNTIME_LABEL="iOS $IOS_VERSION" DEVICE_NAME="iPhone17-iOS${IOS_VERSION}-Enriched-Markdown" diff --git a/.maestro/scripts/sync-ios-example-flows.sh b/.maestro/scripts/sync-ios-example-flows.sh new file mode 100755 index 000000000..3cbeb4df8 --- /dev/null +++ b/.maestro/scripts/sync-ios-example-flows.sh @@ -0,0 +1,59 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +SRC="$REPO_ROOT/.maestro/enrichedMarkdownText/flows" +DST="$REPO_ROOT/.maestro/iosExample/enrichedMarkdownText/flows" +NATIVE_APP_ID="swmansion.enriched.markdown.ios.example" + +COMMONMARK_EXCLUDE=( + table_test + task_list_test + math_display_test + highlight_test + spoiler_test + strikethrough_test + underline_test + inline_math_test + header_table_combo_test + paragraph_table_combo_test + list_table_combo_test + table_image_combo_test + code_block_math_combo_test + paragraph_math_combo_test + task_list_ordered_list_combo_test + highlight_bold_combo_test + highlight_italic_combo_test + highlight_spoiler_combo_test + highlight_strikethrough_combo_test + highlight_underline_combo_test +) + +should_exclude() { + local base="$1" + for excluded in "${COMMONMARK_EXCLUDE[@]}"; do + if [ "$base" = "$excluded" ]; then + return 0 + fi + done + return 1 +} + +rm -rf "$DST" +mkdir -p "$DST" + +while IFS= read -r -d '' file; do + base="$(basename "$file" .yaml)" + if should_exclude "$base"; then + continue + fi + + rel="${file#$SRC/}" + out="$DST/$rel" + mkdir -p "$(dirname "$out")" + sed "s/swmansion.enriched.markdown.example/$NATIVE_APP_ID/g" "$file" > "$out" +done < <(find "$SRC" -name '*.yaml' -print0) + +count="$(find "$DST" -name '*.yaml' | wc -l | tr -d ' ')" +echo "Synced $count CommonMark flows to $DST" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0277d8b2b..99ed5a977 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -87,6 +87,8 @@ Remember to add Maestro E2E tests for your change when behavior is user-visible. yarn test:e2e:ios yarn test:e2e:android yarn test:e2e:mobile # both platforms sequentially +yarn test:e2e:ios-native # native iOS example app (CommonMark only) +yarn test:e2e:android-native # native Android example app (CommonMark only) ``` The test script names follow the pattern `test:e2e[:]:[:update-screenshots]`: @@ -174,6 +176,12 @@ The `package.json` file contains various scripts for common tasks: - `yarn test:e2e:ios:update-screenshots`: refresh iOS screenshot baselines. - `yarn test:e2e:android:update-screenshots`: refresh Android screenshot baselines. - `yarn test:e2e:mobile:update-screenshots`: refresh screenshot baselines for both platforms. +- `yarn test:e2e:ios-native`: run CommonMark E2E tests on the native iOS example app. +- `yarn test:e2e:ios-native:smoke`: smoke CommonMark tests on the native iOS example app. +- `yarn test:e2e:ios-native:update-screenshots`: refresh native iOS example screenshot baselines. +- `yarn test:e2e:android-native`: run CommonMark E2E tests on the native Android example app. +- `yarn test:e2e:android-native:smoke`: smoke CommonMark tests on the native Android example app. +- `yarn test:e2e:android-native:update-screenshots`: refresh native Android example screenshot baselines. ### Sending a pull request diff --git a/apps/ios-example/package.json b/apps/ios-example/package.json index f7fddd984..6e526176b 100644 --- a/apps/ios-example/package.json +++ b/apps/ios-example/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "build": "xcodebuild -project EnrichedMarkdownExample/EnrichedMarkdownExample.xcodeproj -scheme EnrichedMarkdownExample -destination 'platform=iOS Simulator,name=iPhone 17' -derivedDataPath build build", + "build": "xcodebuild -project EnrichedMarkdownExample/EnrichedMarkdownExample.xcodeproj -scheme EnrichedMarkdownExample -destination \"platform=iOS Simulator,id=${IOS_SIMULATOR_UDID:-booted}\" -derivedDataPath build build", "start": "yarn build && xcrun simctl boot 'iPhone 17' 2>/dev/null || true && open -a Simulator && APP=$(find build -name 'EnrichedMarkdownExample.app' -path '*Debug-iphonesimulator*' | head -1) && xcrun simctl install booted \"$APP\" && xcrun simctl launch booted swmansion.enriched.markdown.ios.example", "clean": "rm -rf build" } diff --git a/package.json b/package.json index 8eb3e2f09..cc3e86297 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,9 @@ "test:e2e:android-native": ".maestro/scripts/run-tests.sh --platform android --app android-native --config .maestro/androidExample/config-commonmark.yaml", "test:e2e:android-native:smoke": ".maestro/scripts/run-tests.sh --platform android --app android-native --config .maestro/androidExample/config-commonmark-smoke.yaml", "test:e2e:android-native:update-screenshots": ".maestro/scripts/run-tests.sh --platform android --app android-native --config .maestro/androidExample/config-commonmark.yaml --update-screenshots", + "test:e2e:ios-native": ".maestro/scripts/run-tests.sh --platform ios --app ios-native --config .maestro/iosExample/config-commonmark.yaml", + "test:e2e:ios-native:smoke": ".maestro/scripts/run-tests.sh --platform ios --app ios-native --config .maestro/iosExample/config-commonmark-smoke.yaml", + "test:e2e:ios-native:update-screenshots": ".maestro/scripts/run-tests.sh --platform ios --app ios-native --config .maestro/iosExample/config-commonmark.yaml --update-screenshots", "test:e2e:android": ".maestro/scripts/run-tests.sh --platform android", "test:e2e:ios": ".maestro/scripts/run-tests.sh --platform ios", "test:e2e:smoke:mobile": ".maestro/scripts/run-all-tests.sh --config .maestro/config-smoke.yaml",