public UnitTestFrameworkNamer() { Approvals.SetCaller(); stackTraceParser = new StackTraceParser(); stackTraceParser.Parse(Approvals.CurrentCaller.StackTrace); HandleSubdirectory(); }
public void TestApprovalNamerFailureMessage() { var parser = new StackTraceParser(); var exception = Assert.Throws <Exception>(() => parser.Parse(new StackTrace(6))); Approvals.Verify(exception.Message); }
private ErrorItem PopulateList(string stackTrace) { StackTraceParser parser = new StackTraceParser(); ErrorItem candidate; _stackTrace = stackTrace; parser.Parse(stackTrace); if (_listOrder == ErrorListOrderPolicy.ReverseOrder) { parser.Items.Reverse(); } candidate = null; _items.Clear(); foreach (ErrorItem item in parser.Items) { if (candidate == null && item.HasSourceAttachment) { candidate = item; } _items.Add(item); } return(candidate); }
public UnitTestFrameworkNamer() { Approvals.SetCaller(); stackTraceParser = new StackTraceParser(); stackTraceParser.Parse(Approvals.CurrentCaller.StackTrace); Subdirectory = GetSubdirectoryFromAttribute(); }
public void TestApprovalNamerFailureMessage() { var parser = new StackTraceParser(); var exception = ExceptionUtilities.GetException(() => parser.Parse(new StackTrace(6))); Approvals.Verify(exception.Message); }
public IconTestsNamer(string resourceName) { this.resourceName = resourceName; Approvals.SetCaller(); stackTraceParser = new StackTraceParser(); stackTraceParser.Parse(Approvals.CurrentCaller.StackTrace); System.IO.Directory.CreateDirectory(SourcePath); }
public void WriteMessage(string message) { if (_helper.ShouldLog) { var stackTrace = new StackTrace(); var stackTraceInfo = StackTraceParser.Parse( stackTrace.ToString(), (f, t, m, pl, ps, fn, ln) => new { Frame = f, Type = t, Method = m, ParameterList = pl, Parameters = ps, File = fn, Line = ln, }); string methodName = null; string frame = null; bool @break = false; foreach (var stackTraceEntry in stackTraceInfo) { if (@break) { methodName = stackTraceEntry.Method; frame = stackTraceEntry.Frame; break; } var type = stackTraceEntry.Type; if (string.IsNullOrEmpty(type)) { continue; } var @typeof = typeof(TraceStepper).Name; if (type.EndsWith(@typeof)) { @break = true; } } _tracer.WriteMessage(methodName, frame, message); } }
public void WriteException(Exception exception, string description) { if (_helper.ShouldLog) { var stackTrace = new StackTrace(); var stackTraceInfo = StackTraceParser.Parse( stackTrace.ToString(), (f, t, m, pl, ps, fn, ln) => new { Frame = f, Type = t, Method = m, ParameterList = pl, Parameters = ps, File = fn, Line = ln, }); string methodName = null; string frame = null; bool @break = false; foreach (var stackTraceEntry in stackTraceInfo) { if (@break) { methodName = stackTraceEntry.Method; frame = stackTraceEntry.Frame; break; } var type = stackTraceEntry.Type; if (string.IsNullOrEmpty(type)) { continue; } var @typeof = typeof(TraceStepper).Name; if (type.EndsWith(@typeof)) { @break = true; } } var exceptionName = exception.GetType().Name; var exceptionTrace = ExceptionReporting.GetExceptionReport(exception); _tracer.WriteException(methodName, frame, exceptionTrace, description, exceptionName); } }
private static RaygunErrorStackTraceLineMessage[] CreateStackTrace(string stacktrace) { try { return(StackTraceParser.Parse( stacktrace, (idx, len, txt) => new { Index = idx, Length = len, Text = txt }, (type, method) => new { Type = type, Method = method }, (type, name) => new { Type = type, Name = name }, (pl, ps) => new { List = pl, Parameters = ps }, (file, line) => new { File = file, Line = line }, (f, tm, p, fl) => new RaygunErrorStackTraceLineMessage { FileName = fl.File.Text, ClassName = tm.Type.Text, MethodName = tm.Method.Text, LineNumber = int.TryParse(fl.Line.Text, out var lineNo) ? lineNo : 0 }) .ToArray()); }
public void Parse_UsingStaticInitialize_DontThrowInvalidOperationException() { var parser = new StackTraceParser(); try { Parallel.ForEach(Enumerable.Range(1, 20), (_) => { try { var stackTrace = new StackTrace(); parser.Parse(stackTrace); } catch (InvalidOperationException e) { Assert.Fail( "InvalidOperationException when trying to parse stacktrace. " + "This is caused by the parser collection not being thread-safe. " + "Original exception message : {0} and stacktrace : {1}", e.Message, e.StackTrace ); } // Because the current stacktrace passed to the parse method doesn't contains any trace of a compliant stacktrace parser // it's normal that we receive an exception here so let's ignore it. catch (Exception e) { if ( !e.Message.Contains("Approvals is not set up to use your test framework")) { throw; } } }); } catch (AggregateException e) { // Throw the first inner exception of the AggretateException, this way NUnit shows a much clearer result. throw e.InnerException; } }
public void Test_Parse() { _parser.Parse("à NUnit.UiException.TraceItem.get_Text() dans C:\\TraceItem.cs:ligne 43"); Assert.That(_parser.Items.Count, Is.EqualTo(1)); Assert.That(_parser.Items[0], Is.EqualTo(new ErrorItem("C:\\TraceItem.cs", "NUnit.UiException.TraceItem.get_Text()", 43))); // TryParse should clear previous textFormatter _parser.Parse(""); Assert.That(_parser.Items.Count, Is.EqualTo(0)); return; }
static HelperResult MarkupStackTrace(string text) { Debug.Assert(text != null); return(new HelperResult(writer => { if (writer == null) { throw new ArgumentNullException("writer"); } var frames = StackTraceParser.Parse ( text, (idx, len, txt) => new { Index = idx, End = idx + len, Html = txt.Length > 0 ? Mvc.Html.Encode(txt).ToHtmlString() : string.Empty, }, (t, m) => new { Type = new { t.Index, t.End, Html = "<span class='st-type'>" + t.Html + "</span>" }, Method = new { m.Index, m.End, Html = "<span class='st-method'>" + m.Html + "</span>" } }, (t, n) => new { Type = new { t.Index, t.End, Html = "<span class='st-param-type'>" + t.Html + "</span>" }, Name = new { n.Index, n.End, Html = "<span class='st-param-name'>" + n.Html + "</span>" } }, (p, ps) => new { List = p, Parameters = ps.ToArray() }, (f, l) => new { File = f.Html.Length > 0 ? new { f.Index, f.End, Html = "<span class='st-file'>" + f.Html + "</span>" } : null, Line = l.Html.Length > 0 ? new { l.Index, l.End, Html = "<span class='st-line'>" + l.Html + "</span>" } : null, }, (f, tm, p, fl) => from tokens in new[] { new[] { new { f.Index, End = f.Index, Html = "<span class='st-frame'>" }, tm.Type, tm.Method, new { p.List.Index, End = p.List.Index, Html = "<span class='params'>" }, }, from pe in p.Parameters from e in new[] { pe.Type, pe.Name } select e, new[] { new { Index = p.List.End, p.List.End, Html = "</span>" }, fl.File, fl.Line, new { Index = f.End, f.End, Html = "</span>" }, }, } from token in tokens where token != null select token ); var markups = from token in Enumerable.Repeat(new { Index = 0, End = 0, Html = string.Empty }, 1) .Concat(from tokens in frames from token in tokens select token) .Pairwise((prev, curr) => new { Previous = prev, Current = curr }) from m in new object[] { text.Substring(token.Previous.End, token.Current.Index - token.Previous.End), Mvc.Html.Raw(token.Current.Html) } select Mvc.Html.Encode(m).ToHtmlString() into m where m.Length > 0 select m; writer.Write(markups.ToDelimitedString(string.Empty)); })); }
private ErrorItem PopulateList(string stackTrace) { StackTraceParser parser = new StackTraceParser(); ErrorItem candidate; _stackTrace = stackTrace; parser.Parse(stackTrace); if (_listOrder == ErrorListOrderPolicy.ReverseOrder) parser.Items.Reverse(); candidate = null; _items.Clear(); foreach (ErrorItem item in parser.Items) { if (candidate == null && item.HasSourceAttachment) candidate = item; _items.Add(item); } return (candidate); }
public UnitTestFrameworkNamer() { stackTraceParser = new StackTraceParser(); stackTraceParser.Parse(new StackTrace(true)); }
public void ParseDotNetStackTrace() { var actuals = StackTraceParser.Parse(@" Elmah.TestException: This is a test exception that can be safely ignored. at Elmah.ErrorLogPageFactory.FindHandler(String name) in C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs:line 126 at Elmah.ErrorLogPageFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) in C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs:line 66 at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)", (idx, len, txt) => new { Index = idx, Length = len, Text = txt, }, (type, method) => new { Type = type, Method = method, }, (type, name) => new { Type = type, Name = name, }, (pl, ps) => new { List = pl, Parameters = ps, }, (file, line) => new { File = file, Line = line, }, (f, tm, p, fl) => new { Frame = f.Text, Type = tm.Type.Text, Method = tm.Method.Text, ParameterList = p.List.Text, Parameters = string.Join(", ", p.Parameters.Select(e => e.Type.Text + " " + e.Name.Text).ToArray()), File = fl.File.Text, Line = fl.Line.Text, }); var expectations = new[] { new { Frame = @"Elmah.ErrorLogPageFactory.FindHandler(String name) in C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs:line 126", Type = @"Elmah.ErrorLogPageFactory", Method = @"FindHandler", ParameterList = @"(String name)", Parameters = @"String name", File = @"C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs", Line = @"126", }, new { Frame = @"Elmah.ErrorLogPageFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) in C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs:line 66", Type = @"Elmah.ErrorLogPageFactory", Method = @"GetHandler", ParameterList = @"(HttpContext context, String requestType, String url, String pathTranslated)", Parameters = @"HttpContext context, String requestType, String url, String pathTranslated", File = @"C:\ELMAH\src\Elmah\ErrorLogPageFactory.cs", Line = @"66", }, new { Frame = @"System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)", Type = @"System.Web.HttpApplication", Method = @"MapHttpHandler", ParameterList = @"(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)", Parameters = @"HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig", File = string.Empty, Line = string.Empty, }, new { Frame = @"System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()", Type = @"System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep", Method = @"Execute", ParameterList = @"()", Parameters = string.Empty, File = string.Empty, Line = string.Empty, }, new { Frame = @"System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)", Type = @"System.Web.HttpApplication", Method = @"ExecuteStep", ParameterList = @"(IExecutionStep step, Boolean& completedSynchronously)", Parameters = @"IExecutionStep step, Boolean& completedSynchronously", File = string.Empty, Line = string.Empty, }, }; Assert.Equal(expectations, actuals); }
[Fact] // See https://code.google.com/p/elmah/issues/detail?id=320 public void ParseMonoStackTrace() { var actuals = StackTraceParser.Parse(@" System.Web.HttpException: The controller for path '/helloworld' was not found or does not implement IController. at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (System.Web.Routing.RequestContext requestContext, System.Type controllerType) [0x00000] in <filename unknown>:0 at System.Web.Mvc.DefaultControllerFactory.CreateController (System.Web.Routing.RequestContext requestContext, System.String controllerName) [0x00000] in <filename unknown>:0 at System.Web.Mvc.MvcHandler.ProcessRequestInit (System.Web.HttpContextBase httpContext, IController& controller, IControllerFactory& factory) [0x00000] in <filename unknown>:0 at System.Web.Mvc.MvcHandler.BeginProcessRequest (System.Web.HttpContextBase httpContext, System.AsyncCallback callback, System.Object state) [0x00000] in <filename unknown>:0 at System.Web.Mvc.MvcHandler.BeginProcessRequest (System.Web.HttpContext httpContext, System.AsyncCallback callback, System.Object state) [0x00000] in <filename unknown>:0 at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (System.Web.HttpContext context, System.AsyncCallback cb, System.Object extraData) [0x00000] in <filename unknown>:0 at System.Web.HttpApplication+<Pipeline>c__Iterator3.MoveNext () [0x00000] in <filename unknown>:0", (idx, len, txt) => new { Index = idx, Length = len, Text = txt, }, (type, method) => new { Type = type, Method = method, }, (type, name) => new { Type = type, Name = name, }, (pl, ps) => new { List = pl, Parameters = ps, }, (file, line) => new { File = file, Line = line, }, (f, tm, p, fl) => new { Type = tm.Type.Text, Method = tm.Method.Text, ParameterList = p.List.Text, Parameters = string.Join(", ", p.Parameters.Select(e => e.Type.Text + " " + e.Name.Text).ToArray()), File = fl.File.Text, Line = fl.Line.Text, }); var expectations = from e in new[] { new { Frame = "System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (System.Web.Routing.RequestContext requestContext, System.Type controllerType) [0x00000] in <filename unknown>:0 ", Type = "System.Web.Mvc.DefaultControllerFactory", Method = "GetControllerInstance", ParameterList = "(System.Web.Routing.RequestContext requestContext, System.Type controllerType)", Parameters = "System.Web.Routing.RequestContext requestContext, System.Type controllerType", }, new { Frame = "System.Web.Mvc.DefaultControllerFactory.CreateController (System.Web.Routing.RequestContext requestContext, System.String controllerName) [0x00000] in <filename unknown>:0", Type = "System.Web.Mvc.DefaultControllerFactory", Method = "CreateController", ParameterList = "(System.Web.Routing.RequestContext requestContext, System.String controllerName)", Parameters = "System.Web.Routing.RequestContext requestContext, System.String controllerName", }, new { Frame = "System.Web.Mvc.MvcHandler.ProcessRequestInit (System.Web.HttpContextBase httpContext, IController& controller, IControllerFactory& factory) [0x00000] in <filename unknown>:0", Type = "System.Web.Mvc.MvcHandler", Method = "ProcessRequestInit", ParameterList = "(System.Web.HttpContextBase httpContext, IController& controller, IControllerFactory& factory)", Parameters = "System.Web.HttpContextBase httpContext, IController& controller, IControllerFactory& factory", }, new { Frame = "System.Web.Mvc.MvcHandler.BeginProcessRequest (System.Web.HttpContextBase httpContext, System.AsyncCallback callback, System.Object state) [0x00000] in <filename unknown>:0", Type = "System.Web.Mvc.MvcHandler", Method = "BeginProcessRequest", ParameterList = "(System.Web.HttpContextBase httpContext, System.AsyncCallback callback, System.Object state)", Parameters = "System.Web.HttpContextBase httpContext, System.AsyncCallback callback, System.Object state", }, new { Frame = "System.Web.Mvc.MvcHandler.BeginProcessRequest (System.Web.HttpContext httpContext, System.AsyncCallback callback, System.Object state) [0x00000] in <filename unknown>:0", Type = "System.Web.Mvc.MvcHandler", Method = "BeginProcessRequest", ParameterList = "(System.Web.HttpContext httpContext, System.AsyncCallback callback, System.Object state)", Parameters = "System.Web.HttpContext httpContext, System.AsyncCallback callback, System.Object state", }, new { Frame = "System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (System.Web.HttpContext context, System.AsyncCallback cb, System.Object extraData) [0x00000] in <filename unknown>:0", Type = "System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler", Method = "BeginProcessRequest", ParameterList = "(System.Web.HttpContext context, System.AsyncCallback cb, System.Object extraData)", Parameters = "System.Web.HttpContext context, System.AsyncCallback cb, System.Object extraData", }, new { Frame = "System.Web.HttpApplication+<Pipeline>c__Iterator3.MoveNext () [0x00000] in <filename unknown>:0", Type = "System.Web.HttpApplication+<Pipeline>c__Iterator3", Method = "MoveNext", ParameterList = "()", Parameters = string.Empty, }, } select new { e.Type, e.Method, e.ParameterList, e.Parameters, File = "filename unknown", Line = "0", }; Assert.Equal(expectations, actuals); }