Exemple #1
0
 public UnitTestFrameworkNamer()
 {
     Approvals.SetCaller();
     stackTraceParser = new StackTraceParser();
     stackTraceParser.Parse(Approvals.CurrentCaller.StackTrace);
     HandleSubdirectory();
 }
Exemple #2
0
        public void TestApprovalNamerFailureMessage()
        {
            var parser    = new StackTraceParser();
            var exception = Assert.Throws <Exception>(() => parser.Parse(new StackTrace(6)));

            Approvals.Verify(exception.Message);
        }
Exemple #3
0
        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);
        }
Exemple #6
0
 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());
     }
Exemple #10
0
        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));
            }));
        }
Exemple #13
0
        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);
        }
Exemple #14
0
 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);
        }