import { macroTester } from "./macroTester"
describe.skip("", () => {})
macroTester({
cases: [
{
name: "Generate ID from message",
code: `
import { Trans } from '@lingui/react/macro';
Hello World;
`,
},
{
name: "Generate different id when context provided",
code: `
import { Trans } from '@lingui/react/macro';
Hello World;
Hello World;
`,
},
{
name: "Preserve custom ID (string literal)",
code: `
import { Trans } from '@lingui/react/macro';
Hello World;
`,
},
{
name: "Preserve custom ID (literal expression)",
code: `
import { Trans } from '@lingui/react/macro';
Hello World;
`,
},
{
name: "Preserve custom ID (template expression)",
code: `
import { Trans } from '@lingui/react/macro';
Hello World;
`,
},
{
name: "Should preserve reserved props: `comment`, `context`, `render`, `id`",
code: `
import { Trans } from '@lingui/react/macro';
{}}
>Hello World;
`,
},
{
name: "Trans macro could be renamed",
code: `
import { Trans as Trans2 } from '@lingui/react/macro';
Hello World;
`,
},
{
name: "Variables are converted to named arguments",
code: `
import { Trans } from '@lingui/react/macro';
Hi {yourName}, my name is {myName};
`,
},
{
name: "Variables are deduplicated",
code: `
import { Trans } from '@lingui/react/macro';
{duplicate} variable {duplicate};
`,
},
{
name: "Quoted JSX attributes are handled",
code: `
import { Trans } from '@lingui/react/macro';
Speak "friend"!;
Speak "friend"!;
`,
},
{
name: "HTML attributes are handled",
code: `
import { Trans } from '@lingui/react/macro';
This should work
;
`,
},
{
name: "Template literals as children",
code: `
import { Trans } from '@lingui/react/macro';
{\`How much is \${expression}? \${count}\`};
`,
},
{
name: "Strings as children are preserved",
code: `
import { Trans } from '@lingui/react/macro';
{"hello {count, plural, one {world} other {worlds}}"};
`,
},
{
name: "Expressions are converted to positional arguments",
code: `
import { Trans } from '@lingui/react/macro';
Property {props.name},
function {random()},
array {array[index]},
constant {42},
object {new Date()},
everything {props.messages[index].value()}
;
`,
},
{
name: "JSX Macro inside JSX conditional expressions",
code: `
import { Trans } from '@lingui/react/macro';
Hello, {props.world ? world : guys}
`,
},
{
name: "JSX Macro inside JSX multiple nested conditional expressions",
code: `
import { Trans } from '@lingui/react/macro';
Hello, {props.world ? world : (
props.b
? nested
: guys
)
}
`,
},
{
name: "Elements are replaced with placeholders",
code: `
import { Trans } from '@lingui/react/macro';
Hello World!
My name is {" "}
{name}
;
`,
},
{
name: "Elements inside expression container",
code: `
import { Trans } from '@lingui/react/macro';
{Component inside expression container};
`,
},
{
name: "Elements without children",
code: `
import { Trans } from '@lingui/react/macro';
{
};
`,
},
{
name: "stripMessageField option - message prop is removed if stripMessageField: true",
macroOpts: {
stripMessageField: true,
},
code: `
import { Trans } from '@lingui/macro';
Hello World
`,
},
{
name: "Production - only essential props are kept",
production: true,
code: `
import { Trans } from '@lingui/react/macro';
Hello World
`,
},
{
name: "Production - message prop is kept if stripMessageField: false",
production: true,
macroOpts: {
stripMessageField: false,
},
code: `
import { Trans } from '@lingui/macro';
Hello World
`,
},
{
name: "Production - all props kept if extract: true",
production: true,
macroOpts: {
extract: true,
},
code: `
import { Trans } from '@lingui/react/macro';
Hello World
`,
},
{
name: "Production - import type doesn't interference on normal import",
production: true,
useTypescriptPreset: true,
code: `
import type { withI18nProps } from '@lingui/react'
import { Trans } from '@lingui/react/macro';
Hello World
`,
},
{
name: "Strip whitespace around arguments",
code: `
import { Trans } from "@lingui/react/macro";
Strip whitespace around arguments: '
{name}
'
`,
},
{
name: "Strip whitespace around tags but keep forced spaces",
code: `
import { Trans } from "@lingui/react/macro";
Strip whitespace around tags, but keep{" "}
forced spaces
!
`,
},
{
name: "Strip whitespace around tags but keep whitespaces in JSX containers",
code: `
import { Trans } from "@lingui/react/macro";
{"Wonderful framework "}
Next.js
{" say hi. And "}
Next.js
{" say hi."}
`,
},
{
name: "Keep forced newlines",
filename: "./jsx-keep-forced-newlines.js",
},
{
name: "Use a js macro inside a JSX Attribute of a component handled by JSX macro",
code: `
import { Trans } from '@lingui/react/macro';
import { t } from '@lingui/core/macro';
Read more
`,
},
{
name: "Use a js macro inside a JSX Attribute of a non macro JSX component",
code: `
import { plural } from '@lingui/core/macro';
About
`,
},
{
name: "Ignore JSXEmptyExpression",
code: `
import { Trans } from '@lingui/react/macro';
Hello {/* and I cannot stress this enough */} World;
`,
},
{
name: "Use decoded html entities",
code: `
import { Trans } from "@lingui/react/macro";
&
`,
},
{
name: "Should not process non JSXElement nodes",
useTypescriptPreset: true,
code: `
import { Trans } from "@lingui/react/macro";
type X = typeof Trans;
const cmp = Hello
`,
},
],
})