const ruleTester = require("../../ruletester");
import * as rule from "./tokens-update";
const getWarnMessage = (tokenName: string) =>
`${tokenName} is an old CSS token. About half of our tokens have been replaced with newer ones. To find a suitable replacement token, check our new documentation https://staging-v6.patternfly.org/tokens/all-patternfly-tokens.`;
const getFixMessage = (oldToken: string, newToken: string) =>
`${oldToken} is an old CSS token and has been replaced with ${newToken}. If you want to use a different token, check our new documentation https://staging-v6.patternfly.org/tokens/all-patternfly-tokens.`;
const getColorFixMessage = (oldToken: string, isReactToken = true) =>
`${oldToken} is an old color token. This codemod will replace it with a temporary hot pink color token ${
isReactToken ? "t_temp_dev_tbd" : "--pf-t--temp--dev--tbd"
} to prevent build errors. You should find a suitable replacement token in our new documentation https://staging-v6.patternfly.org/tokens/all-patternfly-tokens.`;
ruleTester.run("tokens-warn", rule, {
valid: [
// token existing in V6
{
code: `import c_about_modal_box from '@patternfly/react-tokens/dist/esm/c_about_modal_box';`,
},
// token existing in V6
{
code: `import { c_about_modal_box } from '@patternfly/react-tokens';`,
},
],
invalid: [
// WARNINGS - tokens
{
code: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens';`,
output: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportSpecifier",
},
],
},
{
// with alias
code: `import { c_badge_PaddingLeft as badgePL } from '@patternfly/react-tokens';`,
output: `import { c_badge_PaddingLeft as badgePL } from '@patternfly/react-tokens';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportSpecifier",
},
],
},
{
// named import - esm
code: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
output: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportSpecifier",
},
],
},
{
// named import - js
code: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens/dist/js/c_badge_PaddingLeft';`,
output: `import { c_badge_PaddingLeft } from '@patternfly/react-tokens/dist/js/c_badge_PaddingLeft';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportSpecifier",
},
],
},
{
// default import - esm
code: `import c_badge_PaddingLeft from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
output: `import c_badge_PaddingLeft from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportDefaultSpecifier",
},
],
},
{
// default import - js
code: `import c_badge_PaddingLeft from '@patternfly/react-tokens/dist/js/c_badge_PaddingLeft';`,
output: `import c_badge_PaddingLeft from '@patternfly/react-tokens/dist/js/c_badge_PaddingLeft';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportDefaultSpecifier",
},
],
},
{
// default import with custom name
code: `import someToken from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
output: `import someToken from '@patternfly/react-tokens/dist/esm/c_badge_PaddingLeft';`,
errors: [
{
message: getWarnMessage("c_badge_PaddingLeft"),
type: "ImportDefaultSpecifier",
},
],
},
// WARNINGS - CSS variables
{
code: `document.documentElement.style.setProperty("--pf-v5-c-button--PaddingTop", "2rem");`,
output: `document.documentElement.style.setProperty("--pf-v5-c-button--PaddingTop", "2rem");`,
errors: [
{
message: getWarnMessage("--pf-v5-c-button--PaddingTop"),
type: "Literal",
},
],
},
{
code: `
Some banner
`,
output: `Some banner
`,
errors: [
{
message: getWarnMessage("--pf-v5-c-banner--PaddingBottom"),
type: "Literal",
},
],
},
// FIXES - non color tokens
{
code: `import { global_FontWeight_normal } from "@patternfly/react-tokens";
global_FontWeight_normal;`,
output: `import { global_font_weight_body_default } from "@patternfly/react-tokens";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
{
// with alias
code: `import { global_FontWeight_normal as fontW_normal } from "@patternfly/react-tokens";
fontW_normal;`,
output: `import { global_font_weight_body_default as fontW_normal } from "@patternfly/react-tokens";
fontW_normal;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportSpecifier",
},
],
},
{
// named import - esm
code: `import { global_FontWeight_normal } from '@patternfly/react-tokens/dist/esm/global_FontWeight_normal';
global_FontWeight_normal;`,
output: `import { global_font_weight_body_default } from "@patternfly/react-tokens/dist/esm/global_font_weight_body_default";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
{
// named import - js
code: `import { global_FontWeight_normal } from '@patternfly/react-tokens/dist/js/global_FontWeight_normal';
global_FontWeight_normal;`,
output: `import { global_font_weight_body_default } from "@patternfly/react-tokens/dist/js/global_font_weight_body_default";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
{
// default import - esm
code: `import global_FontWeight_normal from '@patternfly/react-tokens/dist/esm/global_FontWeight_normal';
global_FontWeight_normal;`,
output: `import global_font_weight_body_default from "@patternfly/react-tokens/dist/esm/global_font_weight_body_default";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportDefaultSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
{
// default import - js
code: `import global_FontWeight_normal from '@patternfly/react-tokens/dist/js/global_FontWeight_normal';
global_FontWeight_normal;`,
output: `import global_font_weight_body_default from "@patternfly/react-tokens/dist/js/global_font_weight_body_default";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportDefaultSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
{
// default import with custom name
code: `import fontWeightNormal from '@patternfly/react-tokens/dist/esm/global_FontWeight_normal';
fontWeightNormal;`,
output: `import global_font_weight_body_default from "@patternfly/react-tokens/dist/esm/global_font_weight_body_default";
global_font_weight_body_default;`,
errors: [
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "ImportDefaultSpecifier",
},
{
message: getFixMessage(
"global_FontWeight_normal",
"global_font_weight_body_default"
),
type: "Identifier",
},
],
},
// FIXES - non color CSS variables
{
code: `document.documentElement.style.setProperty("--pf-v5-global--ZIndex--lg", "3");`,
output: `document.documentElement.style.setProperty("--pf-t--global--z-index--lg", "3");`,
errors: [
{
message: getFixMessage(
"--pf-v5-global--ZIndex--lg",
"--pf-t--global--z-index--lg"
),
type: "Literal",
},
],
},
{
code: ``,
output: ``,
errors: [
{
message: getFixMessage(
"--pf-v5-global--BorderWidth--lg",
"--pf-t--global--border--width--extra-strong"
),
type: "Literal",
},
],
},
// FIXES - color tokens
{
code: `import { global_Color_100 } from "@patternfly/react-tokens";`,
output: `import { t_temp_dev_tbd as global_Color_100 /* CODEMODS: you should update this color token */ } from "@patternfly/react-tokens";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportSpecifier",
},
],
},
{
// with alias
code: `import { global_Color_100 as color100 } from "@patternfly/react-tokens";`,
output: `import { t_temp_dev_tbd as color100 /* CODEMODS: you should update this color token, original v5 token was global_Color_100 */ } from "@patternfly/react-tokens";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportSpecifier",
},
],
},
{
// named import - esm
code: `import { global_Color_100 } from '@patternfly/react-tokens/dist/esm/global_Color_100';`,
output: `import { t_temp_dev_tbd as global_Color_100 /* CODEMODS: you should update this color token */ } from "@patternfly/react-tokens/dist/esm/t_temp_dev_tbd";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportSpecifier",
},
],
},
{
// named import - js
code: `import { global_Color_100 } from '@patternfly/react-tokens/dist/js/global_Color_100';`,
output: `import { t_temp_dev_tbd as global_Color_100 /* CODEMODS: you should update this color token */ } from "@patternfly/react-tokens/dist/js/t_temp_dev_tbd";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportSpecifier",
},
],
},
{
// default import - esm
code: `import global_Color_100 from '@patternfly/react-tokens/dist/esm/global_Color_100';`,
output: `import global_Color_100/* CODEMODS: you should update this color token */ from "@patternfly/react-tokens/dist/esm/t_temp_dev_tbd";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportDefaultSpecifier",
},
],
},
{
// default import - js
code: `import global_Color_100 from '@patternfly/react-tokens/dist/js/global_Color_100';`,
output: `import global_Color_100/* CODEMODS: you should update this color token */ from "@patternfly/react-tokens/dist/js/t_temp_dev_tbd";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportDefaultSpecifier",
},
],
},
{
// default import with custom name
code: `import someColor from '@patternfly/react-tokens/dist/esm/global_Color_100';`,
output: `import someColor/* CODEMODS: you should update this color token, original v5 token was global_Color_100 */ from "@patternfly/react-tokens/dist/esm/t_temp_dev_tbd";`,
errors: [
{
message: getColorFixMessage("global_Color_100"),
type: "ImportDefaultSpecifier",
},
],
},
// FIXES - color CSS variables
{
code: `document.documentElement.style.setProperty("--pf-v5-global--success-color--200", "#abc");`,
output: `document.documentElement.style.setProperty("--pf-t--temp--dev--tbd"/* CODEMODS: original v5 color was --pf-v5-global--success-color--200 */, "#abc");`,
errors: [
{
message: getColorFixMessage("--pf-v5-global--success-color--200", false),
type: "Literal",
},
],
},
{
code: ``,
output: ``,
errors: [
{
message: getColorFixMessage("--pf-v5-global--Color--100", false),
type: "Literal",
},
],
},
],
});