From 6b98f0f8361e031e52200c021366a76ec734fcf2 Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 11:37:24 +0000 Subject: [PATCH 1/7] chore: Website - theme improvements --- docs/api/matchers.md | 4 +- docs/api/methods.md | 4 +- website/docusaurus.config.js | 6 ++ website/src/components/Hero/index.tsx | 2 +- website/src/components/Hero/styles.module.css | 4 ++ website/src/theme/AnnouncementBar/index.tsx | 50 +++++++++++++++++ .../theme/AnnouncementBar/styles.module.css | 55 +++++++++++++++++++ 7 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 website/src/theme/AnnouncementBar/index.tsx create mode 100644 website/src/theme/AnnouncementBar/styles.module.css diff --git a/docs/api/matchers.md b/docs/api/matchers.md index 8d8baaa1..35a2d07d 100644 --- a/docs/api/matchers.md +++ b/docs/api/matchers.md @@ -12,7 +12,7 @@ This custom matcher will try to find and compare the baseline screenshot by usin #### Example -```js +```js {7} import { takeScreenshot } from 'react-native-owl'; describe('App.tsx', () => { @@ -26,4 +26,4 @@ describe('App.tsx', () => { The first time this test is run, or when run with the `--update` flag, the `.toMatchBaseline` expectation will always be successful. -On subsequent test runs, the screenshot captured by `takeScreenshot` (and stored in `/current`) will be compared to the baseline screenshot. ***Any*** differences will cause the expectation to fail, and the report to be generated. \ No newline at end of file +On subsequent test runs, the screenshot captured by `takeScreenshot` (and stored in `/current`) will be compared to the baseline screenshot. **_Any_** differences will cause the expectation to fail, and the report to be generated. diff --git a/docs/api/methods.md b/docs/api/methods.md index b1b47b7d..ad7e3bfe 100644 --- a/docs/api/methods.md +++ b/docs/api/methods.md @@ -12,7 +12,7 @@ Grabs a screenshot from the simulator and stores it under `latest` screenshots(i #### Example -```js +```js {5} import { takeScreenshot } from 'react-native-owl'; describe('App.tsx', () => { @@ -26,4 +26,4 @@ describe('App.tsx', () => { The first time this test is run, or when run with the `--update` flag, the screenshot will be stored at `./owl/baseline/ios/homescreen.png` (or `/android/` is testing on Android). -On subsequent test runs, the screenshot will be stored at `./owl/current/ios/homescreen.png`. \ No newline at end of file +On subsequent test runs, the screenshot will be stored at `./owl/current/ios/homescreen.png`. diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 793c31e1..4d774fc8 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -49,6 +49,11 @@ const config = { disableSwitch: true, respectPrefersColorScheme: false, }, + announcementBar: { + id: 'announcement-blogpost', + content: `Read the announcement "We're Building a Visual Regression Testing Library for React Native" in our blog.`, + isCloseable: false, + }, navbar: { style: 'dark', title: 'React Native Owl', @@ -126,6 +131,7 @@ const config = { ], }, prism: { + defaultLanguage: 'javascript', theme: lightCodeTheme, darkTheme: darkCodeTheme, }, diff --git a/website/src/components/Hero/index.tsx b/website/src/components/Hero/index.tsx index 469f972f..c13f91a2 100644 --- a/website/src/components/Hero/index.tsx +++ b/website/src/components/Hero/index.tsx @@ -39,7 +39,7 @@ export const Hero = () => {
- + {heroExample}
diff --git a/website/src/components/Hero/styles.module.css b/website/src/components/Hero/styles.module.css index 2472e13a..076ea5fc 100644 --- a/website/src/components/Hero/styles.module.css +++ b/website/src/components/Hero/styles.module.css @@ -45,6 +45,10 @@ margin-bottom: 0.75rem; } +.codeSample { + width: 100%; +} + .codeSampleWrapper { margin-top: 2rem; } diff --git a/website/src/theme/AnnouncementBar/index.tsx b/website/src/theme/AnnouncementBar/index.tsx new file mode 100644 index 00000000..36a3e826 --- /dev/null +++ b/website/src/theme/AnnouncementBar/index.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import clsx from 'clsx'; +import { useThemeConfig, useAnnouncementBar } from '@docusaurus/theme-common'; +import { translate } from '@docusaurus/Translate'; +import IconClose from '@theme/IconClose'; + +import styles from './styles.module.css'; + +function AnnouncementBar(): JSX.Element | null { + const { isActive, close } = useAnnouncementBar(); + const { announcementBar } = useThemeConfig(); + + if (!isActive) { + return null; + } + + const { content, backgroundColor, textColor, isCloseable } = announcementBar!; + + return ( +
+ {isCloseable &&
} +
+ {isCloseable ? ( + + ) : null} +
+ ); +} + +export default AnnouncementBar; diff --git a/website/src/theme/AnnouncementBar/styles.module.css b/website/src/theme/AnnouncementBar/styles.module.css new file mode 100644 index 00000000..6f2cddd5 --- /dev/null +++ b/website/src/theme/AnnouncementBar/styles.module.css @@ -0,0 +1,55 @@ +:root { + --docusaurus-announcement-bar-height: auto; +} + +.announcementBar { + display: flex; + align-items: center; + height: var(--docusaurus-announcement-bar-height); + background-color: var(--brand-orange); + color: var(--ifm-color-white); +} + +html[data-announcement-bar-initially-dismissed='true'] .announcementBar { + display: none; +} + +.announcementBarPlaceholder { + flex: 0 0 10px; +} + +.announcementBarClose { + flex: 0 0 30px; + align-self: stretch; + padding: 0; + line-height: 0; +} + +.announcementBarContent { + flex: 1 1 auto; + font-size: 85%; + text-align: center; + padding: 0.5rem 2rem; +} + +@media print { + .announcementBar { + display: none; + } +} + +.announcementBarContent a { + color: inherit; + text-decoration: underline; +} + +@media (min-width: 997px) { + :root { + --docusaurus-announcement-bar-height: 2.5rem; + } + + .announcementBarPlaceholder, + .announcementBarClose { + flex-basis: 50px; + } +} From ae2e32735c884e2c2d0e3a8dd4019c33bf428860 Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 12:42:13 +0000 Subject: [PATCH 2/7] chore: Update README.md --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9c00932c..62618314 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ -# react-native-owl [![github][github-image]][github-url] +# react-native-owl [![github][github-image]][github-url] [![npm][npm-image]][npm-url] [![docs][docs-image]][docs-url] > **Work In Progress**: Visual regression testing for React Native - - ## Installation ```sh @@ -12,14 +10,14 @@ yarn add -D react-native-owl npm install -D react-native-owl ``` -## 📃 [Documentation](https://formidable.com/open-source/react-native-owl/docs/) +## 📃 [Documentation](https://formidable.com/open-source/react-native-owl/) The documentation contains everything you need to know about `react-native-owl`, and contains several sections in order of importance when you first get started: - **[Getting started](https://formidable.com/open-source/react-native-owl/docs/introduction/getting-started)** — contains the "Getting Started" guide. -- **[Configuration](https://formidable.com/open-source/react-native-owl/introduction/config-file)** — explains all the configuration options for `react-native-owl`. -- **[Running on CI](https://formidable.com/open-source/react-native-owl/advanced/running-ci)** — example GitHub Action to run react-native-owl on CO. +- **[Configuration](https://formidable.com/open-source/react-native-owl/docs/introduction/config-file)** — explains all the configuration options for `react-native-owl`. +- **[Running on CI](https://formidable.com/open-source/react-native-owl/docs/advanced/running-ci)** — example GitHub Action to run react-native-owl on CO. _You can find the raw markdown files inside this repository's `docs` folder._ @@ -29,3 +27,7 @@ _You can find the raw markdown files inside this repository's `docs` folder._ [github-image]: https://github.com/FormidableLabs/react-native-owl/workflows/Run%20Tests/badge.svg [github-url]: https://github.com/FormidableLabs/react-native-owl/actions +[npm-image]: https://img.shields.io/npm/v/react-native-owl +[npm-url]: https://www.npmjs.com/package/react-native-owl +[docs-image]: https://img.shields.io/badge/docs-visit%20site-blue +[docs-url]: https://formidable.com/open-source/react-native-owl/ From 725530d66c62618584ec9799646c7861dae0affc Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 12:52:49 +0000 Subject: [PATCH 3/7] chore: Clean Up --- docs/advanced/running-ci.md | 2 -- docs/api/matchers.md | 2 -- docs/api/methods.md | 2 -- 3 files changed, 6 deletions(-) diff --git a/docs/advanced/running-ci.md b/docs/advanced/running-ci.md index 4ca55948..7b9211b0 100644 --- a/docs/advanced/running-ci.md +++ b/docs/advanced/running-ci.md @@ -4,8 +4,6 @@ sidebar_position: 1 # Running on CI -This is a placeholder. - :::info With visual regression testing, it is all about **consistency**. Please make sure that you use the same simulator across environments. ie. Use the same emulator to generate the baseline images and the same (model) one on CI so that the library can compare the screenshots. diff --git a/docs/api/matchers.md b/docs/api/matchers.md index 35a2d07d..0b626dbc 100644 --- a/docs/api/matchers.md +++ b/docs/api/matchers.md @@ -4,8 +4,6 @@ sidebar_position: 2 # Matchers -This is a placeholder. - ### toMatchBaseline(name: string) This custom matcher will try to find and compare the baseline screenshot by using the path of the latest screenshot (returned by `takeScreenshot()`). You will have to take a screenshot before using, and pass the path of that screenshot to the expect method. diff --git a/docs/api/methods.md b/docs/api/methods.md index ad7e3bfe..16155815 100644 --- a/docs/api/methods.md +++ b/docs/api/methods.md @@ -4,8 +4,6 @@ sidebar_position: 1 # Methods -This is a placeholder. - ### takeScreenshot(name: string) Grabs a screenshot from the simulator and stores it under `latest` screenshots(ie. `./owl/latest/ios/`) using the specified filename (no extension required). If running the tests using the `--update` or `-u` flag, or its the first time its being run, this will store the screenshot under the `baseline` directory. From 33688fa216b4719ebd3b56d81032b6b473d283e4 Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 21:48:02 +0000 Subject: [PATCH 4/7] chore: UI Improvements --- .../src/components/HomepageFeatures/index.tsx | 51 ++++++-------- .../HomepageFeatures/styles.module.css | 4 +- website/src/css/custom.css | 1 + website/static/images/homepage/diff.png | Bin 0 -> 36518 bytes website/static/images/homepage/diff.svg | 66 ------------------ 5 files changed, 23 insertions(+), 99 deletions(-) create mode 100644 website/static/images/homepage/diff.png delete mode 100644 website/static/images/homepage/diff.svg diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx index 62496380..c92896c5 100644 --- a/website/src/components/HomepageFeatures/index.tsx +++ b/website/src/components/HomepageFeatures/index.tsx @@ -4,6 +4,13 @@ import clsx from 'clsx'; import styles from './styles.module.css'; const FeatureList = [ + { + title: 'Visual regression testing', + imageSource: '/images/homepage/diff.png', + description: ( + <>We've created a simple api for capturing and comparing screenshots. + ), + }, { title: 'Take screenshots from your app', imageSource: '/images/homepage/mockup.png', @@ -14,14 +21,6 @@ const FeatureList = [ ), }, - { - title: 'Compare screenshots taken', - Svg: require('../../../static/images/homepage/diff.svg').default, - svgClassName: styles.visualExample, - description: ( - <>We've created a simple api for capturing and comparing screenshots. - ), - }, { title: 'View the differences', imageSource: '/images/homepage/report.png', @@ -35,28 +34,18 @@ const FeatureList = [ ]; export const HomepageFeatures = () => { - return FeatureList.map( - ({ Svg, svgClassName, title, description, imageSource }, idx) => { - return ( -
-
-

{title}

-

{description}

+ return FeatureList.map(({ title, description, imageSource }, idx) => { + return ( +
+

{title}

+

{description}

-
- {!!imageSource && ( - - )} - {!!Svg && ( - - )} -
-
-
- ); - } - ); +
+ {!!imageSource && ( + + )} +
+ + ); + }); }; diff --git a/website/src/components/HomepageFeatures/styles.module.css b/website/src/components/HomepageFeatures/styles.module.css index 985b32ea..23cd4d10 100644 --- a/website/src/components/HomepageFeatures/styles.module.css +++ b/website/src/components/HomepageFeatures/styles.module.css @@ -1,7 +1,7 @@ .feature { - background-color: var(--ifm-color-secondary); + background-color: var(--brand-beige); padding: 2rem; - margin: 1rem auto; + margin: 2rem auto; text-align: center; } diff --git a/website/src/css/custom.css b/website/src/css/custom.css index d1117249..6a8bdb35 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -8,6 +8,7 @@ :root { --brand-blue: #1e2852; --brand-orange: #f04d21; + --brand-beige: #ebe5da; --ifm-navbar-height: 4.25rem; diff --git a/website/static/images/homepage/diff.png b/website/static/images/homepage/diff.png new file mode 100644 index 0000000000000000000000000000000000000000..eefba9b71a1ecb13122da88732fc4fa05f91e851 GIT binary patch literal 36518 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 literal 0 HcmV?d00001 diff --git a/website/static/images/homepage/diff.svg b/website/static/images/homepage/diff.svg deleted file mode 100644 index c488a472..00000000 --- a/website/static/images/homepage/diff.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - Artboard - - - - - - - - - - - - - - Baseline - - - - - - - - - - - Latest - - - - - - - - - - - - Diff - - - - - - - - - - - - - - - - - - - - - - - - - - From a5750e234ae9ff19f506b52c68c668ed7b125131 Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 21:50:58 +0000 Subject: [PATCH 5/7] chore: Fix images path --- website/src/components/HomepageFeatures/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx index c92896c5..5d8b39b3 100644 --- a/website/src/components/HomepageFeatures/index.tsx +++ b/website/src/components/HomepageFeatures/index.tsx @@ -42,7 +42,10 @@ export const HomepageFeatures = () => {
{!!imageSource && ( - + )}
From 5bd07d8b6dd539971cb1dc8f1b5f269ec71306c1 Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 22:18:38 +0000 Subject: [PATCH 6/7] chore: Fix hero styles --- website/src/components/Hero/index.tsx | 2 +- website/src/components/Hero/styles.module.css | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/website/src/components/Hero/index.tsx b/website/src/components/Hero/index.tsx index c13f91a2..d729d06d 100644 --- a/website/src/components/Hero/index.tsx +++ b/website/src/components/Hero/index.tsx @@ -20,7 +20,7 @@ export const Hero = () => { const { siteConfig } = useDocusaurusContext(); return ( -
+
diff --git a/website/src/components/Hero/styles.module.css b/website/src/components/Hero/styles.module.css index 076ea5fc..6c30694b 100644 --- a/website/src/components/Hero/styles.module.css +++ b/website/src/components/Hero/styles.module.css @@ -3,15 +3,16 @@ * and scoped locally. */ -.heroBanner { +.hero { + color: var(--ifm-color-white); background-color: var(--brand-blue); position: relative; - z-index: 1; padding: 2rem; margin-bottom: 3rem; + z-index: 1; } -.heroBanner:after { +.hero:after { background: inherit; border-bottom: 10px solid var(--brand-orange); content: ''; @@ -28,18 +29,18 @@ -webkit-backface-visibility: hidden; } -.heroSubtitle { - font-weight: 500; - margin-bottom: 2rem; -} - -@media screen and (min-width: 966px) { - .heroBanner { +@media (min-width: 1416px) { + .hero { padding: 3rem 0 4rem; margin-bottom: 10rem; } } +.heroSubtitle { + font-weight: 500; + margin-bottom: 2rem; +} + .logoBadge { max-width: 8rem; margin-bottom: 0.75rem; @@ -53,7 +54,7 @@ margin-top: 2rem; } -@media screen and (min-width: 1025px) { +@media (min-width: 1025px) { .codeSampleWrapper { display: flex; align-items: center; From d00a940e88acacc161791feb21a45fa8c4bfc95a Mon Sep 17 00:00:00 2001 From: Manos Konstantinidis Date: Tue, 11 Jan 2022 22:44:14 +0000 Subject: [PATCH 7/7] chore: More styling improvements --- website/src/components/Hero/styles.module.css | 2 +- website/src/components/HomepageFeatures/index.tsx | 6 +++--- .../src/components/HomepageFeatures/styles.module.css | 11 +++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/website/src/components/Hero/styles.module.css b/website/src/components/Hero/styles.module.css index 6c30694b..50791164 100644 --- a/website/src/components/Hero/styles.module.css +++ b/website/src/components/Hero/styles.module.css @@ -7,7 +7,7 @@ color: var(--ifm-color-white); background-color: var(--brand-blue); position: relative; - padding: 2rem; + padding: 1.5rem; margin-bottom: 3rem; z-index: 1; } diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx index 5d8b39b3..1332f491 100644 --- a/website/src/components/HomepageFeatures/index.tsx +++ b/website/src/components/HomepageFeatures/index.tsx @@ -37,10 +37,10 @@ export const HomepageFeatures = () => { return FeatureList.map(({ title, description, imageSource }, idx) => { return (
-

{title}

-

{description}

+

{title}

+

{description}

-
+
{!!imageSource && (