/** * @jest-environment jsdom */ //@ts-nocheck import React from 'react'; import { render } from '@testing-library/react-native'; import Text from '../../Text'; import { NativeBaseProvider } from '../../../../core/NativeBaseProvider'; import { theme as defaultTheme } from '../../../../theme'; import { Platform } from 'react-native'; jest.useFakeTimers(); const theme = { ...defaultTheme, fontConfig: { Roboto: { 100: 'Roboto-Light', 200: 'Roboto-Light', 300: 'Roboto-Light', 400: { normal: 'Roboto-Regular', italic: 'Roboto-Italic', }, 500: 'Roboto-Medium', 600: 'Roboto-Medium', 700: { normal: 'Roboto-Bold', italic: 'Roboto-BoldItalic', }, 800: 'Roboto-Bold', 900: 'Roboto-Black', }, }, fonts: { ...defaultTheme.fonts, heading: 'Roboto', body: 'Roboto', }, }; const Provider = (props: any) => { return ( ); }; describe('Text component', () => { it('resolves default custom fonts', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Roboto-Regular'); }); it('resolves custom font variants', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Roboto-Italic'); }); it('resolves to bold italic font', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Roboto-BoldItalic'); }); it('resolves to medium font when fontWeight is 500', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Roboto-Medium'); }); it('resolves to medium font when fontWeight is medium', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Roboto-Medium'); }); it('respects fontFamily property', () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe('Merriweather-Italic'); }); it("doesn't break if custom font is not specified", () => { const newTheme = JSON.parse(JSON.stringify(defaultTheme)); delete newTheme.fontConfig; const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontFamily).toBe(undefined); }); it("doesn't pass fontWeight and fontStyle if a custom fontFamily is resolved", () => { const { getByTestId } = render( hello world ); const text = getByTestId('my-text'); expect(text.props.style.fontWeight).toBe(undefined); expect(text.props.style.fontStyle).toBe(undefined); expect(text.props.style.fontFamily).toBe('Roboto-Regular'); }); it('tests lineHeight from token in text ', () => { const { getByTestId } = render( This is a text ); const text = getByTestId('test'); expect(text.props.style.lineHeight).toBe( defaultTheme.fontSizes.sm * parseFloat(defaultTheme.lineHeights.md) ); }); it('tests absolute lineHeight in text ', () => { const { getByTestId } = render( This is a text ); const text = getByTestId('test'); expect(text.props.style.lineHeight).toBe(5); }); it('tests em non token lineHeight in text ', () => { const { getByTestId } = render( This is a text ); const text = getByTestId('test'); expect(text.props.style.lineHeight).toBe(defaultTheme.fontSizes.sm * 13); }); it('tests letterSpacing from token in text ', () => { const { getByTestId } = render( This is a text ); const text = getByTestId('test'); expect(text.props.style.letterSpacing).toBe( defaultTheme.fontSizes.sm * parseFloat(defaultTheme.letterSpacings['2xl']) ); }); it('tests letterSpacing in em from token in text ', () => { Platform.OS = 'web'; try { render( This is a text ); } catch (e) { expect(e.message).toContain(`"letterSpacing": "0.1em"`); } finally { Platform.OS = 'ios'; } }); it('tests lineHeight and letterSpacing in px', () => { const { getByTestId } = render( This is a text ); const text = getByTestId('test'); expect(text.props.style.lineHeight).toBe(24); expect(text.props.style.letterSpacing).toBe(12); }); });