/** @jsxImportSource nativewind */
import {
PixelRatio,
Platform,
PlatformColor,
StyleSheet,
View,
} from "react-native";
import { screen } from "@testing-library/react-native";
import { render } from "../test";
import {
fontScaleSelect,
getPixelSizeForLayoutSize,
hairlineWidth,
pixelScaleSelect,
platformColor,
platformSelect,
roundToNearestPixel,
} from "../theme";
const testA = "a";
const testB = "b";
test("hairlineWidth()", async () => {
await render(, {
config: {
theme: {
extend: {
borderWidth: {
custom: hairlineWidth(),
},
},
},
},
});
const component = screen.getByTestId(testA);
expect(component).toHaveStyle({ borderWidth: StyleSheet.hairlineWidth });
});
test("platformSelect()", async () => {
await render(
<>
>,
{
config: {
theme: {
extend: {
colors: {
match: platformSelect({
[Platform.OS]: "black",
default: "white",
}),
default: platformSelect({
[Platform.OS === "ios" ? "android" : "ios"]: "black",
default: "white",
}),
},
},
},
},
},
);
expect(screen.getByTestId(testA)).toHaveStyle({ color: "black" });
expect(screen.getByTestId(testB)).toHaveStyle({ color: "white" });
});
test("pixelScaleSelect()", async () => {
const currentPixelRatio = PixelRatio.get();
await render(
<>
>,
{
config: {
theme: {
extend: {
colors: {
match: pixelScaleSelect({
[currentPixelRatio]: "black",
default: "white",
}),
default: pixelScaleSelect({
[currentPixelRatio + 1]: "black",
default: "white",
}),
},
},
},
},
},
);
expect(screen.getByTestId(testA)).toHaveStyle({ color: "black" });
expect(screen.getByTestId(testB)).toHaveStyle({ color: "white" });
});
test("fontScaleSelect()", async () => {
const fontScale = PixelRatio.getFontScale();
await render(
<>
>,
{
config: {
theme: {
extend: {
colors: {
match: fontScaleSelect({
[fontScale]: "black",
default: "white",
}),
default: fontScaleSelect({
[fontScale + 1]: "black",
default: "white",
}),
},
},
},
},
},
);
expect(screen.getByTestId(testA)).toHaveStyle({ color: "black" });
expect(screen.getByTestId(testB)).toHaveStyle({ color: "white" });
});
test("roundToNearestPixel()", async () => {
await render(, {
config: {
theme: {
extend: {
borderWidth: {
custom: roundToNearestPixel(2.5),
},
},
},
},
});
expect(screen.getByTestId(testA)).toHaveStyle({
borderWidth: PixelRatio.roundToNearestPixel(2.5),
});
});
test("getPixelSizeForLayoutSize()", async () => {
await render(, {
config: {
theme: {
extend: {
borderWidth: {
custom: getPixelSizeForLayoutSize(2),
},
},
},
},
});
expect(screen.getByTestId(testA)).toHaveStyle({
borderWidth: PixelRatio.getPixelSizeForLayoutSize(2),
});
});
test("platformColor()", async () => {
await render(, {
config: {
theme: {
extend: {
colors: {
custom: platformColor(
"systemTealColor",
"?android:attr/textColor",
"blue",
),
},
},
},
},
});
expect(screen.getByTestId(testA)).toHaveStyle({
color: PlatformColor("systemTealColor", "?android:attr/textColor", "blue"),
});
});
test("nested functions", async () => {
await render(
,
{
config: {
theme: {
extend: {
borderWidth: {
custom: platformSelect({
[Platform.OS]: pixelScaleSelect({
[PixelRatio.get()]: "var(--test)",
}),
}),
},
},
},
},
},
);
expect(screen.getByTestId(testA)).toHaveStyle({
borderWidth: 123,
});
});
test("custom color w/ css variable", async () => {
await render(
,
{
config: {
theme: {
extend: {
colors: {
primary: {
50: "rgb(var(--color-primary-50) / )",
},
},
},
},
},
},
);
expect(screen.getByTestId(testA)).toHaveStyle({
color: "rgba(240, 253, 250, 1)",
});
});