const ruleTester = require("../../ruletester"); import * as rule from "./toolbar-update-align-values"; const componentProps: { [key: string]: string } = { ToolbarGroup: "align", ToolbarItem: "align", ToolbarToggleGroup: "alignment", }; for (const component in componentProps) { const prop = componentProps[component]; const createMessage = (componentName = component) => `The values for the \`${prop}\` property on ${componentName} have been updated from "alignLeft" and "alignRight" to "alignStart" and "alignEnd", respectively.`; ruleTester.run("toolbar-update-align-values", rule, { valid: [ { code: `<${component} ${prop}={{default: "alignLeft"}} />`, }, { code: `<${component} ${prop}={{default: "alignRight"}} />`, }, { code: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignStart"}} />`, }, { code: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignEnd"}} />`, }, ], invalid: [ { code: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignLeft"}} />`, output: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignStart"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, { code: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignRight"}} />`, output: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignEnd"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, { code: `import { ${component} } from '@patternfly/react-core'; const alignProp = {default: "alignLeft"}; <${component} ${prop}={alignProp} />`, output: `import { ${component} } from '@patternfly/react-core'; const alignProp = {default: "alignStart"}; <${component} ${prop}={alignProp} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, // Multiple properties { code: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignLeft", md: "alignRight", lg: "alignLeft", xl: "alignRight", "2xl": "alignLeft"}} />`, output: `import { ${component} } from '@patternfly/react-core'; <${component} ${prop}={{default: "alignStart", md: "alignEnd", lg: "alignStart", xl: "alignEnd", "2xl": "alignStart"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, // Aliased import { code: `import { ${component} as Custom${component} } from '@patternfly/react-core'; `, output: `import { ${component} as Custom${component} } from '@patternfly/react-core'; `, errors: [ { message: createMessage(`Custom${component}`), type: "JSXOpeningElement", }, ], }, // Import from dist/esm { code: `import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignLeft"}} />`, output: `import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignStart"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, // Import from dist/js { code: `import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignLeft"}} />`, output: `import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignStart"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, // Import from dist/dynamic { code: `import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignLeft"}} />`, output: `import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} ${prop}={{default: "alignStart"}} />`, errors: [ { message: createMessage(), type: "JSXOpeningElement", }, ], }, ], }); }