/** @jsxImportSource test */ import { View } from "react-native"; import { getAnimatedStyle } from "react-native-reanimated"; import { fireEvent, registerCSS, render, screen, setupAllComponents, } from "test"; const grouping = ["^group(/.*)?"]; const parentID = "parent"; const childID = "child"; setupAllComponents(); jest.useFakeTimers(); test("group", async () => { registerCSS( `.group\\/item .my-class { color: red; }`, { grouping, }, ); const { rerender, getByTestId } = render( , ); expect(getByTestId(childID)).toHaveStyle({ color: "#ff0000" }); rerender( , ); expect(getByTestId(childID)).toHaveStyle(undefined); }); test("group - active", async () => { registerCSS( `.group\\/item:active .my-class { color: red; }`, { grouping, }, ); render( , ); const parent = screen.getByTestId(parentID); const child = screen.getByTestId(childID); expect(child).toHaveStyle(undefined); fireEvent(parent, "pressIn"); expect(child).toHaveStyle({ color: "#ff0000" }); }); test("group - active (animated)", async () => { registerCSS( ` .group\\/item:active .my-class { color: red; transition: color 1s; }`, { grouping, }, ); render( , ); const parent = screen.getByTestId(parentID); const child = screen.getByTestId(childID); expect(getAnimatedStyle(child)).toStrictEqual({}); fireEvent(parent, "pressIn"); jest.advanceTimersByTime(0); expect(getAnimatedStyle(child)).toStrictEqual({ color: "black", }); jest.advanceTimersByTime(500); expect(getAnimatedStyle(child)).toStrictEqual({ color: "rgba(151, 0, 0, 1)", }); jest.advanceTimersByTime(500); expect(getAnimatedStyle(child)).toStrictEqual({ color: "rgba(255, 0, 0, 1)", }); }); test("invalid group", async () => { registerCSS( `.invalid .my-class { color: red; }`, { grouping, }, ); const { rerender } = render(); const componentB = screen.findAllByTestId(childID); expect(componentB).toHaveStyle(undefined); rerender( , ); expect(componentB).toHaveStyle(undefined); }); test("group selector", async () => { registerCSS( `.group.test .my-class { color: red; }`, { grouping, }, ); const { rerender, getByTestId } = render( , ); expect(getByTestId(childID)).toHaveStyle({ color: "#ff0000" }); rerender( , ); expect(getByTestId(childID)).toHaveStyle(undefined); });