/** @jsxImportSource test */ import { View } from "react-native"; import { registerCSS, render, setupAllComponents, vars } from "test"; const testID = "react-native-css-interop"; setupAllComponents(); describe("css", () => { test("calc(10px + 100px)", () => { registerCSS( `.my-class { width: calc(10px + 100px); }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ width: 110, }); }); test("calc(100% - 30px)", () => { // React Native does not support calc() with a percentage value, so this should be `undefined` registerCSS( `.my-class { width: calc(100% - 30px); }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle(undefined); }); test("calc(2em * 3)", () => { registerCSS( `.my-class { width: calc(2em * 2); font-size: 5px }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ width: 20, fontSize: 5, }); }); test("calc(2rem * 5)", () => { registerCSS( `.my-class { width: calc(2rem * 5) }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ width: 140, }); }); test("calc(var(--variable) + 20px)", () => { registerCSS( `.my-class { width: calc(var(--variable) + 20px) }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ width: 120, }); }); test("calc(var(--percent) + 20%)", () => { registerCSS( `.my-class { width: calc(var(--percent) + 20%) }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ width: "30%", }); }); }); test("calc & colors", () => { registerCSS( `.my-class { background-color: hsl( calc(var(--H) + 20), calc(var(--S) - 10%), calc(var(--L) + 30%) ) }`, ); const component = render( , ).getByTestId(testID); expect(component).toHaveStyle({ backgroundColor: "hsl(120, 90%, 80%)", }); });