diff --git a/package.json b/package.json index 4269cdd77..478040df2 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "flow": "flow", "fmt": "prettier --write \"**/*.js\"", "fmt:report": "prettier --check \"**/*.js\"", - "jest": "jest --config ./scripts/jest/config.js", + "jest": "npm-run-all \"jest:* {@}\" --", + "jest:dom": "jest --config ./scripts/jest/config.js", + "jest:node": "jest --config ./scripts/jest/config.node.js", "lint": "yarn lint:report --fix", "lint:report": "eslint packages scripts", "prerelease": "yarn test && yarn compile", diff --git a/packages/benchmarks/src/implementations/styleq/View.js b/packages/benchmarks/src/implementations/styleq/View.js index ed6012542..46c7495cd 100644 --- a/packages/benchmarks/src/implementations/styleq/View.js +++ b/packages/benchmarks/src/implementations/styleq/View.js @@ -11,7 +11,7 @@ function View(props) { const styles = { root: { $$css: true, - 'css-13b7bgz': 'css-13b7bgz' + 'css-175oi2r': 'css-175oi2r' } }; diff --git a/packages/docs/src/pages/docs/apis/i18n-manager.md b/packages/docs/src/pages/docs/apis/i18n-manager.md index d45e3ed28..7a331a661 100644 --- a/packages/docs/src/pages/docs/apis/i18n-manager.md +++ b/packages/docs/src/pages/docs/apis/i18n-manager.md @@ -35,10 +35,6 @@ Force the application to display in RTL mode. Determine how the application is handling bidi layout. {% endcall %} -{% call macro.prop('swapLeftAndRightInRTL', '(boolean) => void') %} -Control whether the application swaps `left`/`right` styles in RTL mode. It is recommended that applications rely on `start`/`end` styles and disable automatic BiDi-flipping of `left`/`right` styles. -{% endcall %} - {% call macro.prop('setPreferredLanguageRTL', '(boolean) => void') %} Set the application's preferred writing direction to RTL. You may need to infer the user's preferred locale on the server (from HTTP headers) and decide whether it's an RTL language. (Web-only) {% endcall %} @@ -51,10 +47,6 @@ The object returned by `I18nManager.getConstants()`. Whether the application is currently in RTL mode. {% endcall %} -{% call macro.prop('doLeftAndRightSwapInRTL', 'boolean = true') %} -Whether the application swaps left/right styles in RTL mode. -{% endcall %} - --- ## Examples diff --git a/packages/docs/src/pages/docs/concepts/localization.md b/packages/docs/src/pages/docs/concepts/localization.md index 0e7fcef69..edbcb26d6 100644 --- a/packages/docs/src/pages/docs/concepts/localization.md +++ b/packages/docs/src/pages/docs/concepts/localization.md @@ -30,7 +30,7 @@ return ( ); ``` -The non-standard [direction-independent style properties]({{ '/docs/styling/#non-standard-properties' | url }}) should also be used as much as possible. {{ site.name }} will automatically flip the direction of these properties when the application is re-rendered after using `I18nManager` to enable RTL mode. +The non-standard [direction-independent style properties]({{ '/docs/styling/#non-standard-properties' | url }}) should also be used as much as possible. {{ site.name }} will automatically flip the direction of these properties within subtrees based on the value of the `dir` prop on `View` or `Text` elements in the ancestral hierarchy. ```jsx // "start" is "left" for LTR and "right" for RTL diff --git a/packages/dom-event-testing-library/src/__tests__/index-test.js b/packages/dom-event-testing-library/src/__tests__/index-test.js index c78a6bdb4..585184798 100644 --- a/packages/dom-event-testing-library/src/__tests__/index-test.js +++ b/packages/dom-event-testing-library/src/__tests__/index-test.js @@ -1,5 +1,3 @@ -/* eslint-env jasmine, jest */ - /** * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/packages/dom-event-testing-library/src/domEnvironment.js b/packages/dom-event-testing-library/src/domEnvironment.js index 8771cbd15..2a9bca8bc 100644 --- a/packages/dom-event-testing-library/src/domEnvironment.js +++ b/packages/dom-event-testing-library/src/domEnvironment.js @@ -1,5 +1,3 @@ -/* eslint-env jasmine, jest */ - /** * Copyright (c) Facebook, Inc. and its affiliates. * @@ -7,8 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -'use strict'; - /** * Change environment support for PointerEvent. */ diff --git a/packages/dom-event-testing-library/src/testHelpers.js b/packages/dom-event-testing-library/src/testHelpers.js index 519e9811c..19d2c9ecf 100644 --- a/packages/dom-event-testing-library/src/testHelpers.js +++ b/packages/dom-event-testing-library/src/testHelpers.js @@ -1,5 +1,3 @@ -/* eslint-env jasmine, jest */ - /** * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/packages/react-native-web/jest/setup.js b/packages/react-native-web/jest/setup.js index 4cbf67909..5d5bbe443 100644 --- a/packages/react-native-web/jest/setup.js +++ b/packages/react-native-web/jest/setup.js @@ -1,4 +1,9 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ 'use strict'; diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index 903438213..607e2e7a1 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -16,12 +16,11 @@ "!**/__tests__" ], "dependencies": { - "array-find-index": "^1.0.2", "create-react-class": "^15.7.0", "fbjs": "^3.0.0", - "hyphenate-style-name": "^1.0.4", "inline-style-prefixer": "^6.0.0", "normalize-css-color": "^1.0.2", + "postcss-value-parser": "^4.2.0", "prop-types": "^15.6.0", "styleq": "0.0.0-b4fc5da" }, diff --git a/packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap index a90a59708..51d701c6e 100644 --- a/packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap @@ -5,11 +5,11 @@ exports[`components/ActivityIndicator prop "accessibilityLabel" value is set 1`] aria-label="accessibility label" aria-valuemax="1" aria-valuemin="0" - class="css-view-13b7bgz r-alignItems-1awozwy r-justifyContent-1777fci" + class="css-view-175oi2r r-alignItems-1awozwy r-justifyContent-1777fci" role="progressbar" >
*{pointer-events:auto;} -.r-pointerEvents-12vffkv{pointer-events:none!important;} -.r-pointerEvents-633pao{pointer-events:none!important;} -.r-pointerEvents-ah5dr5>*{pointer-events:none;} -.r-pointerEvents-ah5dr5{pointer-events:auto!important;} -.r-position-u8s1d{position:absolute;} -.r-right-zchlnj{right:0px;} -.r-top-ipm5af{top:0px;}" -`; - -exports[`AppRegistry getApplication "getStyleElement" contains style updates 2`] = ` -"[stylesheet-group=\\"0\\"] {} -body {margin: 0;} -body:not(.focusvisible) :focus {outline: none;} -button::-moz-focus-inner,input::-moz-focus-inner {border: 0; padding: 0;} -html {-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0,0,0,0);} -input::-webkit-search-cancel-button,input::-webkit-search-decorationinput::-webkit-search-results-button,input::-webkit-search-results-decoration {display: none;} -[stylesheet-group=\\"1\\"]{} -.css-view-13b7bgz{align-items:stretch;background-color:rgba(0,0,0,0.00);border:0 solid black;box-sizing:border-box;display:flex;flex-basis:auto;flex-direction:column;flex-shrink:0;list-style:none;margin:0px;min-height:0px;min-width:0px;padding:0px;position:relative;z-index:0;} -[stylesheet-group=\\"2\\"]{} -.r-borderWidth-1bee2fs{border-bottom-width:1234px;border-left-width:1234px;border-right-width:1234px;border-top-width:1234px;} -.r-display-xoduu5{display:inline-flex;} -.r-flex-13awgt0{flex:1;} -[stylesheet-group=\\"2.2\\"]{} -.r-backgroundColor-aot4c7{background-color:rgba(128,0,128,1.00);} -.r-bottom-1p0dtai{bottom:0px;} -.r-left-1d2f490{left:0px;} -.r-pointerEvents-105ug2t{pointer-events:auto!important;} -.r-pointerEvents-12vffkv>*{pointer-events:auto;} -.r-pointerEvents-12vffkv{pointer-events:none!important;} -.r-pointerEvents-633pao{pointer-events:none!important;} -.r-pointerEvents-ah5dr5>*{pointer-events:none;} -.r-pointerEvents-ah5dr5{pointer-events:auto!important;} -.r-position-u8s1d{position:absolute;} -.r-right-zchlnj{right:0px;} -.r-top-ipm5af{top:0px;}" -`; - -exports[`AppRegistry getApplication returns "element" and "getStyleElement" 1`] = ` - - - -`; - -exports[`AppRegistry getApplication returns "element" and "getStyleElement" 2`] = ` -"" -`; diff --git a/packages/react-native-web/src/exports/AppRegistry/__tests__/index-test.js b/packages/react-native-web/src/exports/AppRegistry/__tests__/index-test.js index 75a86de4e..bde49cbc7 100644 --- a/packages/react-native-web/src/exports/AppRegistry/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/AppRegistry/__tests__/index-test.js @@ -1,74 +1,16 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ import AppRegistry from '..'; -import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; import React from 'react'; -import ReactDOMServer from 'react-dom/server'; -import { render } from '@testing-library/react'; -import StyleSheet from '../../StyleSheet'; -import View from '../../View'; -const canUseDOM = ExecutionEnvironment.canUseDOM; const NoopComponent = () => React.createElement('div'); describe('AppRegistry', () => { - describe('getApplication', () => { - beforeEach(() => { - ExecutionEnvironment.canUseDOM = false; - }); - - afterEach(() => { - ExecutionEnvironment.canUseDOM = canUseDOM; - }); - - test('does not throw when missing appParameters', () => { - AppRegistry.registerComponent('App', () => NoopComponent); - expect(() => AppRegistry.getApplication('App')).not.toThrow(); - }); - - test('returns "element" and "getStyleElement"', () => { - AppRegistry.registerComponent('App', () => NoopComponent); - const { element, getStyleElement } = AppRegistry.getApplication('App', {}); - const styleElement = ReactDOMServer.renderToStaticMarkup(getStyleElement()); - - expect(element).toMatchSnapshot(); - expect(styleElement).toMatchSnapshot(); - }); - - test('"getStyleElement" adds props to
`; exports[`components/Image prop "nativeID" 1`] = `
`; exports[`components/Image prop "resizeMode" value "contain" 1`] = `
`; exports[`components/Image prop "resizeMode" value "cover" 1`] = `
`; exports[`components/Image prop "resizeMode" value "none" 1`] = `
`; exports[`components/Image prop "resizeMode" value "repeat" 1`] = `
`; exports[`components/Image prop "resizeMode" value "stretch" 1`] = `
`; exports[`components/Image prop "resizeMode" value "undefined" 1`] = `
`; exports[`components/Image prop "source" is correctly updated only when loaded if defaultSource provided 1`] = `
`; exports[`components/Image prop "style" supports "shadow" properties (convert to filter) 1`] = `
@@ -374,10 +374,10 @@ exports[`components/Image prop "style" supports "shadow" properties (convert to exports[`components/Image prop "style" supports "tintcolor" property (convert to filter) 1`] = `
`; diff --git a/packages/react-native-web/src/exports/Image/__tests__/index-test.js b/packages/react-native-web/src/exports/Image/__tests__/index-test.js index a08bad565..45196b864 100644 --- a/packages/react-native-web/src/exports/Image/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/Image/__tests__/index-test.js @@ -1,4 +1,10 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + /* eslint-disable react/jsx-no-bind */ import { act } from 'react-dom/test-utils'; diff --git a/packages/react-native-web/src/exports/Image/index.js b/packages/react-native-web/src/exports/Image/index.js index 629aec557..3297388a6 100644 --- a/packages/react-native-web/src/exports/Image/index.js +++ b/packages/react-native-web/src/exports/Image/index.js @@ -13,7 +13,7 @@ import type { ImageProps } from './types'; import * as React from 'react'; import createElement from '../createElement'; import { getAssetByID } from '../../modules/AssetRegistry'; -import { createBoxShadowValue } from '../StyleSheet/compiler/createReactDOMStyle'; +import { createBoxShadowValue } from '../StyleSheet/compiler/preprocess'; import ImageLoader from '../../modules/ImageLoader'; import PixelRatio from '../PixelRatio'; import StyleSheet from '../StyleSheet'; diff --git a/packages/react-native-web/src/exports/ImageBackground/__tests__/index.js b/packages/react-native-web/src/exports/ImageBackground/__tests__/index-test.js similarity index 87% rename from packages/react-native-web/src/exports/ImageBackground/__tests__/index.js rename to packages/react-native-web/src/exports/ImageBackground/__tests__/index-test.js index c0e1bb2f4..62330d739 100644 --- a/packages/react-native-web/src/exports/ImageBackground/__tests__/index.js +++ b/packages/react-native-web/src/exports/ImageBackground/__tests__/index-test.js @@ -1,4 +1,9 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ import ImageBackground from '..'; import React from 'react'; diff --git a/packages/react-native-web/src/exports/Modal/ModalContent.js b/packages/react-native-web/src/exports/Modal/ModalContent.js index ee11e7af8..e06e8b4a1 100644 --- a/packages/react-native-web/src/exports/Modal/ModalContent.js +++ b/packages/react-native-web/src/exports/Modal/ModalContent.js @@ -46,7 +46,12 @@ const ModalContent: React.AbstractComponent< }, [transparent]); return ( - + {children} ); diff --git a/packages/react-native-web/src/exports/Modal/__tests__/index.js b/packages/react-native-web/src/exports/Modal/__tests__/index-test.js similarity index 99% rename from packages/react-native-web/src/exports/Modal/__tests__/index.js rename to packages/react-native-web/src/exports/Modal/__tests__/index-test.js index ea1e4fbac..c2b7f9347 100644 --- a/packages/react-native-web/src/exports/Modal/__tests__/index.js +++ b/packages/react-native-web/src/exports/Modal/__tests__/index-test.js @@ -1,4 +1,9 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ import Modal from '..'; import React from 'react'; diff --git a/packages/react-native-web/src/exports/Picker/__tests__/index-test.js b/packages/react-native-web/src/exports/Picker/__tests__/index-test.js index 44dd6a1be..c16aba5f6 100644 --- a/packages/react-native-web/src/exports/Picker/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/Picker/__tests__/index-test.js @@ -1,4 +1,9 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ import React from 'react'; import { render } from '@testing-library/react'; diff --git a/packages/react-native-web/src/exports/Platform/__tests__/index-test.js b/packages/react-native-web/src/exports/Platform/__tests__/index-test.js index a2b34dfe3..c316b6cf7 100644 --- a/packages/react-native-web/src/exports/Platform/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/Platform/__tests__/index-test.js @@ -1,4 +1,9 @@ -/* eslint-env jasmine, jest */ +/** + * Copyright (c) Nicolas Gallagher. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ import Platform from '../'; diff --git a/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap index f99ba750b..ac13d8ea6 100644 --- a/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap @@ -2,21 +2,21 @@ exports[`components/Pressable default 1`] = `
`; exports[`components/Pressable focus interaction 1`] = `
`; exports[`components/Pressable focus interaction 2`] = `
@@ -28,7 +28,7 @@ exports[`components/Pressable focus interaction 2`] = ` exports[`components/Pressable focus interaction 3`] = `
@@ -36,14 +36,14 @@ exports[`components/Pressable focus interaction 3`] = ` exports[`components/Pressable hover interaction 1`] = `
`; exports[`components/Pressable hover interaction 2`] = `
@@ -55,7 +55,7 @@ exports[`components/Pressable hover interaction 2`] = ` exports[`components/Pressable hover interaction 3`] = `
@@ -63,14 +63,14 @@ exports[`components/Pressable hover interaction 3`] = ` exports[`components/Pressable press interaction (keyboard) 1`] = `
`; exports[`components/Pressable press interaction (keyboard) 2`] = `
@@ -84,14 +84,14 @@ exports[`components/Pressable press interaction (keyboard) 3`] = `null`; exports[`components/Pressable press interaction (pointer) 1`] = `
`; exports[`components/Pressable press interaction (pointer) 2`] = `
@@ -103,7 +103,7 @@ exports[`components/Pressable press interaction (pointer) 2`] = ` exports[`components/Pressable press interaction (pointer) 3`] = `
@@ -112,7 +112,7 @@ exports[`components/Pressable press interaction (pointer) 3`] = ` exports[`components/Pressable prop "accessibilityLabel" value is set 1`] = `
`; @@ -120,14 +120,14 @@ exports[`components/Pressable prop "accessibilityLabel" value is set 1`] = ` exports[`components/Pressable prop "accessibilityLiveRegion" value is set 1`] = `
`; exports[`components/Pressable prop "accessibilityRole" value alters HTML element 1`] = `
@@ -135,7 +135,7 @@ exports[`components/Pressable prop "accessibilityRole" value alters HTML element exports[`components/Pressable prop "accessibilityRole" value is "button" 1`] = `
@@ -143,7 +143,7 @@ exports[`components/Pressable prop "accessibilityRole" value is "button" 1`] = ` exports[`components/Pressable prop "accessibilityRole" value is set 1`] = `