From 1b99d61cf3a65aa5c9bc6cdaf2c91988e23ff6dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20St=C3=BChmer?= <3283596+samtrion@users.noreply.github.com> Date: Tue, 3 Dec 2019 15:37:37 +0100 Subject: [PATCH] Added Prefix `params` Support + Test (#94) Thank you! --- .../EnhancedStackTrace.Frames.cs | 13 ++++-- .../ParameterParamTests.cs | 40 +++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 test/Ben.Demystifier.Test/ParameterParamTests.cs diff --git a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs index a4b4a71..ababbcf 100644 --- a/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs +++ b/src/Ben.Demystifier/EnhancedStackTrace.Frames.cs @@ -51,7 +51,7 @@ namespace System.Diagnostics { var frame = stackFrames[i]; var method = frame.GetMethod(); - + // Always show last stackFrame if (!ShowInStackTrace(method) && i < stackFrames.Length - 1) { @@ -511,6 +511,11 @@ namespace System.Diagnostics private static string GetPrefix(ParameterInfo parameter) { + if (Attribute.IsDefined(parameter, typeof(ParamArrayAttribute), false)) + { + return "params"; + } + if (parameter.IsOut) { return "out"; @@ -618,14 +623,14 @@ namespace System.Diagnostics return false; } } - + var type = method.DeclaringType; - + if (type == null) { return true; } - + if (type == typeof(Task<>) && method.Name == "InnerInvoke") { return false; diff --git a/test/Ben.Demystifier.Test/ParameterParamTests.cs b/test/Ben.Demystifier.Test/ParameterParamTests.cs new file mode 100644 index 0000000..3ce908b --- /dev/null +++ b/test/Ben.Demystifier.Test/ParameterParamTests.cs @@ -0,0 +1,40 @@ +namespace Ben.Demystifier.Test +{ + using System; + using System.Diagnostics; + using Xunit; + + public class ParameterParamTests + { + [Fact] + public void DemistifiesMethodWithParams() + { + Exception dex = null; + try + { + MethodWithParams(1, 2, 3); + } + catch (Exception e) + { + dex = e.Demystify(); + } + + // Assert + var stackTrace = dex.ToString(); + stackTrace = LineEndingsHelper.RemoveLineEndings(stackTrace); + var trace = string.Join(string.Empty, stackTrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); + + var expected = string.Join(string.Empty, new[] { + "System.ArgumentException: Value does not fall within the expected range.", + " at bool Ben.Demystifier.Test.ParameterParamTests.MethodWithParams(params int[] numbers)", + " at void Ben.Demystifier.Test.ParameterParamTests.DemistifiesMethodWithParams()"}); + + Assert.Equal(expected, trace); + } + + private bool MethodWithParams(params int[] numbers) + { + throw new ArgumentException(); + } + } +}