public void TokenPipeline_MathExpressionException_Thrown_By_Rewriter_Is_Not_Wrapped_In_MathExpressionException()
 {
     var processor1 = new TestActionProcessor(() => { throw new MathExpressionException("An error."); });
     var processor2 = new TestActionProcessor(() => { });
     TokenPipeline pipeline = new TokenPipeline(processor1, processor2);
     var exception = Assert.Throws<MathExpressionException>(() => pipeline.Process(new TokenStream(new Token[] { }, TokenNotation.Infix)));
     Assert.IsNull(exception.InnerException);
     Assert.AreEqual("An error.", exception.Message);
 }
 public void TokenPipeline_Executes_Processors_In_Same_Order_As_Added()
 {
     DateTime processor1InvokedAt = DateTime.MinValue;
     DateTime processor2InvokedAt = DateTime.MinValue;
     var processor1 = new TestActionProcessor(() => { processor1InvokedAt = DateTime.Now; Thread.Sleep(5); });
     var processor2 = new TestActionProcessor(() => { processor2InvokedAt = DateTime.Now; });
     TokenPipeline pipeline = new TokenPipeline(processor1, processor2);
     pipeline.Process(new TokenStream(new Token[] { }, TokenNotation.Infix));
     Assert.Less(processor1InvokedAt, processor2InvokedAt);
 }
 public void TokenPipeline_Exceptions_Thrown_By_Processor_Is_Wrapped_In_MathExpressionException()
 {
     var processor1 = new TestActionProcessor(() => { throw new InvalidOperationException("An error."); });
     var processor2 = new TestActionProcessor(() => { });
     TokenPipeline pipeline = new TokenPipeline(processor1, processor2);
     var exception = Assert.Throws<MathExpressionException>(() => pipeline.Process(new TokenStream(new Token[] { }, TokenNotation.Infix)));
     Assert.IsInstanceOf<InvalidOperationException>(exception.InnerException);
     Assert.AreEqual("An error occured while processing tokens. See inner exception for details.", exception.Message);
     Assert.AreEqual("An error.", exception.InnerException.Message);
 }