public void Create() { var name = "someName"; var start = DateTimeOffset.Now; var end = start.AddSeconds(10); bool success = false; var info = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(1), "info") }; var warning = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(2), "warning") }; var error = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(3), "error") }; var section = new TestSection(name, start, end, success, info, warning, error); Assert.AreEqual(name, section.Name); Assert.AreEqual(start, section.StartTime); Assert.AreEqual(end, section.EndTime); Assert.AreEqual(success, section.WasSuccessful); Assert.That( section.InfoMessages(), Is.EquivalentTo(info)); Assert.That( section.WarningMessages(), Is.EquivalentTo(warning)); Assert.That( section.ErrorMessages(), Is.EquivalentTo(error)); }
public void RoundTripSerialise() { var name = "someName"; var start = DateTimeOffset.Now; var end = start.AddSeconds(10); bool success = false; var info = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(1), "info") }; var warning = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(2), "warning") }; var error = new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(3), "error") }; var section = new TestSection(name, start, end, success, info, warning, error); var otherSection = AssertExtensions.RoundTripSerialize(section); Assert.AreEqual(section.Name, otherSection.Name); Assert.AreEqual(section.StartTime, otherSection.StartTime); Assert.AreEqual(section.EndTime, otherSection.EndTime); Assert.AreEqual(section.WasSuccessful, otherSection.WasSuccessful); Assert.That( otherSection.InfoMessages(), Is.EquivalentTo(section.InfoMessages())); Assert.That( otherSection.WarningMessages(), Is.EquivalentTo(section.WarningMessages())); Assert.That( otherSection.ErrorMessages(), Is.EquivalentTo(section.ErrorMessages())); }
public void RaiseOnExecutionProgress(string sectionName, TestSection sectionReport) { var local = OnExecutionProgress; if (local != null) { local(this, new TestExecutionProgressEventArgs(-1, sectionName, sectionReport)); } }
/// <summary> /// Initializes a new instance of the <see cref="ReportTestSectionEventArgs"/> class. /// </summary> /// <param name="section">The section.</param> /// <exception cref="ArgumentNullException"> /// Thrown when <paramref name="section"/> is <see langword="null" />. /// </exception> public ReportTestSectionEventArgs(TestSection section) { { Lokad.Enforce.Argument(() => section); } Section = section; }
/// <summary> /// Initializes a new instance of the <see cref="TestExecutionProgressEventArgs"/> class. /// </summary> /// <param name="id">The ID of the test. Is allowed to be <see langword="null" />.</param> /// <param name="sectionName">The name of the report section under which the current section should be stored.</param> /// <param name="section">The report test section.</param> /// <exception cref="ArgumentNullException"> /// Thrown if <paramref name="sectionName"/> is <see langword="null" />. /// </exception> /// <exception cref="ArgumentNullException"> /// Thrown if <paramref name="sectionName"/> is an empty string. /// </exception> /// <exception cref="ArgumentNullException"> /// Thrown if <paramref name="section"/> is <see langword="null" />. /// </exception> public TestExecutionProgressEventArgs(int id, string sectionName, TestSection section) { { Lokad.Enforce.Argument(() => sectionName); Lokad.Enforce.Argument(() => sectionName, Lokad.Rules.StringIs.NotEmpty); Lokad.Enforce.Argument(() => section); } m_Id = id; m_SectionName = sectionName; m_Section = section; }
public void Create() { var section = new TestSection( "SomeName", DateTimeOffset.Now, DateTimeOffset.Now.AddSeconds(10), true, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>()); var args = new ReportTestSectionEventArgs(section); Assert.AreSame(section, args.Section); }
public void Create() { var productName = "product"; var productVersion = "1.2.3.4"; var owner = "owner"; var description = "description"; var start = DateTimeOffset.Now; var end = start.AddSeconds(10); var header = new ReportHeader( start, end, productName, productVersion, owner, description); var name = "name"; var section = new TestSection( "someName", DateTimeOffset.Now, DateTimeOffset.Now, true, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>()); var testSections = new List<TestSection> { section }; var reportSection = new ReportSection(name, testSections); var sections = new List<ReportSection> { reportSection }; var report = new Report(header, sections); Assert.AreSame(header, report.Header); Assert.That( report.Sections(), Is.EquivalentTo(sections)); }
public void Create() { var name = "name"; var section = new TestSection( "someName", DateTimeOffset.Now, DateTimeOffset.Now, true, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>()); var sections = new List<TestSection> { section }; var reportSection = new ReportSection(name, sections); Assert.AreEqual(name, reportSection.Name); Assert.That( reportSection.Sections(), Is.EquivalentTo(sections)); }
public void RoundTripSerialise() { var name = "name"; var section = new TestSection( "someName", DateTimeOffset.Now, DateTimeOffset.Now, true, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>()); var sections = new List<TestSection> { section }; var reportSection = new ReportSection(name, sections); var otherReportSection = AssertExtensions.RoundTripSerialize(reportSection); Assert.AreEqual(reportSection.Name, otherReportSection.Name); // We'll assume that if one of the fields is correct then the other fields will be correct // too. This is (relatively) safe because there is a serialize / deserialize test for // the TestSection class. Assert.AreEqual(reportSection.Sections().Count(), otherReportSection.Sections().Count()); Assert.AreEqual(reportSection.Sections().First().Name, otherReportSection.Sections().First().Name); }
public void RoundTripSerialise() { var productName = "product"; var productVersion = "1.2.3.4"; var owner = "owner"; var description = "description"; var start = DateTimeOffset.Now; var end = start.AddSeconds(10); var header = new ReportHeader( start, end, productName, productVersion, owner, description); var name = "name"; var section = new TestSection( "someName", DateTimeOffset.Now, DateTimeOffset.Now, true, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>()); var testSections = new List<TestSection> { section }; var reportSection = new ReportSection(name, testSections); var sections = new List<ReportSection> { reportSection }; var report = new Report(header, sections); var otherReport = AssertExtensions.RoundTripSerialize(report); // We'll assume that if one of the fields is correct then the other fields will be correct // too. This is (relatively) safe because there is a serialize / deserialize test for // the ReportHeader class. Assert.AreEqual(report.Header.ProductName, otherReport.Header.ProductName); // We'll assume that if one of the fields is correct then the other fields will be correct // too. This is (relatively) safe because there is a serialize / deserialize test for // the TestSection class. Assert.AreEqual(report.Sections().Count(), otherReport.Sections().Count()); Assert.AreEqual(report.Sections().First().Name, otherReport.Sections().First().Name); }
public void Transform() { var productName = "product"; var productVersion = "1.2.3.4"; var owner = "owner"; var description = "description"; var start = new DateTimeOffset(2000, 1, 1, 1, 1, 1, new TimeSpan(0, 0, 0)); var end = start.AddSeconds(10); var name = "name"; var section = new TestSection( "someName", start.AddSeconds(1), end.AddSeconds(-1), true, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(2), "info") }, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(3), "warning") }, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(4), "error") }); var report = BuildReport(productName, productVersion, owner, description, start, end, name, section); Stream output = null; Action<string, Stream> writer = (fileName, input) => { output = input; }; var transformer = new XmlReportTransformer(); transformer.Transform(report, writer); var result = string.Empty; using (var reader = new StreamReader(output, Encoding.UTF8)) { result = reader.ReadToEnd(); } var expected = EmbeddedResourceExtracter.LoadEmbeddedTextFile( Assembly.GetExecutingAssembly(), @"Sherlock.Shared.Core.Reporting.TestXmlReport.xml"); var builder = new StringBuilder(expected); { builder.Replace("${REPORT_VERSION}$", "1.0"); builder.Replace("${HOST_NAME}$", Environment.MachineName); builder.Replace("${USER_NAME}$", owner); builder.Replace("${DESCRIPTION}$", description); builder.Replace("${SHERLOCK_VERSION}$", typeof(XmlReportTransformer).Assembly.GetName().Version.ToString()); builder.Replace("${TEST_START_TIME}$", start.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${TEST_END_TIME}$", end.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${PRODUCT_NAME}$", productName); builder.Replace("${PRODUCT_VERSION}$", productVersion); builder.Replace("${TEST_RESULT}$", "Passed"); builder.Replace("${REPORT_SECTION_NAME}$", name); builder.Replace("${TEST_SECTION_NAME}$", section.Name); builder.Replace("${TEST_SECTION_START_TIME}$", section.StartTime.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${TEST_SECTION_END_TIME}$", section.EndTime.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${TEST_SECTION_WAS_SUCCESSFUL}$", section.WasSuccessful.ToString()); builder.Replace("${INFO_TIME}$", section.InfoMessages().First().Time.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${INFO_TEXT}$", section.InfoMessages().First().Information); builder.Replace("${WARNING_TIME}$", section.WarningMessages().First().Time.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${WARNING_TEXT}$", section.WarningMessages().First().Information); builder.Replace("${ERROR_TIME}$", section.ErrorMessages().First().Time.ToString("o", CultureInfo.CurrentCulture)); builder.Replace("${ERROR_TEXT}$", section.ErrorMessages().First().Information); } Assert.AreEqual( builder.ToString().Replace("\r\n", string.Empty).Replace(" ", string.Empty), result.Replace("\r\n", string.Empty).Replace(" ", string.Empty)); }
private static TestSection EnvironmentFailedSection(string environmentName) { var section = new TestSection( Resources.ReportSection_Name_Environments, DateTimeOffset.Now, DateTimeOffset.Now, false, new List<DateBasedTestInformation>(), new List<DateBasedTestInformation>(), new List<DateBasedTestInformation> { new DateBasedTestInformation( DateTimeOffset.Now, string.Format( CultureInfo.InvariantCulture, Resources.ReportSection_Error_LostContactWithEnvironment_WithEnvironment, environmentName)) }); return section; }
public void Transform() { var productName = "product"; var productVersion = "1.2.3.4"; var owner = "owner"; var description = "description"; var start = new DateTimeOffset(2000, 1, 1, 1, 1, 1, new TimeSpan(0, 0, 0)); var end = start.AddSeconds(10); var name = "name"; var section = new TestSection( "someName", start.AddSeconds(1), end.AddSeconds(-1), true, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(2), "info") }, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(3), "warning") }, new List<DateBasedTestInformation> { new DateBasedTestInformation(start.AddSeconds(4), "error") }); var report = BuildReport(productName, productVersion, owner, description, start, end, name, section); var outputNames = new List<string>(); var outputs = new List<Stream>(); Action<string, Stream> writer = (fileName, input) => { outputNames.Add(fileName); outputs.Add(input); }; var transformer = new HtmlReportTransformer(); transformer.Transform(report, writer); var result = string.Empty; using (var reader = new StreamReader(outputs[0])) { result = reader.ReadToEnd().Replace("\r\n", string.Empty).Replace(" ", string.Empty); } var expected = EmbeddedResourceExtracter.LoadEmbeddedTextFile( Assembly.GetExecutingAssembly(), @"Sherlock.Shared.Core.Reporting.TestHtmlReport.html"); var builder = new StringBuilder(expected); { builder.Replace("${DESCRIPTION}$", description); builder.Replace("${PRODUCT_NAME}$", productName); builder.Replace("${PRODUCT_VERSION}$", productVersion.ToString(CultureInfo.CurrentCulture)); builder.Replace("${USER_NAME}$", owner); builder.Replace("${TEST_DESCRIPTION}$", description); builder.Replace("${TEST_START_DATE}$", start.ToString("d", CultureInfo.CurrentCulture)); builder.Replace("${TEST_START_TIME}$", start.ToString("T", CultureInfo.CurrentCulture)); builder.Replace("${TEST_END_DATE}$", end.ToString("d", CultureInfo.CurrentCulture)); builder.Replace("${TEST_END_TIME}$", end.ToString("T", CultureInfo.CurrentCulture)); builder.Replace("${TEST_TOTAL_TIME}$", (end - start).ToString("g", CultureInfo.CurrentCulture)); builder.Replace("${SECTION_ICON}$", outputNames[3]); builder.Replace("${SECTION_CATEGORY}$", name); builder.Replace("${SECTION_DESCRIPTION}$", section.Name); builder.Replace("${INFO_ICON}$", outputNames[5]); builder.Replace("${INFO_TIME}$", section.InfoMessages().First().Time.ToString("G", CultureInfo.CurrentCulture)); builder.Replace("${INFO_TEXT}$", section.InfoMessages().First().Information); builder.Replace("${WARNING_ICON}$", outputNames[6]); builder.Replace("${WARNING_TIME}$", section.WarningMessages().First().Time.ToString("G", CultureInfo.CurrentCulture)); builder.Replace("${WARNING_TEXT}$", section.WarningMessages().First().Information); builder.Replace("${ERROR_ICON}$", outputNames[7]); builder.Replace("${ERROR_TIME}$", section.ErrorMessages().First().Time.ToString("G", CultureInfo.CurrentCulture)); builder.Replace("${ERROR_TEXT}$", section.ErrorMessages().First().Information); builder.Replace("${HOST}$", Environment.MachineName); builder.Replace( "${USERNAME}$", string.Format( CultureInfo.InvariantCulture, @"{0}\{1}", Environment.UserDomainName, Environment.UserName)); builder.Replace( "${SHERLOCK_VERSION}$", typeof(HtmlReportTransformer).Assembly.GetName().Version.ToString()); } Assert.AreEqual(builder.ToString().Replace("\r\n", string.Empty).Replace(" ", string.Empty), result); }
private static IReport BuildReport( string productName, string productVersion, string owner, string description, DateTimeOffset start, DateTimeOffset end, string sectionName, TestSection section) { var header = new ReportHeader( start, end, productName, productVersion, owner, description); var testSections = new List<TestSection> { section }; var reportSection = new ReportSection(sectionName, testSections); var sections = new List<ReportSection> { reportSection }; return new Report(header, sections); }
/// <summary> /// Finalizes the test section data and passes it on to a storage object. /// </summary> /// <param name="wasSuccessful">Set to <see langword="true"/> if all tests in the section were successful.</param> /// <param name="endTime">The end time.</param> /// <exception cref="CannotFinalizeAnUninitializedTestSectionException"> /// Thrown when the <c>Initialize</c> method was not called prior to /// calling <see cref="FinalizeAndStore(bool, DateTimeOffset)"/>. /// </exception> public void FinalizeAndStore(bool wasSuccessful, DateTimeOffset endTime) { if (!WasInitialized) { throw new CannotFinalizeAnUninitializedTestSectionException(); } var section = new TestSection( m_Name, m_StartTime, endTime, wasSuccessful, m_InformationMessages, m_WarningMessages, m_ErrorMessages); m_OnStore(m_ReportSectionName, section); // Clear the data. There's no way to finalize twice! Clear(); }
private static string CreateTestSectionMessagesHtml(TestSection testSection) { var messages = new SortedList<DateTimeOffset, string>(); AddTestSectionInfoMessages(messages, testSection); AddTestSectionWarningMessages(messages, testSection); AddTestSectionErrorMessages(messages, testSection); var builder = new StringBuilder(); foreach (var msg in messages) { builder.AppendLine(msg.Value); } return builder.ToString(); }
/// <summary> /// Creates the HTML that describes a test section. /// </summary> /// <param name="category">The category of the section.</param> /// <param name="section">The report section that holds the test section information.</param> /// <param name="hasHighlight">A flag that indicates if this section should be highlighted.</param> /// <returns>A string containing the desired HTML.</returns> private static string CreateTestSectionHtml(string category, TestSection section, bool hasHighlight) { var testSectionTemplate = EmbeddedResourceExtracter.LoadEmbeddedTextFile( Assembly.GetExecutingAssembly(), @"Sherlock.Shared.Core.Reporting.Templates.TestSectionTemplate.html"); var messages = CreateTestSectionMessagesHtml(section); var builder = new StringBuilder(testSectionTemplate); { var highlightText = hasHighlight ? "class=\"row-light\"" : string.Empty; builder.Replace(@"${ROW_HIGHLIGHT}$", highlightText); builder.Replace(@"${SECTION_ICON}$", section.WasSuccessful ? TestPassedIconName : TestFailedIconName); builder.Replace(@"${SECTION_CATEGORY}$", category); builder.Replace( @"${SECTION_DESCRIPTION}$", HttpUtility.HtmlEncode(section.Name) .ReplaceSpaceByHtmlNonBreakingSpaces() .ReplaceTabsByHtmlNonBreakingSpaces() .ReplaceNewLinesByHtmlLineBreaks()); builder.Replace(@"${SECTION_MESSAGES}$", messages); } return builder.ToString(); }
private static void AddTestSectionWarningMessages( SortedList<DateTimeOffset, string> collectionToAddTo, TestSection testSection) { var warningMessageTemplate = EmbeddedResourceExtracter.LoadEmbeddedTextFile( Assembly.GetExecutingAssembly(), @"Sherlock.Shared.Core.Reporting.Templates.TestSectionWarningTemplate.html"); foreach (var warning in testSection.WarningMessages()) { var builder = new StringBuilder(warningMessageTemplate); { builder.Replace(@"${WARNING_ICON}$", WarningMessageIconName); builder.Replace(@"${WARNING_TIME}$", warning.Time.ToString("G", CultureInfo.CurrentCulture)); builder.Replace( @"${WARNING_TEXT}$", HttpUtility.HtmlEncode(warning.Information) .ReplaceNewLinesByHtmlLineBreaks() .ReplaceTabsByHtmlNonBreakingSpaces()); } AddMessageToTimeSortedCollection(collectionToAddTo, warning.Time, builder.ToString()); } }
private static void AddTestSectionWarningMessages( SortedList<DateTimeOffset, string> collectionToAddTo, TestSection testSection) { var warningMessageTemplate = EmbeddedResourceExtracter.LoadEmbeddedTextFile( Assembly.GetExecutingAssembly(), @"Sherlock.Shared.Core.Reporting.Templates.TestSectionWarningTemplate.xml"); foreach (var info in testSection.WarningMessages()) { var builder = new StringBuilder(warningMessageTemplate); { builder.Replace( @"${WARNING_TIME}$", EscapeTextForUseInXml(info.Time.ToString("o", CultureInfo.CurrentCulture))); builder.Replace(@"${WARNING_TEXT}$", EscapeTextForUseInXml(info.Information)); } AddMessageToTimeSortedCollection(collectionToAddTo, info.Time, builder.ToString()); } }