keycloak_theme/test/bin/replacers.spec.ts

667 lines
25 KiB
TypeScript
Raw Normal View History

2024-01-30 00:06:17 +01:00
import { replaceImportsInJsCode_vite } from "keycloakify/bin/keycloakify/replacers/replaceImportsInJsCode/vite";
2024-01-30 00:15:08 +01:00
import { replaceImportsInJsCode_webpack } from "keycloakify/bin/keycloakify/replacers/replaceImportsInJsCode/webpack";
2024-05-20 15:48:51 +02:00
import {
generateCssCodeToDefineGlobals,
replaceImportsInCssCode
} from "keycloakify/bin/keycloakify/replacers/replaceImportsInCssCode";
2023-03-18 15:49:45 +01:00
import { replaceImportsInInlineCssCode } from "keycloakify/bin/keycloakify/replacers/replaceImportsInInlineCssCode";
2022-07-22 15:35:23 +02:00
import { same } from "evt/tools/inDepth/same";
import { expect, it, describe } from "vitest";
import { isSameCode } from "../tools/isSameCode";
2024-05-20 15:48:51 +02:00
import {
basenameOfTheKeycloakifyResourcesDir,
nameOfTheGlobal
} from "keycloakify/bin/shared/constants";
2024-01-30 00:06:17 +01:00
2024-01-30 00:10:59 +01:00
describe("js replacer - vite", () => {
2024-01-30 00:06:17 +01:00
it("replaceImportsInJsCode_vite - 1", () => {
const before = `Uv="modulepreload",`;
const after = `,Wc={},`;
const jsCodeUntransformed = `${before}Hv=function(e){return"/foo-bar-baz/"+e}${after}`;
const { fixedJsCode } = replaceImportsInJsCode_vite({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
basenameOfAssetsFiles: [],
buildOptions: {
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/dist/",
assetsDirPath: "/Users/someone/github/keycloakify-starter/dist/assets/",
urlPathname: "/foo-bar-baz/"
2024-01-30 00:06:17 +01:00
}
});
2024-01-30 00:06:17 +01:00
const fixedJsCodeExpected = `${before}Hv=function(e){return"/"+e}${after}`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
});
it("replaceImportsInJsCode_vite - 2", () => {
const before = `Uv="modulepreload",`;
const after = `,Wc={},`;
const jsCodeUntransformed = `${before}Hv=function(e){return"/foo/bar/baz/"+e}${after}`;
const { fixedJsCode } = replaceImportsInJsCode_vite({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
basenameOfAssetsFiles: [],
buildOptions: {
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/dist/",
assetsDirPath: "/Users/someone/github/keycloakify-starter/dist/assets/",
urlPathname: "/foo/bar/baz/"
2024-01-30 00:06:17 +01:00
}
});
const fixedJsCodeExpected = `${before}Hv=function(e){return"/"+e}${after}`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
});
it("replaceImportsInJsCode_vite - 3", () => {
2024-01-27 18:49:29 +01:00
const jsCodeUntransformed = `
2024-01-30 00:06:17 +01:00
S="/assets/keycloakify-logo-mqjydaoZ.png",H=(()=>{
2024-01-27 18:49:29 +01:00
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = ["assets/Login-dJpPRzM4.js", "assets/index-XwzrZ5Gu.js"]
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}
`;
2024-01-30 00:06:17 +01:00
for (const { reactAppBuildDirPath, assetsDirPath, systemType } of [
{
2024-05-20 15:48:51 +02:00
systemType: "posix",
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/dist",
assetsDirPath: "/Users/someone/github/keycloakify-starter/dist/assets"
2024-01-30 00:06:17 +01:00
},
{
2024-05-20 15:48:51 +02:00
systemType: "win32",
reactAppBuildDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist",
assetsDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist\\assets"
2024-01-30 00:06:17 +01:00
}
] as const) {
const { fixedJsCode } = replaceImportsInJsCode_vite({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
basenameOfAssetsFiles: [
"Login-dJpPRzM4.js",
"index-XwzrZ5Gu.js",
"keycloakify-logo-mqjydaoZ.png"
],
buildOptions: {
2024-01-30 00:06:17 +01:00
reactAppBuildDirPath,
assetsDirPath,
2024-05-20 15:48:51 +02:00
urlPathname: undefined
2024-01-30 00:06:17 +01:00
},
systemType
2024-01-27 18:49:29 +01:00
});
const fixedJsCodeExpected = `
2024-02-06 07:28:03 +01:00
S=(window.${nameOfTheGlobal}.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/assets/keycloakify-logo-mqjydaoZ.png"),H=(()=>{
2024-01-30 00:06:17 +01:00
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = [
2024-02-06 07:28:03 +01:00
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/assets/Login-dJpPRzM4.js"),
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/assets/index-XwzrZ5Gu.js")
2024-01-30 00:06:17 +01:00
]
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
2024-01-27 18:49:29 +01:00
}
2024-01-30 00:06:17 +01:00
`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
}
});
it("replaceImportsInJsCode_vite - 4", () => {
const jsCodeUntransformed = `
2024-02-06 07:28:03 +01:00
S="/foo/bar/keycloakify-logo-mqjydaoZ.png",H=(()=>{
2024-01-30 00:06:17 +01:00
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
2024-02-06 07:28:03 +01:00
__vite__mapDeps.viteFileDeps = ["foo/bar/Login-dJpPRzM4.js", "foo/bar/index-XwzrZ5Gu.js"]
2024-01-27 18:49:29 +01:00
}
2024-01-30 00:06:17 +01:00
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}
`;
for (const { reactAppBuildDirPath, assetsDirPath, systemType } of [
{
2024-05-20 15:48:51 +02:00
systemType: "posix",
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/dist",
assetsDirPath: "/Users/someone/github/keycloakify-starter/dist/foo/bar"
2024-01-30 00:06:17 +01:00
},
{
2024-05-20 15:48:51 +02:00
systemType: "win32",
reactAppBuildDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist",
assetsDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist\\foo\\bar"
2024-01-30 00:06:17 +01:00
}
] as const) {
const { fixedJsCode } = replaceImportsInJsCode_vite({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
basenameOfAssetsFiles: [
"Login-dJpPRzM4.js",
"index-XwzrZ5Gu.js",
"keycloakify-logo-mqjydaoZ.png"
],
buildOptions: {
2024-01-30 00:06:17 +01:00
reactAppBuildDirPath,
assetsDirPath,
2024-05-20 15:48:51 +02:00
urlPathname: undefined
2024-01-30 00:06:17 +01:00
},
systemType
});
const fixedJsCodeExpected = `
2024-02-06 07:28:03 +01:00
S=(window.${nameOfTheGlobal}.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/foo/bar/keycloakify-logo-mqjydaoZ.png"),H=(()=>{
2024-01-30 00:06:17 +01:00
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = [
2024-02-06 07:28:03 +01:00
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/foo/bar/Login-dJpPRzM4.js"),
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/foo/bar/index-XwzrZ5Gu.js")
2024-01-30 00:06:17 +01:00
]
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}
`;
2024-01-27 18:49:29 +01:00
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
2024-01-30 00:06:17 +01:00
}
});
2024-01-27 18:49:29 +01:00
2024-01-30 00:06:17 +01:00
it("replaceImportsInJsCode_vite - 5", () => {
2024-01-27 18:49:29 +01:00
const jsCodeUntransformed = `
2024-01-30 00:06:17 +01:00
S="/foo-bar-baz/assets/keycloakify-logo-mqjydaoZ.png",H=(()=>{
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = ["assets/Login-dJpPRzM4.js", "assets/index-XwzrZ5Gu.js"]
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}
`;
for (const { reactAppBuildDirPath, assetsDirPath, systemType } of [
{
2024-05-20 15:48:51 +02:00
systemType: "posix",
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/dist",
assetsDirPath: "/Users/someone/github/keycloakify-starter/dist/assets"
2024-01-30 00:06:17 +01:00
},
{
2024-05-20 15:48:51 +02:00
systemType: "win32",
reactAppBuildDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist",
assetsDirPath:
"C:\\\\Users\\someone\\github\\keycloakify-starter\\dist\\assets"
2024-01-30 00:06:17 +01:00
}
] as const) {
const { fixedJsCode } = replaceImportsInJsCode_vite({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
basenameOfAssetsFiles: [
"Login-dJpPRzM4.js",
"index-XwzrZ5Gu.js",
"keycloakify-logo-mqjydaoZ.png"
],
buildOptions: {
2024-01-30 00:06:17 +01:00
reactAppBuildDirPath,
assetsDirPath,
2024-05-20 15:48:51 +02:00
urlPathname: "/foo-bar-baz/"
2024-01-30 00:06:17 +01:00
},
systemType
});
const fixedJsCodeExpected = `
2024-02-06 07:28:03 +01:00
S=(window.${nameOfTheGlobal}.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/assets/keycloakify-logo-mqjydaoZ.png"),H=(()=>{
2024-01-30 00:06:17 +01:00
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = [
2024-02-06 07:28:03 +01:00
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/assets/Login-dJpPRzM4.js"),
(window.${nameOfTheGlobal}.url.resourcesPath.substring(1) + "/${basenameOfTheKeycloakifyResourcesDir}/assets/index-XwzrZ5Gu.js")
2024-01-30 00:06:17 +01:00
]
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}
`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
}
});
});
2024-01-30 00:10:59 +01:00
describe("js replacer - webpack", () => {
2024-01-30 00:15:08 +01:00
it("replaceImportsInJsCode_webpack - 1", () => {
const jsCodeUntransformed = `
function f() {
return a.p+"static/js/" + ({}[e] || e) + "." + {
3: "0664cdc0"
}[e] + ".chunk.js"
}
2022-07-22 15:35:23 +02:00
2024-01-30 00:15:08 +01:00
function sameAsF() {
return a.p+"static/js/" + ({}[e] || e) + "." + {
3: "0664cdc0"
}[e] + ".chunk.js"
}
2022-07-22 18:20:50 +02:00
2024-01-30 00:15:08 +01:00
__webpack_require__.u=function(e){return"static/js/" + e + "." + {
147: "6c5cee76",
787: "8da10fcf",
922: "be170a73"
} [e] + ".chunk.js"
}
2022-08-02 21:00:52 +02:00
2024-01-30 00:15:08 +01:00
t.miniCssF=function(e){return"static/css/"+e+"."+{
164:"dcfd7749",
908:"67c9ed2c"
}[e]+".chunk.css"
}
2024-01-30 00:15:08 +01:00
n.u=e=>"static/js/"+e+"."+{69:"4f205f87",128:"49264537",453:"b2fed72e",482:"f0106901"}[e]+".chunk.js"
2024-01-30 00:15:08 +01:00
t.miniCssF=e=>"static/css/"+e+"."+{164:"dcfd7749",908:"67c9ed2c"}[e]+".chunk.css"
`;
const { fixedJsCode } = replaceImportsInJsCode_webpack({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
buildOptions: {
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/build",
assetsDirPath: "/Users/someone/github/keycloakify-starter/build/static",
urlPathname: undefined
2024-01-30 00:15:08 +01:00
}
2024-01-30 00:06:17 +01:00
});
2022-07-22 15:35:23 +02:00
2024-01-30 00:06:17 +01:00
const fixedJsCodeExpected = `
2022-07-22 15:35:23 +02:00
function f() {
return window.kcContext.url.resourcesPath + "/build/static/js/" + ({}[e] || e) + "." + {
3: "0664cdc0"
}[e] + ".chunk.js"
}
2022-07-28 04:24:10 +02:00
function sameAsF() {
2022-07-22 15:35:23 +02:00
return window.kcContext.url.resourcesPath + "/build/static/js/" + ({}[e] || e) + "." + {
3: "0664cdc0"
}[e] + ".chunk.js"
}
2022-07-22 18:20:50 +02:00
2022-09-05 00:08:50 +02:00
__webpack_require__[(function (){
var pd = Object.getOwnPropertyDescriptor(__webpack_require__, "p");
2022-09-01 17:22:15 +02:00
if( pd === undefined || pd.configurable ){
2022-09-05 00:08:50 +02:00
Object.defineProperty(__webpack_require__, "p", {
2022-09-01 17:22:15 +02:00
get: function() { return window.kcContext.url.resourcesPath; },
set: function() {}
2022-09-01 17:22:15 +02:00
});
}
2022-07-28 04:24:10 +02:00
return "u";
})()] = function(e) {
2022-07-22 18:20:50 +02:00
return "/build/static/js/" + e + "." + {
147: "6c5cee76",
787: "8da10fcf",
922: "be170a73"
} [e] + ".chunk.js"
}
2022-08-02 21:00:52 +02:00
t[(function (){
var pd = Object.getOwnPropertyDescriptor(t, "p");
2022-09-01 17:22:15 +02:00
if( pd === undefined || pd.configurable ){
Object.defineProperty(t, "p", {
get: function() { return window.kcContext.url.resourcesPath; },
set: function() {}
2022-09-01 17:22:15 +02:00
});
}
2022-08-02 21:00:52 +02:00
return "miniCssF";
})()] = function(e) {
return "/build/static/css/" + e + "." + {
164:"dcfd7749",
908:"67c9ed2c"
} [e] + ".chunk.css"
}
n[(function(){
var pd = Object.getOwnPropertyDescriptor(n, "p");
if( pd === undefined || pd.configurable ){
Object.defineProperty(n, "p", {
get: function() { return window.kcContext.url.resourcesPath; },
set: function() {}
});
}
return "u";
})()] = e => "/build/static/js/"+e+"."+{69:"4f205f87",128:"49264537",453:"b2fed72e",482:"f0106901"}[e]+".chunk.js"
t[(function(){
var pd = Object.getOwnPropertyDescriptor(t, "p");
if( pd === undefined || pd.configurable ){
Object.defineProperty(t, "p", {
get: function() { return window.kcContext.url.resourcesPath; },
set: function() {}
});
}
return "miniCssF";
})()] = e => "/build/static/css/"+e+"."+{164:"dcfd7749",908:"67c9ed2c"}[e]+".chunk.css"
2022-07-22 15:35:23 +02:00
`;
2024-01-30 00:06:17 +01:00
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
});
it("replaceImportsInJsCode_webpack - 2", () => {
const before = `"__esModule",{value:!0})}`;
const after = `function(){if("undefined"`;
const jsCodeUntransformed = `${before},n.p="/foo-bar/",${after}`;
const { fixedJsCode } = replaceImportsInJsCode_webpack({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
buildOptions: {
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/build",
assetsDirPath: "/Users/someone/github/keycloakify-starter/build/static",
urlPathname: "/foo-bar/"
}
});
const fixedJsCodeExpected = `${before},n.p="/",${after}`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
});
it("replaceImportsInJsCode_webpack - 3", () => {
const before = `"__esModule",{value:!0})}`;
const after = `function(){if("undefined"`;
const jsCodeUntransformed = `${before},n.p="/foo/bar/",${after}`;
const { fixedJsCode } = replaceImportsInJsCode_webpack({
2024-05-20 15:48:51 +02:00
jsCode: jsCodeUntransformed,
buildOptions: {
reactAppBuildDirPath: "/Users/someone/github/keycloakify-starter/build",
assetsDirPath:
"/Users/someone/github/keycloakify-starter/dist/build/static",
urlPathname: "/foo/bar/"
}
});
const fixedJsCodeExpected = `${before},n.p="/",${after}`;
expect(isSameCode(fixedJsCode, fixedJsCodeExpected)).toBe(true);
});
});
2024-01-30 00:10:59 +01:00
describe("css replacer", () => {
it("transforms absolute urls to css globals properly with no urlPathname", () => {
const { fixedCssCode, cssGlobalsToDefine } = replaceImportsInCssCode({
2024-05-20 15:48:51 +02:00
cssCode: `
.my-div {
background: url(/logo192.png) no-repeat center center;
}
.my-div2 {
2023-12-14 15:33:57 +01:00
background: url(/logo192.png) repeat center center;
}
.my-div {
background-image: url(/static/media/something.svg);
}
`
});
2022-07-22 15:35:23 +02:00
const fixedCssCodeExpected = `
2022-07-22 15:35:23 +02:00
.my-div {
2023-12-14 15:33:57 +01:00
background: var(--urla882a969fd39473) no-repeat center center;
2022-07-22 15:35:23 +02:00
}
2022-07-22 15:35:23 +02:00
.my-div2 {
2023-12-14 15:33:57 +01:00
background: var(--urla882a969fd39473) repeat center center;
2022-07-22 15:35:23 +02:00
}
2022-07-22 15:35:23 +02:00
.my-div {
background-image: var(--urldd75cab58377c19);
2022-07-22 15:35:23 +02:00
}
`;
2021-04-11 18:18:52 +02:00
expect(isSameCode(fixedCssCode, fixedCssCodeExpected)).toBe(true);
2021-02-21 17:38:59 +01:00
const cssGlobalsToDefineExpected = {
2024-05-20 15:48:51 +02:00
urla882a969fd39473: "url(/logo192.png)",
urldd75cab58377c19: "url(/static/media/something.svg)"
};
2021-02-21 17:38:59 +01:00
expect(same(cssGlobalsToDefine, cssGlobalsToDefineExpected)).toBe(true);
2021-02-21 17:38:59 +01:00
const { cssCodeToPrependInHead } = generateCssCodeToDefineGlobals({
cssGlobalsToDefine,
2024-05-20 15:48:51 +02:00
buildOptions: {
urlPathname: undefined
}
});
2021-02-21 17:38:59 +01:00
const cssCodeToPrependInHeadExpected = `
:root {
2023-12-14 15:33:57 +01:00
--urla882a969fd39473: url(\${url.resourcesPath}/build/logo192.png);
--urldd75cab58377c19: url(\${url.resourcesPath}/build/static/media/something.svg);
}
`;
2021-02-21 17:38:59 +01:00
2024-05-20 15:48:51 +02:00
expect(isSameCode(cssCodeToPrependInHead, cssCodeToPrependInHeadExpected)).toBe(
true
);
2022-07-22 15:35:23 +02:00
});
it("transforms absolute urls to css globals properly with custom urlPathname", () => {
const { fixedCssCode, cssGlobalsToDefine } = replaceImportsInCssCode({
2024-05-20 15:48:51 +02:00
cssCode: `
.my-div {
background: url(/x/y/z/logo192.png) no-repeat center center;
}
.my-div2 {
background: url(/x/y/z/logo192.png) no-repeat center center;
}
.my-div {
background-image: url(/x/y/z/static/media/something.svg);
}
`
});
2021-02-21 17:38:59 +01:00
const fixedCssCodeExpected = `
2022-07-22 17:22:23 +02:00
.my-div {
2023-12-14 15:33:57 +01:00
background: var(--url749a3139386b2c8) no-repeat center center;
2022-07-22 17:22:23 +02:00
}
2022-07-22 17:22:23 +02:00
.my-div2 {
2023-12-14 15:33:57 +01:00
background: var(--url749a3139386b2c8) no-repeat center center;
2022-07-22 17:22:23 +02:00
}
2022-07-22 17:22:23 +02:00
.my-div {
background-image: var(--url8bdc0887b97ac9a);
2022-07-22 17:22:23 +02:00
}
`;
2022-07-22 17:22:23 +02:00
expect(isSameCode(fixedCssCode, fixedCssCodeExpected)).toBe(true);
2022-07-22 17:22:23 +02:00
const cssGlobalsToDefineExpected = {
2024-05-20 15:48:51 +02:00
url749a3139386b2c8: "url(/x/y/z/logo192.png)",
url8bdc0887b97ac9a: "url(/x/y/z/static/media/something.svg)"
};
2022-07-22 17:22:23 +02:00
expect(same(cssGlobalsToDefine, cssGlobalsToDefineExpected)).toBe(true);
2022-07-22 17:22:23 +02:00
const { cssCodeToPrependInHead } = generateCssCodeToDefineGlobals({
cssGlobalsToDefine,
2024-05-20 15:48:51 +02:00
buildOptions: {
urlPathname: "/x/y/z/"
}
});
2022-07-22 17:22:23 +02:00
const cssCodeToPrependInHeadExpected = `
:root {
2023-12-14 15:33:57 +01:00
--url749a3139386b2c8: url(\${url.resourcesPath}/build/logo192.png);
--url8bdc0887b97ac9a: url(\${url.resourcesPath}/build/static/media/something.svg);
}
`;
2022-07-22 17:22:23 +02:00
2024-05-20 15:48:51 +02:00
expect(isSameCode(cssCodeToPrependInHead, cssCodeToPrependInHeadExpected)).toBe(
true
);
2022-07-22 17:22:23 +02:00
});
});
2022-07-22 17:22:23 +02:00
2024-01-30 00:10:59 +01:00
describe("inline css replacer", () => {
describe("no url pathName", () => {
const cssCode = `
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/WorkSans/worksans-regular-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/WorkSans/worksans-medium-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/WorkSans/worksans-semibold-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/WorkSans/worksans-bold-webfont.woff2") format("woff2");
}
`;
it("transforms css for standalone app properly", () => {
const { fixedCssCode } = replaceImportsInInlineCssCode({
cssCode,
2024-05-20 15:48:51 +02:00
buildOptions: {
urlPathname: undefined
}
});
const fixedCssCodeExpected = `
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-regular-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-medium-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-semibold-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-bold-webfont.woff2)
format("woff2");
}
`;
expect(isSameCode(fixedCssCode, fixedCssCodeExpected)).toBe(true);
});
});
describe("with url pathName", () => {
const cssCode = `
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/x/y/z/fonts/WorkSans/worksans-regular-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/x/y/z/fonts/WorkSans/worksans-medium-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/x/y/z/fonts/WorkSans/worksans-semibold-webfont.woff2") format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/x/y/z/fonts/WorkSans/worksans-bold-webfont.woff2") format("woff2");
}
`;
it("transforms css for standalone app properly", () => {
const { fixedCssCode } = replaceImportsInInlineCssCode({
cssCode,
2024-05-20 15:48:51 +02:00
buildOptions: {
urlPathname: "/x/y/z/"
}
});
const fixedCssCodeExpected = `
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-regular-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-medium-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-semibold-webfont.woff2)
format("woff2");
}
@font-face {
font-family: "Work Sans";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(\${url.resourcesPath}/build/fonts/WorkSans/worksans-bold-webfont.woff2)
format("woff2");
}
`;
expect(isSameCode(fixedCssCode, fixedCssCodeExpected)).toBe(true);
});
});
});