import { render, screen } from '@testing-library/react-native'; import { View } from 'react-native'; import { margin, padding, type BoxSpacingPresets } from './box-spacing'; const properties = ['x', 'y', 'top', 'right', 'bottom', 'left']; const units = [4, 8, 12, 16, 24, 32]; describe('padding', () => { it('can apply padding style by specifying top, right, bottom, left', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ paddingTop: 8, paddingRight: 16, paddingBottom: 24, paddingLeft: 32, }); }); it('can apply padding style by specifying x, y', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ paddingLeft: 10, paddingRight: 10, paddingTop: 5, paddingBottom: 5, }); }); it('can apply padding style by specifying top, bottom, x', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ paddingLeft: 10, paddingRight: 10, paddingTop: 8, paddingBottom: 24, }); }); it('can apply padding style by specifying left, right, y', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ paddingLeft: 32, paddingRight: 16, paddingTop: 10, paddingBottom: 10, }); }); it('can apply padding style using method', () => { render(); expect(screen.getByTestId('view')).toHaveStyle({ paddingLeft: 10, paddingRight: 10, }); expect(screen.getByTestId('view')).not.toHaveStyle({ paddingTop: 10, paddingBottom: 10, }); }); it('when passing only a number to padding style, {padding:30} is applied', () => { render(); expect(screen.getByTestId('view')).toHaveStyle({ padding: 30, }); }); it('presets exist', () => { for (const property of properties) { for (const unit of units) { const key = `${property}${unit}` as keyof BoxSpacingPresets; expect(padding[key]).not.toBeUndefined(); } } }); }); describe('margin', () => { it('can apply margin style by specifying top, right, bottom, left', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ marginTop: 8, marginRight: 16, marginBottom: 24, marginLeft: 32, }); }); it('can apply margin style by specifying x, y', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ marginLeft: 10, marginRight: 10, marginTop: 5, marginBottom: 5, }); }); it('can apply margin style by specifying top, bottom, x', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ marginLeft: 10, marginRight: 10, marginTop: 8, marginBottom: 24, }); }); it('can apply margin style by specifying left, right, y', () => { render( ); expect(screen.getByTestId('view')).toHaveStyle({ marginLeft: 32, marginRight: 16, marginTop: 10, marginBottom: 10, }); }); it('can apply margin style using method', () => { render(); expect(screen.getByTestId('view')).toHaveStyle({ marginLeft: 10, marginRight: 10, }); expect(screen.getByTestId('view')).not.toHaveStyle({ marginTop: 10, marginBottom: 10, }); }); it('when passing only a number to margin style, {margin:30} is applied', () => { render(); expect(screen.getByTestId('view')).toHaveStyle({ margin: 30, }); }); it('presets exist', () => { for (const property of properties) { for (const unit of units) { const key = `${property}${unit}` as keyof BoxSpacingPresets; expect(margin[key]).not.toBeUndefined(); } } }); });