1*f4b1168bSBartosz Kaszubowskiimport { spacing } from '@expo/styleguide-base'; 27006d33cSBartosz Kaszubowskiimport { render, screen } from '@testing-library/react'; 3adfb0600SCedric van Putten 4adfb0600SCedric van Puttenimport { getHeadingIndent, getHeadingInfo } from './TableOfContents'; 5adfb0600SCedric van Putten 6adfb0600SCedric van Puttendescribe(getHeadingIndent, () => { 7adfb0600SCedric van Putten const paddingFactor = spacing[2]; 8adfb0600SCedric van Putten 9adfb0600SCedric van Putten // This shouldn't be included in the table of contents, but it's nice to test anyways 10adfb0600SCedric van Putten it('returns no padding for h1 heading', () => { 11adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h1'))).toHaveProperty('paddingLeft', 0); 12adfb0600SCedric van Putten }); 13adfb0600SCedric van Putten 14adfb0600SCedric van Putten it('returns no padding for h2 heading', () => { 15adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h2'))).toHaveProperty('paddingLeft', 0); 16adfb0600SCedric van Putten }); 17adfb0600SCedric van Putten 18adfb0600SCedric van Putten it('returns 1x padding for h3 heading', () => { 19adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h3'))).toHaveProperty('paddingLeft', paddingFactor); 20adfb0600SCedric van Putten }); 21adfb0600SCedric van Putten 22adfb0600SCedric van Putten it('returns 2x padding for h4 heading', () => { 23adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h4'))).toHaveProperty('paddingLeft', paddingFactor * 2); 24adfb0600SCedric van Putten }); 25adfb0600SCedric van Putten 26adfb0600SCedric van Putten it('returns 3x padding for h5 heading', () => { 27adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h5'))).toHaveProperty('paddingLeft', paddingFactor * 3); 28adfb0600SCedric van Putten }); 29adfb0600SCedric van Putten 30adfb0600SCedric van Putten it('returns 4x padding for h6 heading', () => { 31adfb0600SCedric van Putten expect(getHeadingIndent(makeHeading('h6'))).toHaveProperty('paddingLeft', paddingFactor * 4); 32adfb0600SCedric van Putten }); 33adfb0600SCedric van Putten}); 34adfb0600SCedric van Putten 35adfb0600SCedric van Puttendescribe(getHeadingInfo, () => { 36adfb0600SCedric van Putten it('returns normal text from h1 heading', () => { 37adfb0600SCedric van Putten expect(getHeadingInfo(makeHeading('h1', 'Hello'))).toMatchObject({ 38adfb0600SCedric van Putten type: 'text', 39adfb0600SCedric van Putten text: 'Hello', 40adfb0600SCedric van Putten }); 41adfb0600SCedric van Putten }); 42adfb0600SCedric van Putten 43adfb0600SCedric van Putten it('returns normal text from h2 heading', () => { 44adfb0600SCedric van Putten expect(getHeadingInfo(makeHeading('h2', 'Hello World'))).toMatchObject({ 45adfb0600SCedric van Putten type: 'text', 46adfb0600SCedric van Putten text: 'Hello World', 47adfb0600SCedric van Putten }); 48adfb0600SCedric van Putten }); 49adfb0600SCedric van Putten 50adfb0600SCedric van Putten it('returns normal text from h3 heading with platform specification', () => { 51adfb0600SCedric van Putten expect(getHeadingInfo(makeHeading('h3', 'Cool stuff (Android only)'))).toMatchObject({ 52adfb0600SCedric van Putten type: 'text', 53adfb0600SCedric van Putten text: 'Cool stuff (Android only)', 54adfb0600SCedric van Putten }); 55adfb0600SCedric van Putten }); 56adfb0600SCedric van Putten 57adfb0600SCedric van Putten it('returns code text from h4 heading with function name', () => { 58adfb0600SCedric van Putten expect(getHeadingInfo(makeHeading('h4', 'getCoolStuffAsync()'))).toMatchObject({ 59adfb0600SCedric van Putten type: 'code', 60adfb0600SCedric van Putten text: 'getCoolStuffAsync', 61adfb0600SCedric van Putten }); 62adfb0600SCedric van Putten }); 63adfb0600SCedric van Putten 64adfb0600SCedric van Putten it('returns code text from h5 heading with function name and args', () => { 65adfb0600SCedric van Putten expect(getHeadingInfo(makeHeading('h5', 'getTransformAsync(input: string)'))).toMatchObject({ 66adfb0600SCedric van Putten type: 'code', 67adfb0600SCedric van Putten text: 'getTransformAsync', 68adfb0600SCedric van Putten }); 69adfb0600SCedric van Putten }); 70adfb0600SCedric van Putten 71adfb0600SCedric van Putten it('returns code text from h6 heading with function name, args, and return type', () => { 72adfb0600SCedric van Putten expect( 73adfb0600SCedric van Putten getHeadingInfo(makeHeading('h6', 'getTransformAsync(input: string): Promise<string>')) 74adfb0600SCedric van Putten ).toMatchObject({ 75adfb0600SCedric van Putten type: 'code', 76adfb0600SCedric van Putten text: 'getTransformAsync', 77adfb0600SCedric van Putten }); 78adfb0600SCedric van Putten }); 79adfb0600SCedric van Putten}); 80adfb0600SCedric van Putten 81adfb0600SCedric van Puttenfunction makeHeading(Tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6', text = 'Hello World') { 827006d33cSBartosz Kaszubowski render(<Tag data-testid="heading">{text}</Tag>); 837006d33cSBartosz Kaszubowski return screen.getByTestId('heading') as HTMLHeadingElement; 84adfb0600SCedric van Putten} 85