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