import MathMLToLaTeX from '../src'; describe('#convert', () => { describe('given math string with mi tag', () => { test('convert mi to simple a text', () => { const mathml = 'a'; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('a'); }); }); describe('given math tag outside any other tag', () => { test('convert mi to simple b text', () => { const mathml = 'b'; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('b'); }); }); describe('given math string with mi tag with space on it', () => { test('should trim empty space', () => { const mathml = ' a '; const result = MathMLToLaTeX.convert(mathml); expect(result).toBe('a'); }); }); describe('given math string with mo tag with simple operator', () => { test('convert mo passing it operator as string', () => { const mathml = ` + `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('+'); }); }); describe('given math string with mrow tag', () => { test('convert mrow just wrapping its content', () => { const mathml = ` 2 + 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('2 + 2'); }); }); describe('given math string with msqrt tag', () => { describe('single mn tag is inside', () => { test('convert msqrt wrapping its content inside sqrt LaTeX command', () => { const mathml = ` 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\sqrt{2}'); }); }); describe('there are many children inside sqrt tag', () => { test('convert msqrt wrapping its content inside sqrt LaTeX command', () => { const mathml = ` 2 + 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\sqrt{2 + 2}'); }); }); describe('sqrt tag has single mrow child', () => { test('convert msqrt wrapping its content inside sqrt LaTeX command', () => { const mathml = ` 2 + 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\sqrt{2 + 2}'); }); }); describe('there is no content inside msqrt', () => { test('empty sqrt is given', () => { const mathml = ` `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\sqrt{}'); }); }); }); describe('given math string with msup tag', () => { describe('msup tag contains single char contents', () => { test('convert msup joining its two char contents with ^ and wrap exponent in brackets', () => { const mathml = ` x 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('x^{2}'); }); }); describe('msup tag contains base with single char content and exponent with more than one char content', () => { test('convert msup joining its two char contents with ^ and wrap exponent in brackets', () => { const mathml = ` x a + b `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('x^{a + b}'); }); }); describe('msup tag contains exponent with single char content and base with more than one char content', () => { test('convert msup joining its multi char contents with ^ and wrap base in parenthesis', () => { const mathml = ` x + y 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left(x + y\\right)^{2}'); }); }); describe('msup tag contains both exponent and base with more than one char content', () => { test('convert msup joining its multi char contents with ^, wrap base in parenthesis and exponent in brackets', () => { const mathml = ` x + y 2 + 2 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left(x + y\\right)^{2 + 2}'); }); }); }); describe('given math string with mfenced with single content and no attr', () => { test('convert mfenced wrapping it content in dots', () => { const mathml = ` 3 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left.3\\right.'); }); }); describe('given math string with mfenced with single content and open attribute in parenthesis char', () => { test('convert mfenced wrapping it content between parenthesis and dot', () => { const mathml = ` 3 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left(3\\right.'); }); }); describe('given math string with mfenced with single content and open and closes attributes in parenthesis char', () => { test('convert mfenced wrapping it content between parenthesis', () => { const mathml = ` 3 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left(3\\right)'); }); }); describe('given math string with mfenced with single content and open attribute in parenthesis char and close attribute without value', () => { test('convert mfenced wrapping it content between parenthesis', () => { const mathml = ` 3 `; const result = MathMLToLaTeX.convert(mathml); expect(result).toMatch('\\left(3\\right.'); }); }); });