| using System; | |
| using System.Text; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml.FormulaParsing.LexicalAnalysis; | |
| using OfficeOpenXml.FormulaParsing; | |
| namespace EPPlusTest.FormulaParsing.LexicalAnalysis | |
| { | |
| [TestClass] | |
| public class NegationTests | |
| { | |
| private SourceCodeTokenizer _tokenizer; | |
| [TestInitialize] | |
| public void Setup() | |
| { | |
| var context = ParsingContext.Create(); | |
| _tokenizer = new SourceCodeTokenizer(context.Configuration.FunctionRepository, null); | |
| } | |
| [TestCleanup] | |
| public void Cleanup() | |
| { | |
| } | |
| [TestMethod] | |
| public void ShouldSetNegatorOnFirstTokenIfFirstCharIsMinus() | |
| { | |
| var input = "-1"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(2, tokens.Count()); | |
| Assert.AreEqual(TokenType.Negator, tokens.First().TokenType); | |
| } | |
| [TestMethod] | |
| public void ShouldChangePlusToMinusIfNegatorIsPresent() | |
| { | |
| var input = "1 + -1"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(3, tokens.Count()); | |
| Assert.AreEqual(TokenType.Operator, tokens.ElementAt(1).TokenType); | |
| Assert.AreEqual("-", tokens.ElementAt(1).Value); | |
| } | |
| [TestMethod] | |
| public void ShouldSetNegatorOnTokenInsideParenthethis() | |
| { | |
| var input = "1 + (-1 * 2)"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(8, tokens.Count()); | |
| Assert.AreEqual(TokenType.Negator, tokens.ElementAt(3).TokenType); | |
| } | |
| [TestMethod] | |
| public void ShouldSetNegatorOnTokenInsideFunctionCall() | |
| { | |
| var input = "Ceiling(-1, -0.1)"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(8, tokens.Count()); | |
| Assert.AreEqual(TokenType.Negator, tokens.ElementAt(2).TokenType); | |
| Assert.AreEqual(TokenType.Negator, tokens.ElementAt(5).TokenType, "Negator after comma was not identified"); | |
| } | |
| [TestMethod] | |
| public void ShouldSetNegatorOnTokenInEnumerable() | |
| { | |
| var input = "{-1}"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(TokenType.Negator, tokens.ElementAt(1).TokenType); | |
| } | |
| [TestMethod] | |
| public void ShouldSetNegatorOnExcelAddress() | |
| { | |
| var input = "-A1"; | |
| var tokens = _tokenizer.Tokenize(input); | |
| Assert.AreEqual(TokenType.Negator, tokens.ElementAt(0).TokenType); | |
| Assert.AreEqual(TokenType.ExcelAddress, tokens.ElementAt(1).TokenType); | |
| } | |
| } | |
| } |