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