public void OneException() { var multi = new MultiException("one", new ValidationException("one")); multi.InnerExceptions.Count().Should().Be(1); multi.Message.Should().Be("one"); }
public void MultiExceptions() { var multi = new MultiException("one", new[] { new ValidationException("one"), new ValidationException("two") }); multi.InnerExceptions.Count().Should().Be(2); multi.Message.Should().Be($"one{Environment.NewLine}two"); }
private static int Run(Options options) { try { using (StreamReader sr = new StreamReader(File.OpenRead(options.File))) { StreamLexer parser = new StreamLexer(sr, options.Verbose, options.Debug, options.MultiError); Program prog = parser.Parse(); prog.Run(); } } catch (Exception ex) { switch (ex) { case InvalidSyntaxException exception: InvalidSyntaxException ise = exception; OutputEx(ise.Message, ise.Line, ise.Position, options.File); break; case AssertionException exception: AssertionException ae = exception; OutputEx(ae.Message, ae.Line, ae.Position, options.File); break; case MplDivideByZeroException exception: MplDivideByZeroException mdbze = exception; OutputEx(mdbze.Message, mdbze.Line, mdbze.Position, options.File); break; case RuntimeException exception: RuntimeException rte = exception; OutputEx(rte.Message, rte.Line, rte.Position, options.File); break; case UnexpectedCharacterException exception: UnexpectedCharacterException uece = exception; OutputEx(uece.Message, uece.Line, uece.Position, options.File); break; case UnsupportedCharacterException exception: UnsupportedCharacterException usce = exception; OutputEx(usce.Message, usce.Line, usce.Position, options.File); break; case MultiException exception: MultiException me = exception; OutputMultiEx(me, options.File); break; default: throw; } } return(0); }
/// <summary> /// Deletes several arrFileInfo at once and optionally consolidates any exceptions. /// </summary> /// <param name="arrFileInfo"> The arrFileInfo. </param> /// <param name="consolidateExceptions"> if set to <c>true</c> exceptions are consolidated and the processing is not interrupted. </param> /// <example> /// <code>var arrFileInfo = directory.GetFiles("*.txt", "*.xml"); /// arrFileInfo.Delete()</code> /// </example> public static void Delete(this FileInfo[] arrFileInfo, bool consolidateExceptions = true) { if (consolidateExceptions) { /* * var exceptions = new List<Exception>(); * foreach (var file in arrFileInfo) * { * try * { * file.TurnOffReadOnly(); * file.Delete(); * } * catch (Exception e) * { * exceptions.Add(e); * } * } * if (exceptions.Any()) * { * throw CombinedException.Combine( * "Error while deleting one or several arrFileInfo, see InnerExceptions array for details.", * exceptions); * } */ var multiExp = new MultiException(); foreach (var file in arrFileInfo) { try { file.TurnOffReadOnly(); file.Delete(); } catch (Exception exp) { multiExp.Add(exp); } } if (multiExp.Any()) { throw multiExp; } } else { foreach (var file in arrFileInfo) { file.Delete(); } } }
private static void OutputMultiEx(MultiException me, string filePath) { Console.Write("-----------------------------------\n"); Console.Write($"Encountered {me.Exceptions.Count} exceptions during parsing:\n"); foreach (Exception ex in me.Exceptions) { switch (ex) { case InvalidSyntaxException exception: InvalidSyntaxException ise = exception; OutputEx(ise.Message, ise.Line, ise.Position, filePath); break; case AssertionException exception: AssertionException ae = exception; OutputEx(ae.Message, ae.Line, ae.Position, filePath); break; case MplDivideByZeroException exception: MplDivideByZeroException mdbze = exception; OutputEx(mdbze.Message, mdbze.Line, mdbze.Position, filePath); break; case RuntimeException exception: RuntimeException rte = exception; OutputEx(rte.Message, rte.Line, rte.Position, filePath); break; case UnexpectedCharacterException exception: UnexpectedCharacterException uece = exception; OutputEx(uece.Message, uece.Line, uece.Position, filePath); break; case UnsupportedCharacterException exception: UnsupportedCharacterException usce = exception; OutputEx(usce.Message, usce.Line, usce.Position, filePath); break; default: throw ex; } } }
/// <summary> /// Deletes several arrFileInfo at once and optionally consolidates any exceptions. /// </summary> /// <param name="arrFileInfo"> The arrFileInfo. </param> /// <param name="consolidateExceptions"> if set to <c>true</c> exceptions are consolidated and the processing is not interrupted. </param> /// <example> /// <code>var arrFileInfo = directory.GetFiles("*.txt", "*.xml"); /// arrFileInfo.Delete()</code> /// </example> public static void Delete(this FileInfo[] arrFileInfo, bool consolidateExceptions = true) { if (consolidateExceptions) { /* var exceptions = new List<Exception>(); foreach (var file in arrFileInfo) { try { file.TurnOffReadOnly(); file.Delete(); } catch (Exception e) { exceptions.Add(e); } } if (exceptions.Any()) { throw CombinedException.Combine( "Error while deleting one or several arrFileInfo, see InnerExceptions array for details.", exceptions); } */ var multiExp = new MultiException(); foreach (var file in arrFileInfo) { try { file.TurnOffReadOnly(); file.Delete(); } catch (Exception exp) { multiExp.Add(exp); } } if (multiExp.Any()) { throw multiExp; } } else { foreach (var file in arrFileInfo) file.Delete(); } }