import React from 'react';
import RenderHTML from '../RenderHTML';
import renderer from 'react-test-renderer';
import { extractTextFromInstance } from './utils';
beforeAll(() => {
jest.useFakeTimers();
});
function testCollapseRuleForCharacter(character: string, name: string) {
const action =
character === ' ' ? 'preserves a space' : `replaces ${name} with a space`;
it(`collapses whitespaces when first text tag has a trailing ${name} and the second starts with a ${name}`, () => {
const testRenderer = renderer.create(
foo${character}${character}bar`
}}
/>
);
const renderedText = extractTextFromInstance(testRenderer.root);
expect(renderedText).toEqual('foo bar');
});
it(`${action} when the first text tag has a trailing ${name} and the second doesn't contain any`, () => {
const testRenderer = renderer.create(
bold${character}text` }}
/>
);
const renderedText = extractTextFromInstance(testRenderer.root);
expect(renderedText).toEqual('bold text');
});
it(`${action} between two inline elements which don't contain ${name}s and are separated with a ${name}`, () => {
const testRenderer = renderer.create(
bold${character}text` }}
/>
);
const renderedText = extractTextFromInstance(testRenderer.root);
expect(renderedText).toEqual('bold text');
});
}
/**
* This serie covers white-space CSS rule, normal behavior, i.e.
*
* white-space: normal;
*
* as documented here: https://www.w3.org/TR/css-text-3 (sections 3 and 4)
*/
describe('RenderHTML component regarding CSS white-space: normal rule', () => {
describe('involving spaces', () => {
testCollapseRuleForCharacter(' ', 'space');
});
describe('involving line feeds', () => {
testCollapseRuleForCharacter('\n', 'line feed');
});
describe('involving tabs', () => {
testCollapseRuleForCharacter('\t', 'tab');
});
describe('involving form feeds', () => {
testCollapseRuleForCharacter('\f', 'form feed');
});
});