UNPKG

babel-plugin-react-intl-auto

Version:

i18n for the component age. Auto management react-intl ID

190 lines (174 loc) 4.55 kB
"use strict"; var _path = _interopRequireDefault(require("path")); var _testUtils = require("../utils/testUtils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const filename = _path.default.resolve(__dirname, '..', '__fixtures__', 'messages.js'); const defaultTest = { title: 'default', code: ` import { FormattedMessage } from 'react-intl'; <FormattedMessage defaultMessage="hello" />; ` }; const multiUseTest = { title: 'multiple uses', code: ` import { FormattedMessage } from 'react-intl'; <FormattedMessage defaultMessage="hello" />; <FormattedMessage defaultMessage="another" />; ` }; const allSupportedComponentsTest = { title: 'import all supported components', code: ` import { FormattedHTMLMessage, FormattedMessage } from 'react-intl'; <FormattedHTMLMessage defaultMessage="<span>hello</span>" />; <FormattedMessage defaultMessage="hello" />; ` }; const withValueInMessageTest = { title: 'with a value interpolated in the message', code: ` import { FormattedMessage } from 'react-intl'; <FormattedMessage defaultMessage={\`hello world ${1 + 1}\`} />; ` }; const withVariableMessageTest = { title: 'with a variable as the defaultMessage', code: ` import { FormattedMessage } from 'react-intl'; const message = "variable message"; <FormattedMessage defaultMessage={message} />; ` }; const importAsTest = { title: 'with FormattedMessage imported as something else', code: ` import { FormattedMessage as T } from 'react-intl'; <T defaultMessage="hello" />; ` }; const nestedJSXTest = { title: 'with FormattedMessage nested in other JSX', code: ` import { FormattedMessage } from 'react-intl'; <div> <FormattedMessage defaultMessage="hello" /> </div> ` }; const throwWhenNotAnalyzableTest = { title: 'throws if defaultMessage isn’t analyzable', code: ` import { FormattedMessage } from 'react-intl'; const getMsg = () => 'hello'; <FormattedMessage defaultMessage={getMsg()} />; `, error: /\[React Intl Auto\] defaultMessage must be statically evaluate-able for extraction/u, snapshot: false }; const notTransformIfNotImportedTest = { title: 'does nothing if components not imported from react-intl', snapshot: false, code: ` import any from 'any-module'; <FormattedMessage defaultMessage={getMsg()} />; ` }; const notTransformIfSpreadAttributeTest = { title: 'does nothing if component props are spread', snapshot: false, code: ` import { FormattedMessage } from 'react-intl'; const props = { defaultMessage: 'hello' }; <FormattedMessage {...props} />; ` }; const keyTest = { title: 'using key', code: ` import { FormattedMessage } from 'react-intl'; <FormattedMessage key="foobar" defaultMessage="hello" />; ` }; const tests = [defaultTest, multiUseTest, allSupportedComponentsTest, withValueInMessageTest, withVariableMessageTest, importAsTest, nestedJSXTest, throwWhenNotAnalyzableTest, notTransformIfNotImportedTest, notTransformIfSpreadAttributeTest, keyTest]; (0, _testUtils.cases)(filename, [{ title: 'default', tests }, { title: 'useKey = true', tests: [defaultTest, keyTest], pluginOptions: { useKey: true } }, { title: 'removePrefix = "src"', tests: [defaultTest], pluginOptions: { removePrefix: 'src' } }, { title: 'removePrefix = "src/" -- with slash', tests: [defaultTest], pluginOptions: { removePrefix: 'src/' } }, { title: 'filebase = true', tests: [defaultTest], pluginOptions: { filebase: true } }, { title: 'includeExportName = true', tests: [defaultTest], pluginOptions: { includeExportName: true } }, { title: 'includeExportName = all', tests: [defaultTest], pluginOptions: { includeExportName: 'all' } }, { title: 'removePrefix = true, includeExportName = true', tests: [defaultTest], pluginOptions: { removePrefix: true, includeExportName: true } }, { title: 'removePrefix = false', tests: [defaultTest], pluginOptions: { removePrefix: false } }, { title: 'removePrefix = true, includeExportName = all', tests: [defaultTest], pluginOptions: { removePrefix: true, includeExportName: 'all' } }, { title: 'extractComments = false', tests: [defaultTest], pluginOptions: { extractComments: false } }, { title: 'removePrefix = /__fixtures__/', tests: [defaultTest], pluginOptions: { removePrefix: /[\\/]__fixtures__/u } }, { title: 'removePrefix = "src.__fixtures__"', tests: [defaultTest], pluginOptions: { removePrefix: 'src.__fixtures__' } }]);