From 9d77d9b8951fd848bee3cbe78a4fe8da1651652e Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Sun, 2 May 2010 16:02:40 +0100 Subject: [PATCH 01/13] spike to see if we can use gallio report, transform to nunit style, then output html --- Tools/Gallio2NUnit.xslt | 89 ++++++++++++++++++++++++++++ Tools/Program.cs | 25 ++++++++ Tools/TechTalk.SpecFlow.Tools.csproj | 1 + 3 files changed, 115 insertions(+) create mode 100644 Tools/Gallio2NUnit.xslt diff --git a/Tools/Gallio2NUnit.xslt b/Tools/Gallio2NUnit.xslt new file mode 100644 index 000000000..08d86776f --- /dev/null +++ b/Tools/Gallio2NUnit.xslt @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + FalseTrue + FalseTrue + + + + + + + + + + + + + + + + + + + + + + + + FalseTrue + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/Program.cs b/Tools/Program.cs index eab82b21b..003b73a57 100644 --- a/Tools/Program.cs +++ b/Tools/Program.cs @@ -1,5 +1,8 @@ using System; using System.IO; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Xsl; using NConsoler; using TechTalk.SpecFlow.Generator; using TechTalk.SpecFlow.Generator.Configuration; @@ -53,6 +56,28 @@ public static void NUnitExecutionReport([Required(Description = "Visual Studio P generator.TransformReport(Path.GetFullPath(outputFile)); } + [Action("Formats an Test Execution report to SpecFlow style")] + public static void TestExecutionReport([Required(Description = "Visual Studio Project File containing specs")] string projectFile, + [Optional("TestResult.xml", Description = "Xml Test Result file generated by Gallio. Defaults to TestResult.xml")] string xmlTestResult, + [Optional("TestResult.txt", "testOutput")] string labeledTestOutput, + [Optional("TestResult.html", "out", Description = "Generated Output File. Defaults to TestResult.html")] string outputFile) + { + XDocument doc = XDocument.Load(xmlTestResult); + var tranny = new XslCompiledTransform(); + tranny.Load("Gallio2NUnit.xslt"); + XmlReader reader = doc.CreateReader(); + const string outputFileName = "TestResult.xml"; + XmlWriter writer = XmlWriter.Create(outputFileName); + tranny.Transform(reader, writer); + writer.Close(); + + var generator = new NUnitExecutionReportGenerator(projectFile, Path.GetFullPath(outputFileName), + Path.GetFullPath(labeledTestOutput)); + + generator.GenerateReport(); + generator.TransformReport(Path.GetFullPath(outputFile)); + } + #endregion } } \ No newline at end of file diff --git a/Tools/TechTalk.SpecFlow.Tools.csproj b/Tools/TechTalk.SpecFlow.Tools.csproj index 7b015951e..427281f9a 100644 --- a/Tools/TechTalk.SpecFlow.Tools.csproj +++ b/Tools/TechTalk.SpecFlow.Tools.csproj @@ -75,6 +75,7 @@ + PreserveNewest From 69b87e98f95f2f19c9e258724100c657a2e22e92 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Sun, 2 May 2010 16:07:50 +0100 Subject: [PATCH 02/13] credits for the xslt --- Tools/Gallio2NUnit.xslt | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/Gallio2NUnit.xslt b/Tools/Gallio2NUnit.xslt index 08d86776f..7eff89e64 100644 --- a/Tools/Gallio2NUnit.xslt +++ b/Tools/Gallio2NUnit.xslt @@ -1,3 +1,4 @@ + Date: Mon, 3 May 2010 16:46:15 +0100 Subject: [PATCH 03/13] Move the test generation away from the console. --- Reporting/TechTalk.SpecFlow.Reporting.csproj | 4 + .../TestExecutionReport/Gallio2NUnit.xslt | 90 +++++++++++++++++++ .../TestExecutionReportGenerator.cs | 35 ++++++++ Tools/Program.cs | 15 ++-- Tools/TechTalk.SpecFlow.Tools.csproj | 1 - 5 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 Reporting/TestExecutionReport/Gallio2NUnit.xslt create mode 100644 Reporting/TestExecutionReport/TestExecutionReportGenerator.cs diff --git a/Reporting/TechTalk.SpecFlow.Reporting.csproj b/Reporting/TechTalk.SpecFlow.Reporting.csproj index 2ece5eeaa..d4699fab3 100644 --- a/Reporting/TechTalk.SpecFlow.Reporting.csproj +++ b/Reporting/TechTalk.SpecFlow.Reporting.csproj @@ -80,6 +80,7 @@ + @@ -104,6 +105,9 @@ Common\Languages.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + FalseTrue + FalseTrue + + + + + + + + + + + + + + + + + + + + + + + + FalseTrue + + + + + + + + + + + + + + + + + + + + + diff --git a/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs new file mode 100644 index 000000000..f18613a6a --- /dev/null +++ b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Xsl; + +namespace TechTalk.SpecFlow.Reporting.TestExecutionReport +{ + public class TestExecutionReportGenerator + { + public void GenerateNUnitXmlFromGallio(string xmlTestResult) + { + Assembly asm = Assembly.GetExecutingAssembly(); + Stream rsrc = asm.GetManifestResourceStream("TechTalk.SpecFlow.Reporting.TestExecutionReport.Gallio2NUnit.xslt"); + XmlTextReader xmlTextReader = new XmlTextReader(rsrc); + + XDocument doc = XDocument.Load(xmlTestResult); + var tranny = new XslCompiledTransform(); + tranny.Load(xmlTextReader); + XmlReader reader = doc.CreateReader(); + const string outputFileName = "TestResult.xml"; + XmlWriter writer = XmlWriter.Create(outputFileName); + + if (writer != null) + { + tranny.Transform(reader, writer); + writer.Close(); + } + } + } +} diff --git a/Tools/Program.cs b/Tools/Program.cs index 003b73a57..06c1f5885 100644 --- a/Tools/Program.cs +++ b/Tools/Program.cs @@ -8,6 +8,7 @@ using TechTalk.SpecFlow.Generator.Configuration; using TechTalk.SpecFlow.Reporting.NUnitExecutionReport; using TechTalk.SpecFlow.Reporting.StepDefinitionReport; +using TechTalk.SpecFlow.Reporting.TestExecutionReport; namespace TechTalk.SpecFlow.Tools { @@ -61,17 +62,11 @@ public static void TestExecutionReport([Required(Description = "Visual Studio Pr [Optional("TestResult.xml", Description = "Xml Test Result file generated by Gallio. Defaults to TestResult.xml")] string xmlTestResult, [Optional("TestResult.txt", "testOutput")] string labeledTestOutput, [Optional("TestResult.html", "out", Description = "Generated Output File. Defaults to TestResult.html")] string outputFile) - { - XDocument doc = XDocument.Load(xmlTestResult); - var tranny = new XslCompiledTransform(); - tranny.Load("Gallio2NUnit.xslt"); - XmlReader reader = doc.CreateReader(); - const string outputFileName = "TestResult.xml"; - XmlWriter writer = XmlWriter.Create(outputFileName); - tranny.Transform(reader, writer); - writer.Close(); + { + TestExecutionReportGenerator reportGenerator = new TestExecutionReportGenerator(); + reportGenerator.GenerateNUnitXmlFromGallio(xmlTestResult); - var generator = new NUnitExecutionReportGenerator(projectFile, Path.GetFullPath(outputFileName), + var generator = new NUnitExecutionReportGenerator(projectFile, Path.GetFullPath("TestResult.xml"), Path.GetFullPath(labeledTestOutput)); generator.GenerateReport(); diff --git a/Tools/TechTalk.SpecFlow.Tools.csproj b/Tools/TechTalk.SpecFlow.Tools.csproj index 47f8cf101..ff0e1e879 100644 --- a/Tools/TechTalk.SpecFlow.Tools.csproj +++ b/Tools/TechTalk.SpecFlow.Tools.csproj @@ -78,7 +78,6 @@ - PreserveNewest From f5b8f3c142525deb5949ba61f684a84dcda75b80 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Mon, 3 May 2010 16:47:46 +0100 Subject: [PATCH 04/13] delete file --- Tools/Gallio2NUnit.xslt | 90 ----------------------------------------- 1 file changed, 90 deletions(-) delete mode 100644 Tools/Gallio2NUnit.xslt diff --git a/Tools/Gallio2NUnit.xslt b/Tools/Gallio2NUnit.xslt deleted file mode 100644 index 7eff89e64..000000000 --- a/Tools/Gallio2NUnit.xslt +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - FalseTrue - FalseTrue - - - - - - - - - - - - - - - - - - - - - - - - FalseTrue - - - - - - - - - - - - - - - - - - - - - From be4d25d4c67d630f593a1ace6102f261164b729e Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Wed, 12 May 2010 17:29:12 +0100 Subject: [PATCH 05/13] Using built-in ResourceXmlReader to load xslt --- .../TestExecutionReportGenerator.cs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs index f18613a6a..26e9ec866 100644 --- a/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs +++ b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; +using System.Reflection; using System.Xml; using System.Xml.Linq; using System.Xml.Xsl; @@ -13,10 +8,9 @@ namespace TechTalk.SpecFlow.Reporting.TestExecutionReport public class TestExecutionReportGenerator { public void GenerateNUnitXmlFromGallio(string xmlTestResult) - { - Assembly asm = Assembly.GetExecutingAssembly(); - Stream rsrc = asm.GetManifestResourceStream("TechTalk.SpecFlow.Reporting.TestExecutionReport.Gallio2NUnit.xslt"); - XmlTextReader xmlTextReader = new XmlTextReader(rsrc); + { + XmlTextReader xmlTextReader = new ResourceXmlReader(Assembly.GetExecutingAssembly(), + "TechTalk.SpecFlow.Reporting.TestExecutionReport.Gallio2NUnit.xslt"); XDocument doc = XDocument.Load(xmlTestResult); var tranny = new XslCompiledTransform(); From e25131416e82bdd8ea19ef37ebafa9d6d8edee35 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Wed, 12 May 2010 17:33:37 +0100 Subject: [PATCH 06/13] let's be good citizen's and clear up after ourselves --- .../TestExecutionReportGenerator.cs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs index 26e9ec866..7be283ded 100644 --- a/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs +++ b/Reporting/TestExecutionReport/TestExecutionReportGenerator.cs @@ -8,21 +8,22 @@ namespace TechTalk.SpecFlow.Reporting.TestExecutionReport public class TestExecutionReportGenerator { public void GenerateNUnitXmlFromGallio(string xmlTestResult) - { - XmlTextReader xmlTextReader = new ResourceXmlReader(Assembly.GetExecutingAssembly(), - "TechTalk.SpecFlow.Reporting.TestExecutionReport.Gallio2NUnit.xslt"); - - XDocument doc = XDocument.Load(xmlTestResult); - var tranny = new XslCompiledTransform(); - tranny.Load(xmlTextReader); - XmlReader reader = doc.CreateReader(); - const string outputFileName = "TestResult.xml"; - XmlWriter writer = XmlWriter.Create(outputFileName); - - if (writer != null) + { + using (XmlTextReader xmlTextReader = new ResourceXmlReader(Assembly.GetExecutingAssembly(), + "TechTalk.SpecFlow.Reporting.TestExecutionReport.Gallio2NUnit.xslt")) { - tranny.Transform(reader, writer); - writer.Close(); + XDocument doc = XDocument.Load(xmlTestResult); + var tranny = new XslCompiledTransform(); + tranny.Load(xmlTextReader); + XmlReader reader = doc.CreateReader(); + const string outputFileName = "TestResult.xml"; + XmlWriter writer = XmlWriter.Create(outputFileName); + + if (writer != null) + { + tranny.Transform(reader, writer); + writer.Close(); + } } } } From 689c2049514e5696fe804a6e1cf1464e5e245329 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Fri, 14 May 2010 21:45:13 +0100 Subject: [PATCH 07/13] rollback a touch further --- Runtime/Tracing/NullListener.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Runtime/Tracing/NullListener.cs diff --git a/Runtime/Tracing/NullListener.cs b/Runtime/Tracing/NullListener.cs new file mode 100644 index 000000000..2ab3033fc --- /dev/null +++ b/Runtime/Tracing/NullListener.cs @@ -0,0 +1,15 @@ +namespace TechTalk.SpecFlow.Tracing +{ + public class NullListener : ITraceListener + { + public void WriteTestOutput(string message) + { + //nop; + } + + public void WriteToolOutput(string message) + { + //nop; + } + } +} \ No newline at end of file From 96ad82feb05edcd9e3b0cf9dc83abc07866365e7 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Fri, 14 May 2010 22:44:39 +0100 Subject: [PATCH 08/13] select an xsl or default to embedded --- .../NUnitExecutionReportGenerator.cs | 17 ++++------------- .../StepDefinitionReportGenerator.cs | 4 ++-- Reporting/XsltHelper.cs | 19 ++++++++++++++----- TechTalk.SpecFlow.sln | 5 ----- Tools/Program.cs | 6 ++++-- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Reporting/NUnitExecutionReport/NUnitExecutionReportGenerator.cs b/Reporting/NUnitExecutionReport/NUnitExecutionReportGenerator.cs index 79038052e..82518a70e 100644 --- a/Reporting/NUnitExecutionReport/NUnitExecutionReportGenerator.cs +++ b/Reporting/NUnitExecutionReport/NUnitExecutionReportGenerator.cs @@ -2,8 +2,6 @@ using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; -using System.Text; using System.Xml; using System.Xml.Serialization; using TechTalk.SpecFlow.Generator.Configuration; @@ -21,17 +19,10 @@ public class NUnitExecutionReportGenerator public NUnitExecutionReportGenerator(string projectFile, string xmlTestResultPath, string labeledTestOutputPath) { this.xmlTestResultPath = xmlTestResultPath; - this.specFlowProject = MsBuildProjectReader.LoadSpecFlowProjectFromMsBuild(projectFile); + specFlowProject = MsBuildProjectReader.LoadSpecFlowProjectFromMsBuild(projectFile); this.labeledTestOutputPath = labeledTestOutputPath; } - - public NUnitExecutionReportGenerator(SpecFlowProject specFlowProject, string xmlTestResultPath, string labeledTestOutputPath) - { - this.xmlTestResultPath = xmlTestResultPath; - this.specFlowProject = specFlowProject; - this.labeledTestOutputPath = labeledTestOutputPath; - } - + public void GenerateReport() { report = new ReportElements.NUnitExecutionReport(); @@ -91,7 +82,7 @@ private XmlDocument LoadXmlTestResult() return xmlTestResult; } - public void TransformReport(string outputFilePath) + public void TransformReport(string outputFilePath, string xsltFile) { XmlSerializer serializer = new XmlSerializer(typeof(ReportElements.NUnitExecutionReport), ReportElements.NUnitExecutionReport.XmlNamespace); @@ -101,7 +92,7 @@ public void TransformReport(string outputFilePath) } else { - XsltHelper.TransformHtml(serializer, report, GetType(), outputFilePath, specFlowProject.GeneratorConfiguration); + XsltHelper.TransformHtml(serializer, report, GetType(), outputFilePath, specFlowProject.GeneratorConfiguration, xsltFile); } } } diff --git a/Reporting/StepDefinitionReport/StepDefinitionReportGenerator.cs b/Reporting/StepDefinitionReport/StepDefinitionReportGenerator.cs index ff8605cdd..629f01cce 100644 --- a/Reporting/StepDefinitionReport/StepDefinitionReportGenerator.cs +++ b/Reporting/StepDefinitionReport/StepDefinitionReportGenerator.cs @@ -215,7 +215,7 @@ private string GetSampleText(BindingInfo bindingInfo) return sampleText; } - public void TransformReport(string outputFilePath) + public void TransformReport(string outputFilePath, string xsltFile) { XmlSerializer serializer = new XmlSerializer(typeof(ReportElements.StepDefinitionReport), ReportElements.StepDefinitionReport.XmlNamespace); @@ -225,7 +225,7 @@ public void TransformReport(string outputFilePath) } else { - XsltHelper.TransformHtml(serializer, report, GetType(), outputFilePath, specFlowProject.GeneratorConfiguration); + XsltHelper.TransformHtml(serializer, report, GetType(), outputFilePath, specFlowProject.GeneratorConfiguration, xsltFile); } } diff --git a/Reporting/XsltHelper.cs b/Reporting/XsltHelper.cs index b4ce57683..5927d80eb 100644 --- a/Reporting/XsltHelper.cs +++ b/Reporting/XsltHelper.cs @@ -27,7 +27,7 @@ public static void TransformXml(XmlSerializer serializer, object report, string } } - public static void TransformHtml(XmlSerializer serializer, object report, Type reportType, string outputFilePath, GeneratorConfiguration generatorConfiguration) + public static void TransformHtml(XmlSerializer serializer, object report, Type reportType, string outputFilePath, GeneratorConfiguration generatorConfiguration, string xsltFile) { var xmlOutputWriter = new StringWriter(); serializer.Serialize(xmlOutputWriter, report); @@ -38,11 +38,20 @@ public static void TransformHtml(XmlSerializer serializer, object report, Type r var resourceResolver = new XmlResourceResolver(); var reportName = reportType.Name.Replace("Generator", ""); - using (var xsltReader = new ResourceXmlReader(reportType, reportName + ".xslt")) + + if (!string.IsNullOrEmpty(xsltFile)) { - xslt.Load(xsltReader, xsltSettings, resourceResolver); + XmlDocument document = new XmlDocument(); + document.Load(xsltFile); + xslt.Load(document); + } + else + { + using (var xsltReader = new ResourceXmlReader(reportType, reportName + ".xslt")) + { + xslt.Load(xsltReader, xsltSettings, resourceResolver); + } } - var xmlOutputReader = new XmlTextReader(new StringReader(xmlOutputWriter.ToString())); XsltArgumentList argumentList = new XsltArgumentList(); @@ -54,7 +63,7 @@ public static void TransformHtml(XmlSerializer serializer, object report, Type r } } - static public void Transform(this XslCompiledTransform xslt, XmlReader input, XsltArgumentList arguments, Stream results, XmlResolver documentResolver) + private static void Transform(this XslCompiledTransform xslt, XmlReader input, XsltArgumentList arguments, Stream results, XmlResolver documentResolver) { //xslt.command.Execute(input, new XmlUrlResolver(), arguments, results); diff --git a/TechTalk.SpecFlow.sln b/TechTalk.SpecFlow.sln index c65883c6e..13da4abad 100644 --- a/TechTalk.SpecFlow.sln +++ b/TechTalk.SpecFlow.sln @@ -2,15 +2,11 @@ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Setup", "Setup", "{DCE0C3C4-5BC6-4A30-86BE-3FEFF4677A01}" - ProjectSection(SolutionItems) = preProject - changelog.txt = changelog.txt - EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A10B5CD6-38EC-4D7E-9D1C-2EBA8017E437}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{577A0375-1436-446C-802B-3C75C8CEF94F}" ProjectSection(SolutionItems) = preProject - changelog.txt = changelog.txt Languages.xml = Languages.xml LICENSE.txt = LICENSE.txt VersionInfo.cs = VersionInfo.cs @@ -175,7 +171,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {89167EB9-F458-48DA-9D8F-F639A74F5871} = {DCE0C3C4-5BC6-4A30-86BE-3FEFF4677A01} {70376361-0BE1-478D-8EEC-47BD1C768165} = {A10B5CD6-38EC-4D7E-9D1C-2EBA8017E437} {F8FACCF0-5497-4C6B-861F-78D72FD9561B} = {A10B5CD6-38EC-4D7E-9D1C-2EBA8017E437} {3FE793A8-E662-4026-B4EC-891324073235} = {A10B5CD6-38EC-4D7E-9D1C-2EBA8017E437} diff --git a/Tools/Program.cs b/Tools/Program.cs index eab82b21b..edbc36b30 100644 --- a/Tools/Program.cs +++ b/Tools/Program.cs @@ -32,17 +32,19 @@ public static void GenerateAll( [Action("Generates a report about usage and binding of steps")] public static void StepDefinitionReport( [Required(Description = "Visual Studio Project File containing specs")] string projectFile, + [Optional("", Description = "Xslt file to use, defaults to built-in stylesheet if not provided")] string xsltFile, [Optional("bin\\Debug", Description = @"Path for Spec dll e.g. Company.Specs.dll. Defaults to bin\Debug ")] string binFolder, [Optional("StepDefinitionReport.html", "out", Description = "Generated Output File. Defaults to StepDefinitionReport.html")] string outputFile) { var generator = new StepDefinitionReportGenerator(projectFile, binFolder, true); generator.GenerateReport(); - generator.TransformReport(Path.GetFullPath(outputFile)); + generator.TransformReport(Path.GetFullPath(outputFile), xsltFile); } [Action("Formats an NUnit execution report to SpecFlow style")] public static void NUnitExecutionReport([Required(Description = "Visual Studio Project File containing specs")] string projectFile, [Optional("TestResult.xml", Description = "Xml Test Result file generated by NUnit. Defaults to TestResult.xml")] string xmlTestResult, + [Optional("", Description = "Xslt file to use, defaults to built-in stylesheet if not provided")] string xsltFile, [Optional("TestResult.txt", "testOutput")] string labeledTestOutput, [Optional("TestResult.html", "out", Description = "Generated Output File. Defaults to TestResult.html")] string outputFile) { @@ -50,7 +52,7 @@ public static void NUnitExecutionReport([Required(Description = "Visual Studio P Path.GetFullPath(labeledTestOutput)); generator.GenerateReport(); - generator.TransformReport(Path.GetFullPath(outputFile)); + generator.TransformReport(Path.GetFullPath(outputFile), xsltFile); } #endregion From 4b6cfb238d7c158a1179d7fa0f56444903fc89e4 Mon Sep 17 00:00:00 2001 From: Simon Whittemore Date: Sat, 15 May 2010 10:54:21 +0100 Subject: [PATCH 09/13] basics of external xslt passing --- Reporting/LocalUrlResolver.cs | 15 +++++++++++++++ Reporting/TechTalk.SpecFlow.Reporting.csproj | 12 +++++++++--- Reporting/XsltHelper.cs | 7 ++++--- 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 Reporting/LocalUrlResolver.cs diff --git a/Reporting/LocalUrlResolver.cs b/Reporting/LocalUrlResolver.cs new file mode 100644 index 000000000..5ab1353bc --- /dev/null +++ b/Reporting/LocalUrlResolver.cs @@ -0,0 +1,15 @@ +using System; +using System.Xml; + +namespace TechTalk.SpecFlow.Reporting +{ + class LocalUrlResolver : XmlUrlResolver + { + public override Uri ResolveUri(Uri baseUri, string relativeUri) + { + if (baseUri != null) + return base.ResolveUri(baseUri, relativeUri); + return base.ResolveUri(new Uri("http://mypath/"), relativeUri); + } + } +} \ No newline at end of file diff --git a/Reporting/TechTalk.SpecFlow.Reporting.csproj b/Reporting/TechTalk.SpecFlow.Reporting.csproj index 2ece5eeaa..80e7d1534 100644 --- a/Reporting/TechTalk.SpecFlow.Reporting.csproj +++ b/Reporting/TechTalk.SpecFlow.Reporting.csproj @@ -84,9 +84,12 @@ - - - + + Common\Common.xslt + + + Common\GherkinElements.xslt + @@ -104,6 +107,9 @@ Common\Languages.xml + + + + \ No newline at end of file diff --git a/Tests/ReportingTest.SampleProject/StepDefinitions.cs b/Tests/ReportingTest.SampleProject/StepDefinitions.cs new file mode 100644 index 000000000..256cfd15a --- /dev/null +++ b/Tests/ReportingTest.SampleProject/StepDefinitions.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TechTalk.SpecFlow; +using NUnit.Framework; + +namespace ReportingTest.SampleProject +{ + [Binding] + public class StepDefinitions + { + [Given(@"I have a precondition that is (.*)")] + [When(@"I do something that (.*)")] + [Then(@"I have a postcondition that is (.*)")] + public void GivenIHaveAPreconditionThatIs(string result) + { + switch(result.ToLower()) + { + case "successful": + case "works": + return; + case "failing": + Assert.Fail("simulated failure"); + break; + case "pending": + ScenarioContext.Current.Pending(); + break; + default: + Assert.Fail("unknown result"); + break; + } + } + } +} diff --git a/Tests/ReportingTest.SampleProject/readme.txt b/Tests/ReportingTest.SampleProject/readme.txt new file mode 100644 index 000000000..b238899a5 --- /dev/null +++ b/Tests/ReportingTest.SampleProject/readme.txt @@ -0,0 +1,11 @@ +This project is not a test project for SpecFlow, but a sample specflow test +project that is used for testing the reporting. + +The unit tests generated by SpecFlow are disabled, to avoid execution and +fake error reports for SpecFlow. + +Enable the sample tests: +- set the "Custom Tool" property of the feature file nodes to "SpecFlowSingleFileGenerator" + +Disable the sample tests: +- set the "Custom Tool" property of the feature file nodes to empty diff --git a/Tests/ReportingTests/CustomXsltTemplate.feature b/Tests/ReportingTests/CustomXsltTemplate.feature new file mode 100644 index 000000000..fbfb8cb7d --- /dev/null +++ b/Tests/ReportingTests/CustomXsltTemplate.feature @@ -0,0 +1,104 @@ +Feature: Using custom XSLT template for reports + In order to customize the look of the specflow reports + As a test manager + I want to be able to specify a custom XSLT template for the report generation + +Scenario: Specfiy custom XSLT for NUnit execution report + Given there are NUuit test execution results for the ReportingTest.SampleProject project + And there is an XSLT template containing + """ + + features: + all: + success: + failure: + pending: + ignored: + + """ + When I generate SpecFlow NUnit execution report with the custom XSLT + Then a report generated like + """ + features: 2 + all: 5 + success: 2 + failure: 1 + pending: 1 + ignored: 1 + """ + +Scenario: Custom XSLT can include other custom XSLT + Given there are NUuit test execution results for the ReportingTest.SampleProject project + And there is an XSLT template 'custominclude.xslt' containing + """ + + this was generated by a custom template + features: + + """ + And there is an XSLT template containing + """ + + + + + + """ + When I generate SpecFlow NUnit execution report with the custom XSLT + Then a report generated like + """ + this was generated by a custom template + features: 2 + """ + + +Scenario: Custom XSLT can include built-in SpecFlow XSLT + Given there are NUuit test execution results for the ReportingTest.SampleProject project + And there is an XSLT template containing + """ + + + + the english tool text for 'GeneratedByPre' is + + + + + """ + When I generate SpecFlow NUnit execution report with the custom XSLT + Then a report generated like + """ + the english tool text for 'GeneratedByPre' is + Generated by SpecFlow at + """ + +Scenario: Custom XSLT can include built-in SpecFlow and custom XSLT + Given there are NUuit test execution results for the ReportingTest.SampleProject project + And there is an XSLT template 'custominclude.xslt' containing + """ + + this was generated by a custom template + features: + + """ + And there is an XSLT template containing + """ + + + + + the english tool text for 'GeneratedByPre' is + + + + + + """ + When I generate SpecFlow NUnit execution report with the custom XSLT + Then a report generated like + """ + the english tool text for 'GeneratedByPre' is + Generated by SpecFlow at + this was generated by a custom template + features: 2 + """ diff --git a/Tests/ReportingTests/CustomXsltTemplate.feature.cs b/Tests/ReportingTests/CustomXsltTemplate.feature.cs new file mode 100644 index 000000000..7b8d8f5c3 --- /dev/null +++ b/Tests/ReportingTests/CustomXsltTemplate.feature.cs @@ -0,0 +1,180 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by SpecFlow (http://www.specflow.org/). +// SpecFlow Version:1.3.0.0 +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +#region Designer generated code +namespace ReportingTests +{ + using TechTalk.SpecFlow; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.3.0.0")] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [NUnit.Framework.TestFixtureAttribute()] + [NUnit.Framework.DescriptionAttribute("Using custom XSLT template for reports")] + public partial class UsingCustomXSLTTemplateForReportsFeature + { + + private static TechTalk.SpecFlow.ITestRunner testRunner; + +#line 1 "CustomXsltTemplate.feature" +#line hidden + + [NUnit.Framework.TestFixtureSetUpAttribute()] + public virtual void FeatureSetup() + { + testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); + TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Using custom XSLT template for reports", "In order to customize the look of the specflow reports\r\nAs a test manager\r\nI want" + + " to be able to specify a custom XSLT template for the report generation", ((string[])(null))); + testRunner.OnFeatureStart(featureInfo); + } + + [NUnit.Framework.TestFixtureTearDownAttribute()] + public virtual void FeatureTearDown() + { + testRunner.OnFeatureEnd(); + testRunner = null; + } + + public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + { + testRunner.OnScenarioStart(scenarioInfo); + } + + [NUnit.Framework.TearDownAttribute()] + public virtual void ScenarioTearDown() + { + testRunner.OnScenarioEnd(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("Specfiy custom XSLT for NUnit execution report")] + public virtual void SpecfiyCustomXSLTForNUnitExecutionReport() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Specfiy custom XSLT for NUnit execution report", ((string[])(null))); +#line 6 +this.ScenarioSetup(scenarioInfo); +#line 7 +testRunner.Given("there are NUuit test execution results for the ReportingTest.SampleProject projec" + + "t"); +#line hidden +#line 8 +testRunner.And("there is an XSLT template containing", @" + features: + all: + success: + failure: + pending: + ignored: + ", ((TechTalk.SpecFlow.Table)(null))); +#line 19 +testRunner.When("I generate SpecFlow NUnit execution report with the custom XSLT"); +#line hidden +#line 20 +testRunner.Then("a report generated like", "\tfeatures: 2\r\n\tall: 5\r\n\tsuccess: 2\r\n\tfailure: 1\r\n\tpending: 1\r\n\tignored: 1", ((TechTalk.SpecFlow.Table)(null))); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("Custom XSLT can include other custom XSLT")] + public virtual void CustomXSLTCanIncludeOtherCustomXSLT() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Custom XSLT can include other custom XSLT", ((string[])(null))); +#line 30 +this.ScenarioSetup(scenarioInfo); +#line 31 +testRunner.Given("there are NUuit test execution results for the ReportingTest.SampleProject projec" + + "t"); +#line hidden +#line 32 +testRunner.And("there is an XSLT template \'custominclude.xslt\' containing", " \r\n\tthis was generated by a custom template" + + "\r\n\tfeatures: \r\n \t", ((TechTalk.SpecFlow.Table)(null))); +#line hidden +#line 39 +testRunner.And("there is an XSLT template containing", " \r\n \r\n \r\n\t\r\n \t", ((TechTalk.SpecFlow.Table)(null))); +#line 47 +testRunner.When("I generate SpecFlow NUnit execution report with the custom XSLT"); +#line hidden +#line 48 +testRunner.Then("a report generated like", "\tthis was generated by a custom template\r\n\tfeatures: 2", ((TechTalk.SpecFlow.Table)(null))); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("Custom XSLT can include built-in SpecFlow XSLT")] + public virtual void CustomXSLTCanIncludeBuilt_InSpecFlowXSLT() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Custom XSLT can include built-in SpecFlow XSLT", ((string[])(null))); +#line 55 +this.ScenarioSetup(scenarioInfo); +#line 56 +testRunner.Given("there are NUuit test execution results for the ReportingTest.SampleProject projec" + + "t"); +#line hidden +#line 57 +testRunner.And("there is an XSLT template containing", @" + + + the english tool text for 'GeneratedByPre' is + + + + ", ((TechTalk.SpecFlow.Table)(null))); +#line 68 +testRunner.When("I generate SpecFlow NUnit execution report with the custom XSLT"); +#line hidden +#line 69 +testRunner.Then("a report generated like", "\tthe english tool text for \'GeneratedByPre\' is\r\n\tGenerated by SpecFlow at ", ((TechTalk.SpecFlow.Table)(null))); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("Custom XSLT can include built-in SpecFlow and custom XSLT")] + public virtual void CustomXSLTCanIncludeBuilt_InSpecFlowAndCustomXSLT() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Custom XSLT can include built-in SpecFlow and custom XSLT", ((string[])(null))); +#line 75 +this.ScenarioSetup(scenarioInfo); +#line 76 +testRunner.Given("there are NUuit test execution results for the ReportingTest.SampleProject projec" + + "t"); +#line hidden +#line 77 +testRunner.And("there is an XSLT template \'custominclude.xslt\' containing", " \r\n\tthis was generated by a custom template" + + "\r\n\tfeatures: \r\n \t", ((TechTalk.SpecFlow.Table)(null))); +#line hidden +#line 84 +testRunner.And("there is an XSLT template containing", @" + + + + the english tool text for 'GeneratedByPre' is + + + + + ", ((TechTalk.SpecFlow.Table)(null))); +#line 97 +testRunner.When("I generate SpecFlow NUnit execution report with the custom XSLT"); +#line hidden +#line 98 +testRunner.Then("a report generated like", "\tthe english tool text for \'GeneratedByPre\' is\r\n\tGenerated by SpecFlow at \r\n\tthis" + + " was generated by a custom template\r\n\tfeatures: 2", ((TechTalk.SpecFlow.Table)(null))); +#line hidden + testRunner.CollectScenarioErrors(); + } + } +} +#endregion diff --git a/Tests/ReportingTests/Properties/AssemblyInfo.cs b/Tests/ReportingTests/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5a5f0efc1 --- /dev/null +++ b/Tests/ReportingTests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ReportingTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("ReportingTests")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8ad80bf4-df2e-4190-8119-db4704ee8875")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Tests/ReportingTests/ReportingTests.csproj b/Tests/ReportingTests/ReportingTests.csproj new file mode 100644 index 000000000..6fdfe7291 --- /dev/null +++ b/Tests/ReportingTests/ReportingTests.csproj @@ -0,0 +1,93 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {1965463E-6972-4618-8E59-D3259AE7A125} + Library + Properties + ReportingTests + ReportingTests + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\lib\nunit\nunit.framework.dll + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + True + True + CustomXsltTemplate.feature + + + + + + + + {FC43509F-E7D3-40C4-B4C3-1E6C9D5530A4} + TechTalk.SpecFlow.Reporting + + + {413EE28C-4F89-4C6F-BA1E-2CDEE4CD43B4} + TechTalk.SpecFlow + + + {87BE7FE6-C3DE-4409-ABF6-FA5B60AF3DE1} + TechTalk.SpecFlow.Tools + + + {E5C299D5-E7CC-4477-9A0B-4797B74BC88B} + ReportingTest.SampleProject + + + + + SpecFlowSingleFileGenerator + CustomXsltTemplate.feature.cs + + + + + \ No newline at end of file diff --git a/Tests/ReportingTests/StepDefinitions/Setup.cs b/Tests/ReportingTests/StepDefinitions/Setup.cs new file mode 100644 index 000000000..66ab6241b --- /dev/null +++ b/Tests/ReportingTests/StepDefinitions/Setup.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using NUnit.Framework; +using TechTalk.SpecFlow; + +namespace ReportingTests.StepDefinitions +{ + [Binding] + public class Setup + { + [BeforeScenario] + public void BeforeScenario() + { + //ScenarioContext.Current["project"] + } + } + + public class SampleProjectInfo : IDisposable + { + public string ProjectFolder { get; private set; } + public string NUnitXmlResultPath { get; private set; } + public string NUnitTextResultPath { get; private set; } + public string CustomXslt { get; set; } + + public string OutputFilePath { get; private set; } + + public string ProjectFilePath { get; private set; } + + public SampleProjectInfo() + { + ProjectFolder = Path.GetFullPath( + Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"..\..\..\ReportingTest.SampleProject")); + ProjectFilePath = Path.Combine(ProjectFolder, @"ReportingTest.SampleProject.csproj"); + + NUnitXmlResultPath = Path.Combine(ProjectFolder, @"NUnitResult\TestResult.xml"); + NUnitTextResultPath = Path.Combine(ProjectFolder, @"NUnitResult\TestResult.txt"); + + OutputFilePath = GenerateTempFilePath(".html"); + } + + public string GenerateFilePath(string fileName) + { + return Path.Combine(Path.GetTempPath(), fileName); + } + + public string GenerateTempFilePath(string extension) + { + return Path.Combine(Path.GetTempPath(), Path.GetTempFileName()) + extension; + } + + public void Dispose() + { + if (CustomXslt != null) + File.Delete(CustomXslt); + } + + public string GetOutputFileContent() + { + Assert.IsTrue(File.Exists(OutputFilePath), "output file is missing"); + + using (var reader = new StreamReader(OutputFilePath)) + { + return reader.ReadToEnd(); + } + } + } +} diff --git a/Tests/ReportingTests/StepDefinitions/StepDefinitions.cs b/Tests/ReportingTests/StepDefinitions/StepDefinitions.cs new file mode 100644 index 000000000..d7cc95fe5 --- /dev/null +++ b/Tests/ReportingTests/StepDefinitions/StepDefinitions.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using TechTalk.SpecFlow; +using NUnit.Framework; +using SpecFlowTool = TechTalk.SpecFlow.Tools.Program; + +namespace ReportingTests.StepDefinitions +{ + [Binding] + public class StepDefinitions + { + private SampleProjectInfo sampleProjectInfo; + + public StepDefinitions(SampleProjectInfo sampleProjectInfo) + { + this.sampleProjectInfo = sampleProjectInfo; + } + + [Given(@"there are NUuit test execution results for the ReportingTest.SampleProject project")] + public void GivenThereIsAnNUuitTestExecutionResultsForMyProject() + { + Assert.IsTrue(File.Exists(sampleProjectInfo.NUnitXmlResultPath), "NUnit xml test result is missing"); + Assert.IsTrue(File.Exists(sampleProjectInfo.NUnitTextResultPath), "NUnit txt test result is missing"); + } + + [Given(@"there is an XSLT template containing")] + public void GivenThereIsAnXSLTTemplateContaining(string xsltContent) + { + sampleProjectInfo.CustomXslt = GenerateCustomXslt(xsltContent, null); + } + + [Given(@"there is an XSLT template '(.*)' containing")] + public void GivenThereIsAnXSLTTemplateContaining(string templateFileName, string xsltContent) + { + GenerateCustomXslt(xsltContent, templateFileName); + } + + [When(@"I generate SpecFlow NUnit execution report with the custom XSLT")] + public void WhenIGenerateSpecFlowNUnitExecutionReportWithTheCustomXSLT() + { + SpecFlowTool.NUnitExecutionReport( + sampleProjectInfo.ProjectFilePath, + sampleProjectInfo.NUnitXmlResultPath, + sampleProjectInfo.CustomXslt, + sampleProjectInfo.NUnitTextResultPath, + sampleProjectInfo.OutputFilePath); + } + + [Then(@"a report generated like")] + public void ThenAReportGeneratedLike(string expectedResultContent) + { + Assert.IsTrue(File.Exists(sampleProjectInfo.OutputFilePath), "no result is generated"); + + string resultContent = sampleProjectInfo.GetOutputFileContent(); + + AssertEqualIgnoringWhitespace(expectedResultContent, resultContent); + } + + private void AssertEqualIgnoringWhitespace(string expectedValue, string actualValue) + { + StringAssert.AreEqualIgnoringCase(NormalizeWhitespace(expectedValue), NormalizeWhitespace(actualValue)); + } + + private string NormalizeWhitespace(string value) + { + var whitespaceRe = new Regex(@"\s+"); + return whitespaceRe.Replace(value.Trim(), " "); + } + + private string GenerateCustomXslt(string content, string templateFileName) + { + string xsltTemplate = @" + + + +{0} + + +"; + + string fullContent = string.Format(xsltTemplate, content); + + string path = templateFileName == null + ? sampleProjectInfo.GenerateTempFilePath(".xslt") + : sampleProjectInfo.GenerateFilePath(templateFileName); + using (TextWriter writer = new StreamWriter(path, false, Encoding.UTF8)) + { + writer.WriteLine(fullContent); + } + + return path; + } + } +} \ No newline at end of file diff --git a/Tools/Program.cs b/Tools/Program.cs index f2418bcf1..31ce9a6c7 100644 --- a/Tools/Program.cs +++ b/Tools/Program.cs @@ -9,7 +9,7 @@ namespace TechTalk.SpecFlow.Tools { - internal class Program + public class Program { private static void Main(string[] args) { diff --git a/lib/nunit/nunit-console-runner.dll b/lib/nunit/nunit-console-runner.dll new file mode 100644 index 0000000000000000000000000000000000000000..c74073598071f0292fb0a4fed195cfd83302dcb2 GIT binary patch literal 32768 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 F{|!B0(_#Ps literal 0 HcmV?d00001 diff --git a/lib/nunit/nunit-console.exe b/lib/nunit/nunit-console.exe new file mode 100644 index 0000000000000000000000000000000000000000..87651672acf269bd162a3e8433b642513c5c8d66 GIT binary patch literal 4608 zcmeHKO>7%Q6n^74C2dJ)%U>#>OfhX!NLG%U3aVCM*DWO_Nki1{iWUT1I3s?XAU2%gT zjP;b!b}rCfppTp=>3Uc-PIvdF`xSm+$|is3v_Z)bC{eK8alPWY zNOWQTc$=&fn}rzj^i2SuNt{i;F_Wf=&Nw!*70kr9Jdh3Oo6y@@9tm-*@k20*uV+AH zT?oCs<%tfr&l$hWc|~L2Qq)N=X`&(6P?)2$wSU!a%__PR5|G_W7O>IR%?_vfdN6Ey zkTyK9Bh_~c@CWE{>G)wKmJ+|u=A5jvKl@PbAvW1bKHzsyk$D*bBAy}iOewZrP>Yx& zM$z_T%$zLId%!u|%(0WhM=+kl{1uix?1xjBbAz}#c6*98^5l25kM2m~gf~o+4iVz{ zW^~56^ZDQy80VB6qded&Jq`G}z;^|HF7S%LKLqwF=GiB3MBuB+s15YKz;9F@TCb_A zs)q(r8PT5DNV2kp?xqa#z_W49Z_BM_P}AZFAysGzT6bawqvamzl1A8KS)AWuk|jA z9U2X*bG~_mg1Nwp2P$C@g}!mjf}x`CM$sURodm%tCWMK(ATXBdQ6;p#H$|nzC^mIE zG4;Hu#5C%90Xda8v`vCDVWxdhyfC0b6q)*zzj(w%73(#4tq`LUr{-d_LM(f+Z?0d4 z^=Yp*XWg}>hJ)$Q)`jT$lg37C>Ry*nwrM+Pc9^J35Sy%){uY8b%d!@J(xeA*k(90jQL zmX*#<7q-OZ#2wy7=OAliPXup@Xx1WbD@B`g&VKv` zvx9>gsrTV|6&KlR6G<4G-MMik8k7!{*-VzT#e;%Vu)}00(q&#zk!# zJs$E&=-#w8-;h4;)=i{OIeN^@&w6&YUypi~8Q1u_=;-o%*slvd&XK1Jj-Cu{7{pO{ zb}fBbwwu%AGuYXNE?U>Cfvw>CdV)(Y(i0{^t(dBVD^yXZM1t=IMH}0K>Qc>zeg|K6 z<$u#-q7CUE2=Fe$$OMtW1X4!+u^A^(WiKGm)oc5A)u3Z15N`Tr3qle zbOP_iX^dm^7;tW%rGNgD?RMhcU)sYre=lHHo7kal+2hW z{PE@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/nunit/nunit.core.dll b/lib/nunit/nunit.core.dll new file mode 100644 index 0000000000000000000000000000000000000000..c51d8ff2484c57ee86766677a5686187d81156d6 GIT binary patch literal 135168 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

j9*cwv^s?0UL6L2x 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 AApigX literal 0 HcmV?d00001 diff --git a/lib/nunit/nunit.framework.dll b/lib/nunit/nunit.framework.dll index 1c87f11bdc34ca1ff3501076944b8f9e405f6954..07e4c6eaeebe158584411616b9c82baecab9616e 100644 GIT binary patch literal 131072 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 FzX1!`>QMjy literal 131072 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 + + + nunit.framework + + + +

+ BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An ActualValueDelegate + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + AndConstraint succeeds only if both members succeed. + + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. + + + + + The value against which a comparison is to be made + + + + + If true, less than returns success + + + + + if true, equal returns success + + + + + if true, greater than returns success + + + + + The predicate used as a part of the description + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + The value against which to make a comparison. + if set to true less succeeds. + if set to true equal succeeds. + if set to true greater succeeds. + String used in describing the constraint. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual collections or arrays. If both are identical, the value is + only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Modify the constraint to ignore case in matching. + + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to ignore case and return self. + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Abstract base class used for prefixes + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a collection or + array corresponding to a single int index into the collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Returns the string representation of this constraint + + + + + Canonicalize the provided path + + + The path in standardized form + + + + Test whether two paths are the same + + The first path + The second path + + + + + Test whether one path is the same as or under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + SubDirectoryConstraint is used to test that one directory is a subdirectory of another. + + + + + Initializes a new instance of the class. + + The dir info. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Builds a list of DirectoryInfo objects, recursing where necessary + + directory to recurse + list of DirectoryInfo objects from the top level + + + + private method to determine whether a directory is within the path + + top-level directory to search + directory to search for + true if found, false if not + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + RangeConstraint tests whethe two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + Constructs a CollectionOperator + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Operator that requires both it's arguments to succeed + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + generated ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is aware of some of its + derived classes, which is an apparent violation of + encapsulation. Ideally, these classes would be a + single class, but they must be separated in order to + allow parts to be generated under .NET 1.x and to + provide proper user feedback in syntactically + aware IDEs. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + Modes in which the tolerance value for a comparison can + be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + If non-zero, equality comparisons within the specified + tolerance will succeed. + + + + + Comparison object used in comparisons for some constraints. + + + + + Compares two objects for equality. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets and sets an external comparer to be used to + test for equality. It is applied to members of + collections, in place of NUnit's own logic. + + + + + Gets and sets a tolerance used to compare objects of + certin types. + + + + + Gets the list of failure points for the last Match performed. + + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + SetUpFixtureAttribute is used to identify a SetUpFixture + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. + + The result. + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets the ignore reason. + + The ignore reason. + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Thrown when an assertion failed. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used to identify a method that is called + immediately after each test is run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + An array of the names of the factories that will provide data + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + WUsed on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attriute under .NET 1.x + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + Static helper class used in the constraint-based syntax + + + + + Creates a new SubstringConstraint + + The value of the substring + A SubstringConstraint + + + + Creates a new CollectionContainsConstraint. + + The item that should be found. + A new CollectionContainsConstraint + + + diff --git a/lib/nunit/nunit.util.dll b/lib/nunit/nunit.util.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9c515f050c64ee3a63102988128f6eb5339b701 GIT binary patch literal 126976 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 z z_nZb7=)r}2t->N4Z$&=0%Q4q~_m<}Vit}%DXyyHDD%ct`mu0?2N)m6$RfO$hvr9Yr zCBM@f>v+qZ6~7L#X?3j8zlYkT@!GdiJol%iFE;yLE%_Fvs%-9s&+(_3$2n_wnH`nL((D^OyV~S2&yye>e++`X&%WXL4 z=4L0ic|V_Kek;7II~F77a_0ifkgLa7LYShI)RLJGk(PgL2l1p~lTfVrI_v;s0(`oED%dXbU zmo`U7$Hnuy95xG4D6Euj=X~=1p4)Qo4?1g}&hC@EQMcxsy9ai$PZ!+51g#w;sSZ}% zVG^qi^Cgs4$!16*`s51Tx&0%3Kq=HU26mF`U9EkJT;k5|!Qi}p(>QE$(3Wvk*YSCI zz0y`;R`|H?28iVt(_cs)m1ZpCWf!qJX9y?Z$@CT);J z!p0ld{4ROj-heFS*c^R&5L&I*uVqPA{$4Ao1r<090|M7cA_xvn;@4vk8+rR%Cn^&y;(ZTR5uYT<#-~Q>w zN9fG3)GQPTy!hHOv3RxaBaTytr2*24mH0QIDp=mua?>wFQ9u}Pi%0A_9*_8yYH1l2 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 E0p%LW8vp