import React from 'react';
import { Text } from 'react-native';
import type { ReactTestInstance } from 'react-test-renderer';
import { render, waitFor, within } from '@testing-library/react-native';
// @ts-ignore
import { ASTNode, SingleASTNode } from 'simple-markdown';
import { ListOutput, ListOutputProps } from './renderText';
describe('list', () => {
const createNode = ({
amount,
ordered = false,
start = 1,
}: {
amount: number;
ordered?: boolean;
start?: number;
}): SingleASTNode => ({
items: Array.from(Array(amount).keys()),
ordered,
start,
type: 'text',
});
// @ts-ignore
const mockOutput = (node: ASTNode) => {node};
const MockText = ({ node, output, state }: ListOutputProps) => (
<>
>
);
it('renders numbered items', () => {
const node = createNode({ amount: 3, ordered: true, start: 1 });
const { root } = render();
const textInstances = root.children as ReactTestInstance[];
textInstances.forEach(async (instance, index) => {
const text = `${index + node.start}. `; // 1. , 2. ...
await waitFor(() => expect(within(instance).getByText(text)).toBeTruthy());
});
});
it('renders numbered items from a start index', () => {
const node = createNode({ amount: 3, ordered: true, start: 3 });
const { root } = render();
const textInstances = root.children as ReactTestInstance[];
textInstances.forEach(async (instance, index) => {
const text = `${index + node.start}. `; // 3. , 4. ...
await waitFor(() => expect(within(instance).getByText(text)).toBeTruthy());
});
});
it('does not throw an error if an item is empty', () => {
const node = {
...createNode({ amount: 3, ordered: true }),
items: ['Not empty', null, 'Not empty'],
};
const { root } = render();
const textInstances = root.children as ReactTestInstance[];
textInstances.forEach(async (instance, index) => {
const text = `${index + 1}. `; // 1. , 2. ...
await waitFor(() => expect(within(instance).getByText(text)).toBeTruthy());
});
});
it('renders an unordered list', () => {
const node = createNode({ amount: 3 });
const { root } = render();
const textInstances = root.children as ReactTestInstance[];
textInstances.forEach(async (instance) => {
await waitFor(() => expect(within(instance).getByText('\u2022 ')).toBeTruthy());
});
});
});