public static Data.TestResult ToTestResult(this Common.Models.TestResult testResult, TestMethod testMethod, int sessionId) { return(new Data.TestResult() { Method = testMethod, Duration = testResult.Duration, Outcome = testResult.Outcome.ToTestState(), ErrorMessage = GetShortErrorMessage(testResult.ErrorMessage), StackTrace = StackItem.FromStackTrace(testResult.ErrorStackTrace), Output = testResult.Messages?.Length > 0 ? string.Join(Environment.NewLine, testResult.Messages.Select(p => p.Text)).Trim() : null, SessionId = sessionId }); }
protected override async Task <bool> UploadExceptionAsync(SerializableException exception) { using (new InvariantCulture()) { try { using (var writer = new StringWriter()) { writer.WriteLine("Package: " + PackageName); writer.WriteLine("Version: " + Version); writer.WriteLine("OS: Windows"); writer.WriteLine("Windows: " + Environment.OSVersion.Version.ToString()); if (!string.IsNullOrEmpty(Manufacturer)) { writer.WriteLine("Manufacturer: " + Manufacturer); } if (!string.IsNullOrEmpty(Model)) { writer.WriteLine("Model: " + Model); } writer.WriteLine("Date: " + DateTime.Now.ToUniversalTime().ToString("O")); writer.WriteLine("CrashReporter Key: " + InstallationId); var exceptionItem = exception; while (exceptionItem != null) { writer.WriteLine(); writer.WriteLine(exception.GetType().FullName + ": " + exception.Message); var stackTrace = exception.StackTrace ?? new StackTrace().ToString(); var stackFrames = StackItem.FromStackTrace(stackTrace); if (stackFrames.Length > 0) { foreach (var stackItem in stackFrames) { writer.Write($" at {stackItem.MethodName}"); if (stackItem.SourceFile != null) { writer.WriteLine($"({Path.GetFileName(stackItem.SourceFile)}:{stackItem.Line})"); } else { writer.WriteLine(); } } } else { //In case the regex fails somehow writer.WriteLine(stackTrace); writer.WriteLine("(could not parse stacktrace)"); } exceptionItem = exceptionItem.InnerException; } writer.Flush(); var text = $"raw={HttpUtility.UrlEncode(writer.ToString()).Replace("+", "%20")}" + "&sdk=HockeySDKWinWPF" + "&sdk_version=hockeysdk.wpf:4.1.6.1005" + "&userID=" + InstallationId; var form = new StringContent(text); form.Headers.ContentType.MediaType = "application/x-www-form-urlencoded"; form.Headers.ContentType.CharSet = null; var response = await _httpClient.PostAsync("crashes", form); return(response.StatusCode == HttpStatusCode.Created); } } catch { return(false); } } }