babel-plugin-react-intl-auto
Version:
i18n for the component age. Auto management react-intl ID
334 lines (303 loc) • 6.71 kB
JavaScript
"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 { defineMessages } from 'react-intl'
export default defineMessages({
hello: 'hello',
})
`
};
const multiExportTest = {
title: 'multi export',
code: `
import { defineMessages } from 'react-intl'
export const extra = defineMessages({
hello: 'hello world extra'
})
export default defineMessages({
hello: 'hello world',
})
`
};
const leadingCommentTest = {
title: 'leading comment',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages({
// The main Hello of our app.
hello: 'hello',
// Another Hello,
// multiline this time
world: {
id: 'hello.world',
defaultMessage: 'hello world',
}
})
`
};
const leadingCommentWithDescriptionTest = {
title: 'leading comment with description',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages({
// This comment should not be used
world: {
defaultMessage: 'hello world',
description: 'The hello world',
}
})
`
};
const tests = [defaultTest, {
title: 'with include value',
code: `
import { defineMessages } from 'react-intl'
defineMessages({
hello: \`hello world \${1}\`,
})
`
}, {
title: 'string literal',
code: `
import { defineMessages } from 'react-intl'
defineMessages({
'hello': 'hello world'
})
`
}, {
title: 'Object',
code: `
import { defineMessages } from 'react-intl'
defineMessages({
new: {
id: 'this is id',
defaultMessage: 'id',
},
world: {
defaultMessage: 'world',
},
headerTitle: {
defaultMessage: 'Welcome to dashboard {name}!',
description: 'Message to greet the user.',
},
})
`
}, {
title: 'import as',
code: `
import { defineMessages as m } from 'react-intl'
m({
hello: 'hello'
})
`
}, {
title: 'with other func',
code: `
import { defineMessages } from 'react-intl'
defineMessages({
hello: 'hello',
})
hello({
id: 'hoge',
})
`
}, multiExportTest, {
title: 'throw error when key is NumiricLiteral',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages({
1: 'hello',
})
`,
error: /requires Object key or string literal/u,
snapshot: false
}, {
title: 'not transform if defineMessages is not imported',
code: `
import any from 'any-module'
export default defineMessages({
hello: 'hello'
})
`
}, {
title: 'not transform when defineMessages argumens is not object',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages(1)
`
}, {
title: 'when using the variable',
code: `
import { defineMessages } from 'react-intl'
const messages = {hello: 'hello'}
export default defineMessages(messages)
`
}, {
title: 'not transfrom when the variable can not be found',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages(messages)
`
}, {
title: 'not transform when defineMessages argumens is empty',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages()
`
}, {
title: 'not transform if callee is not identifier',
code: `
import { defineMessages } from 'react-intl'
const m = [defineMessages]
export default m[0]({
hello: 'hello world'
})
`
}, {
title: 'with other specifier',
code: `
import { defineMessages, FormattedMessage } from 'react-intl'
export default defineMessages({
hello: 'hello world',
})
`
}, leadingCommentTest, leadingCommentWithDescriptionTest, {
title: 'eval string',
code: `
import { defineMessages } from 'react-intl'
export default defineMessages({
hello: 'hello' + 'world',
})
`
}];
const moduleSourceNameTest = {
title: 'moduleSourceName',
code: `
import { defineMessages } from 'gatsby-plugin-intl'
export default defineMessages({
hello: 'hello',
})
`
};
(0, _testUtils.cases)(filename, [{
title: 'default',
tests
}, {
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, multiExportTest],
pluginOptions: {
includeExportName: true
}
}, {
title: 'includeExportName = all',
tests: [defaultTest, multiExportTest],
pluginOptions: {
includeExportName: 'all'
}
}, {
title: 'removePrefix = true, includeExportName = true',
tests: [defaultTest, multiExportTest],
pluginOptions: {
removePrefix: true,
includeExportName: true
}
}, {
title: 'removePrefix = false',
tests: [defaultTest, multiExportTest],
pluginOptions: {
removePrefix: false
}
}, {
title: 'removePrefix = true, includeExportName = all',
tests: [defaultTest, multiExportTest],
pluginOptions: {
removePrefix: true,
includeExportName: 'all'
}
}, {
title: 'extractComments = false',
tests: [defaultTest, leadingCommentTest, leadingCommentWithDescriptionTest],
pluginOptions: {
extractComments: false
}
}, {
title: 'removePrefix = /__fixtures__/',
tests: [defaultTest],
pluginOptions: {
removePrefix: /src[\\/]__f.+?_/u,
includeExportName: true
}
}, {
title: 'removePrefix = "src.__fixtures__"',
tests: [defaultTest],
pluginOptions: {
removePrefix: 'src.__fixtures__'
}
}, {
title: 'removePrefix = "src.__fixtures__", includeExportName = true',
tests: [defaultTest, multiExportTest],
pluginOptions: {
removePrefix: 'src.__fixtures__',
includeExportName: true
}
}, {
title: 'moduleSourceNameTest',
tests: [defaultTest, moduleSourceNameTest],
pluginOptions: {
moduleSourceName: 'gatsby-plugin-intl'
}
}, {
title: 'separator = ""',
tests: [defaultTest, multiExportTest],
pluginOptions: {
separator: ''
}
}, {
title: 'separator = "_"',
// tests: [defaultTest, multiExportTest],
tests: [defaultTest, multiExportTest],
pluginOptions: {
separator: '_'
}
}, {
title: 'separator = "foo"',
tests: [defaultTest, multiExportTest],
pluginOptions: {
separator: 'foo'
}
}, {
title: 'relativeTo = "../"',
tests: [defaultTest, multiExportTest],
pluginOptions: {
relativeTo: '..'
}
}, {
title: 'relativeTo = ""',
tests: [defaultTest, multiExportTest],
pluginOptions: {
relativeTo: ''
}
}]);