From 66b2474fa212b9ccb5a74b68579aa59399f849ad Mon Sep 17 00:00:00 2001 From: FoggyFinder Date: Thu, 15 Aug 2019 11:06:08 +0300 Subject: [PATCH] fix slash handler --- CSharpMath.Editor.Tests/MathKeyboardTests.cs | 52 ++++++++++++++++++++ CSharpMath.Editor/Keyboards/MathKeyboard.cs | 7 ++- 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 CSharpMath.Editor.Tests/MathKeyboardTests.cs diff --git a/CSharpMath.Editor.Tests/MathKeyboardTests.cs b/CSharpMath.Editor.Tests/MathKeyboardTests.cs new file mode 100644 index 000000000..6fa0b08aa --- /dev/null +++ b/CSharpMath.Editor.Tests/MathKeyboardTests.cs @@ -0,0 +1,52 @@ +using CSharpMath.Editor; +using CSharpMath.FrontEnd; +using CSharpMath.Tests.FrontEnd; +using Xunit; + +public class MathKeyboardTests { + + public const float FontSize = 20; + public static readonly TestFont Font = new TestFont(FontSize); + private static readonly TypesettingContext context = TestTypesettingContexts.Instance; + + [Fact] + // https://github.com/verybadcat/CSharpMath/issues/39 + public void SlashInsideOfPowerTest() { + var keyboard = new MathKeyboard(context); + keyboard.KeyPress(MathKeyboardInput.SmallX); + keyboard.KeyPress(MathKeyboardInput.Power); + keyboard.KeyPress(MathKeyboardInput.D2); + keyboard.KeyPress(MathKeyboardInput.Slash); + Assert.Equal("x^{\\frac{2}{■}}", keyboard.LaTeX); + } + + [Fact] + public void SlashInsideOfPowerTest2() { + var keyboard = new MathKeyboard(context); + keyboard.KeyPress(MathKeyboardInput.SmallX); + keyboard.KeyPress(MathKeyboardInput.Power); + keyboard.KeyPress(MathKeyboardInput.D1); + keyboard.KeyPress(MathKeyboardInput.D2); + keyboard.KeyPress(MathKeyboardInput.D3); + keyboard.KeyPress(MathKeyboardInput.Slash); + Assert.Equal("x^{\\frac{123}{■}}", keyboard.LaTeX); + } + + [Fact] + public void DefaultNumeratorTest() { + var keyboard = new MathKeyboard(context); + keyboard.KeyPress(MathKeyboardInput.Slash); + Assert.Equal("\\frac{1}{■}", keyboard.LaTeX); + } + + [Fact] + // https://github.com/kostub/MathEditor/issues/18 + public void SlashAfterSlashTest() { + var keyboard = new MathKeyboard(context); + keyboard.KeyPress(MathKeyboardInput.D4); + keyboard.KeyPress(MathKeyboardInput.Slash); + keyboard.KeyPress(MathKeyboardInput.D4); + keyboard.KeyPress(MathKeyboardInput.Slash); + Assert.Equal("\\frac{4}{\\frac{4}{■}}", keyboard.LaTeX); + } +} diff --git a/CSharpMath.Editor/Keyboards/MathKeyboard.cs b/CSharpMath.Editor/Keyboards/MathKeyboard.cs index 45be7bdb9..d03b0eba6 100644 --- a/CSharpMath.Editor/Keyboards/MathKeyboard.cs +++ b/CSharpMath.Editor/Keyboards/MathKeyboard.cs @@ -247,7 +247,7 @@ void HandleSlashButton() { //Add the number to the beginning of the list numerator.Insert(0, a); } - if (current.AtomIndex == _insertionIndex.AtomIndex) { + if (numerator.Count == 0) { // so we didn't really find any numbers before this, so make the numerator 1 numerator.Add(MathAtoms.ForCharacter('1')); if (!current.AtBeginningOfLine) { @@ -259,9 +259,8 @@ void HandleSlashButton() { } } } else - // delete stuff in the Mathlist from current to insertionIndex - MathList.RemoveAtoms( - new MathListRange(current, _insertionIndex.AtomIndex - current.AtomIndex)); + // delete stuff in the Mathlist + MathList.RemoveAtoms(new MathListRange(current, numerator.Count)); //Create the fraction var frac = new Fraction { Numerator = numerator, Denominator = MathAtoms.PlaceholderList };