mattermost-mobile/app/utils/latex.test.ts
KobeBergmans 21adcf6085
Latex rendering with react-native-math-view (#5651)
* Added a Latex code window that displays the given code using katex

* Latex is now displayed without having to go to the next screen

* MathView test

* MathView WIP:
Displays math good, but in verry small font
View does not load if there is a syntax error and we are hard stuck in the app

* Math view now is rendered properly, few working points:
Text is not fixed size, it renders in a weird size
Multi Line subscript is not working

* Latex is now rendered properly

* Fixed Error message and moved helper function to utils

* Added some padding and vertical scroll on latex screen

* Updated config option to work on real phone too

* Removed unused code and fixed tests

* Added LatexInline and tried to modify parser, not yet finished though. InlineLatexOption is not yet coded for

* Bugfixes and better line break checking

* Few margin changes for ios, also updated pod files

* padding is now dependend on system

* Add platform import

* Reverted package-lock change

* Added tests

* Bugfixes, UI tweaks and added unit test for latex util

* Added enableLatex to markdown options instead getting the state and config

* Changed the rendering a little bit, it is better but still far from perfect

* Width and height is now correctely displayed. Still not clean enough though

* Inline latex is now rendered properly for most equations

* Inline latex is now working properly

* tests for escaping and unescaping functions

* Added inline latex setting support

* Added inline latex tests

* Delete unused comment

* Added extra regex rule: there must be no word character in front of the inline latex code

* Upgraded math-view package and deleted duplicate entry from gemfile.lock

* Inline error functions are now class functions

* Updated error color to theme error color

* Latex screen now extends the code screen

* Markdown changes:
Now uses dimensions instead of windowdimensions
Removed inline latex function
extracted latex rendering into separate function

* updated latex util test

* Hardcoded latex language in latex code block

* Added proptypes and cleaned up latex code block

* Bugfix latex split lines

* ÃDeleted language prop from latex code block

* Changed commonmark packages to personal repo's

* Latex rendering now goes by commonmark

* Deleted unused function and tests

* Commonmark packages back to normal versions with patch package

* Updated commonmark patch file to right file and changed package lock to point at right repo

* Updated patch files to latest version

* Updated commonmark patch

* Fixed linter errors

* Integrety of commonmark fix

* First fix of ios problems

* Updated snapshot

Co-authored-by: Kobe Bergmans <kobe.bergmans@student.kuleuven.be>
Co-authored-by: Administrator <admin@Macintosh-3.localdomain>
Co-authored-by: kobe bergmans <kobebergmans@kobes-MacBook-Pro.local>
2022-04-19 09:16:38 -04:00

66 lines
2.5 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
/* eslint-disable no-useless-escape */
import {splitLatexCodeInLines} from './latex';
describe('LatexUtilTest', () => {
test('Simple lines test', () => {
const content = '\\frac{1}{2} = 0.5 \\\\ \\pi == 3';
const result = splitLatexCodeInLines(content);
expect(result.length).toEqual(2);
expect(result[0]).toEqual('\\frac{1}{2} = 0.5');
expect(result[1]).toEqual('\\pi == 3');
});
test('Multi line with cases test', () => {
const content = `b_n=\\frac{1}{\\pi}\\int\\limits_{-\\pi}^{\\pi}f(x)\\sin nx\\,\\mathrm{d}x=\\frac{1}{\\pi}\\int\\limits_{-\\pi}^{\\pi}x^2\\sin nx\\,\\mathrm{d}x\\\\
X(m, n) = \\left.
\\begin{cases}
x(n), & \\text{for } 0 \\leq n \\leq 1 \\\\
x(n - 1), & \\text{for } 0 \\leq n \\leq 1 \\\\
x(n - 1), & \\text{for } 0 \\leq n \\leq 1
\\end{cases} \\right\\} = xy\\\\
\\lim_{a\\to \\infty} \\tfrac{1}{a}\\\\
\\lim_{a \\underset{>}{\\to} 0} \\frac{1}{a}\\\\
x = a_0 + \\frac{1}{a_1 + \\frac{1}{a_2 + \\frac{1}{a_3 + a_4}}}`;
const result = splitLatexCodeInLines(content);
expect(result.length).toEqual(5);
expect(result[0]).toEqual('b_n=\\frac{1}{\\pi}\\int\\limits_{-\\pi}^{\\pi}f(x)\\sin nx\\,\\mathrm{d}x=\\frac{1}{\\pi}\\int\\limits_{-\\pi}^{\\pi}x^2\\sin nx\\,\\mathrm{d}x');
expect(result[1]).toEqual(`X(m, n) = \\left.
\\begin{cases}
x(n), & \\text{for } 0 \\leq n \\leq 1 \\\\
x(n - 1), & \\text{for } 0 \\leq n \\leq 1 \\\\
x(n - 1), & \\text{for } 0 \\leq n \\leq 1
\\end{cases} \\right\\} = xy`);
expect(result[2]).toEqual('\\lim_{a\\to \\infty} \\tfrac{1}{a}');
expect(result[3]).toEqual('\\lim_{a \\underset{>}{\\to} 0} \\frac{1}{a}');
expect(result[4]).toEqual('x = a_0 + \\frac{1}{a_1 + \\frac{1}{a_2 + \\frac{1}{a_3 + a_4}}}');
});
test('Escaped bracket test', () => {
const content = 'test = \\frac{1\\{}{2} = \\alpha \\\\ line = 2';
const result = splitLatexCodeInLines(content);
expect(result.length).toEqual(2);
expect(result[0]).toEqual('test = \\frac{1\\{}{2} = \\alpha');
expect(result[1]).toEqual('line = 2');
});
test('Escaped begin and end statement', () => {
const content = 'test = \\\\begin \\\\ line = 2';
const result = splitLatexCodeInLines(content);
expect(result.length).toEqual(3);
expect(result[0]).toEqual('test =');
expect(result[1]).toEqual('begin');
expect(result[2]).toEqual('line = 2');
});
});