| 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); |
| } |
| } |
| } |