mirror of
https://github.com/zhigang1992/nativewind.git
synced 2026-06-17 23:05:59 +08:00
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import { MediaRecord, StyleRecord } from "../../src/babel/types";
|
|
import { getNativeTailwindConfig } from "../../src/babel/tailwind/native-config";
|
|
import { extractStyles } from "../../src/babel/native-style-extraction";
|
|
import { normaliseSelector } from "../../src/shared/selector";
|
|
|
|
const nativeConfig = getNativeTailwindConfig();
|
|
|
|
export type Test = [string, Expected];
|
|
|
|
export interface Expected {
|
|
styles: StyleRecord;
|
|
media?: MediaRecord;
|
|
}
|
|
|
|
export function emptyResults(names: string[]): Test[] {
|
|
return names.map((name) => [name, { styles: {}, media: {} }]);
|
|
}
|
|
|
|
export function tailwindRunner(name: string, testCases: Test[]) {
|
|
describe(name, () => {
|
|
test.each(testCases)("%s", assetStyles);
|
|
});
|
|
}
|
|
|
|
export function assetStyles(
|
|
css: string,
|
|
{ styles: expectedStyles, media: expectedMedia }: Expected
|
|
) {
|
|
const { styles, media } = extractStyles({
|
|
theme: {},
|
|
...nativeConfig,
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
content: [{ raw: "", extension: "html" } as any],
|
|
safelist: [css],
|
|
});
|
|
|
|
expect(styles).toEqual(expectedStyles);
|
|
|
|
if (expectedMedia) {
|
|
expect(media).toEqual(expectedMedia);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Given an array of scales (eg 0,px,1,2,1/3) generates a set of tests
|
|
*/
|
|
export function generateTestsForScales<T extends string | number>(
|
|
prefix: string,
|
|
scales: Array<T>,
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
valueFunction: (n: T) => any
|
|
): Test[] {
|
|
return scales.map((scale) => {
|
|
const scalesGeneratedByTailwind: T[] = [scale];
|
|
|
|
// If the scale is 0.5, the tailwind compiler will generate styles for
|
|
// both 0.5 and 0
|
|
//
|
|
// This is true for all decimal numbers
|
|
const scaleParsed = Number(scale.toString());
|
|
if (Number.isFinite(scaleParsed) && Math.floor(scaleParsed) !== scale) {
|
|
scalesGeneratedByTailwind.push(Math.floor(scaleParsed) as T);
|
|
}
|
|
|
|
return [
|
|
`${prefix}-${scale}`,
|
|
{
|
|
media: {},
|
|
styles: Object.fromEntries(
|
|
scalesGeneratedByTailwind.map((index) => [
|
|
normaliseSelector(`${prefix}-${index}`),
|
|
valueFunction(index),
|
|
])
|
|
),
|
|
},
|
|
];
|
|
});
|
|
}
|