const ruleTester = require("../../ruletester");
import * as rule from "./text-replace-with-content";
const errorMessage = `We have replaced Text, TextContent, TextList and TextListItem with one Content component. Running this fix will change all of those components names to Content and add a \`component\` prop where necessary.`;
const importDeclarationError = {
message: errorMessage,
type: "ImportDeclaration",
};
const jsxOpeningElementError = {
message: errorMessage,
type: "JSXOpeningElement",
};
const jsxClosingElementError = {
message: errorMessage,
type: "JSXClosingElement",
};
const identifierError = {
message: errorMessage,
type: "Identifier",
};
ruleTester.run("text-replace-with-content", rule, {
valid: [
{
code: ``,
},
{
code: `import { Text } from 'somewhere'; `,
},
],
invalid: [
{
code: `import { Text } from '@patternfly/react-core'; Abc`,
output: `import { Content } from '@patternfly/react-core'; Abc`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxClosingElementError,
],
},
{
code: `import { Text } from '@patternfly/react-core'; Abc`,
output: `import { Content } from '@patternfly/react-core'; Abc`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxClosingElementError,
],
},
{
code: `import { Text, TextContent } from '@patternfly/react-core';
Abc
`,
output: `import { Content, TextContent } from '@patternfly/react-core';
Abc
`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxClosingElementError,
],
},
{
code: `import { TextContent } from '@patternfly/react-core'; `,
output: `import { Content } from '@patternfly/react-core'; `,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxClosingElementError,
],
},
{
code: `import { TextList, TextListItem } from '@patternfly/react-core';
A
B
C
`,
output: `import { Content, TextListItem } from '@patternfly/react-core';
A
B
C
`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxClosingElementError,
],
},
{
code: `import { TextList, TextListItem } from '@patternfly/react-core';
A
letter A
B
letter B
`,
output: `import { Content, TextListItem } from '@patternfly/react-core';
A
letter A
B
letter B
`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxOpeningElementError,
jsxClosingElementError,
jsxClosingElementError,
],
},
{
code: `import { TextList } from '@patternfly/react-core'; `,
output: `import { Content } from '@patternfly/react-core'; `,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxClosingElementError,
],
},
{
code: `import { TextVariants } from '@patternfly/react-core'; const foo = TextVariants.h1`,
output: `import { ContentVariants } from '@patternfly/react-core'; const foo = ContentVariants.h1`,
errors: [importDeclarationError, identifierError],
},
{
code: `import { TextListVariants } from '@patternfly/react-core'; const foo = TextListVariants.ul`,
output: `import { ContentVariants } from '@patternfly/react-core'; const foo = ContentVariants.ul`,
errors: [importDeclarationError, identifierError],
},
{
code: `import { TextListItemVariants } from '@patternfly/react-core'; const foo = TextListItemVariants.li`,
output: `import { ContentVariants } from '@patternfly/react-core'; const foo = ContentVariants.li`,
errors: [importDeclarationError, identifierError],
},
// phase one of passing an enum directly as a prop
{
code: `import { TextListItem, TextListItemVariants } from '@patternfly/react-core'; Abc`,
output: `import { Content, TextListItemVariants } from '@patternfly/react-core'; Abc`,
errors: [
importDeclarationError,
jsxOpeningElementError,
identifierError,
jsxClosingElementError,
],
},
// phase two of passing an enum directly as a prop
{
code: `import { Content, TextListItemVariants } from '@patternfly/react-core'; Abc`,
output: `import { Content, ContentVariants } from '@patternfly/react-core'; Abc`,
errors: [importDeclarationError],
},
{
code: `import { TextProps } from '@patternfly/react-core'; interface Foo extends TextProps {}`,
output: `import { ContentProps } from '@patternfly/react-core'; interface Foo extends ContentProps {}`,
errors: [importDeclarationError, identifierError],
},
// with alias
{
code: `import { Text as PFText } from '@patternfly/react-core'; Abc`,
output: `import { Content } from '@patternfly/react-core'; Abc`,
errors: [
importDeclarationError,
jsxOpeningElementError,
jsxClosingElementError,
],
},
// dist import path (Text, TextContent, TextList and TextListItem are all under "Text")
{
code: `import { Text } from '@patternfly/react-core/dist/dynamic/components/Text';`,
output: `import { Content } from "@patternfly/react-core/dist/dynamic/components/Content";`,
errors: [importDeclarationError],
},
],
});
/*
->
->
->
->
->
->
->
->
->
*/