[
  {
    "path": ".gitignore",
    "content": "bin\nobj\n*.user\n*.suo\nApp_Data\n*.results.xml\n/src/packages\n_ReSharper.*"
  },
  {
    "path": "3rdParty/xunit/EULA.txt",
    "content": "This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\" have the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the software.\n\nA \"contributor\" is any person that distributes its contribution under this license.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its contribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\n\n(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement."
  },
  {
    "path": "3rdParty/xunit/HTML.xslt",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n    <xsl:output method=\"html\"/>\n    <xsl:template match=\"/\">\n        <xsl:text disable-output-escaping=\"yes\"><![CDATA[<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">]]></xsl:text>\n        <html>\n            <head>\n                <title>\n                    xUnit.net Test Results - <xsl:value-of select=\"@name\"/>\n                </title>\n                <style type=\"text/css\">\n                    body { font-family: Calibri, Verdana, Arial, sans-serif; background-color: White; color: Black; }\n                    h2,h3,h4,h5 { margin: 0; padding: 0; }\n                    h3 { font-weight: normal; }\n                    h5 { font-weight: normal; font-style: italic; margin-bottom: 0.75em; }\n                    pre { font-family: Consolas; font-size: 85%; margin: 0 0 0 1em; padding: 0; }\n                    .divided { border-top: solid 1px #f0f5fa; padding-top: 0.5em; }\n                    .row, .altrow { padding: 0.1em 0.3em; }\n                    .row { background-color: #f0f5fa; }\n                    .altrow { background-color: #e1ebf4; }\n                    .success, .failure, .skipped { font-family: Arial Unicode MS; font-weight: normal; float: left; width: 1em; display: block; }\n                    .success { color: #0c0; }\n                    .failure { color: #c00; }\n                    .skipped { color: #cc0; }\n                    .timing { float: right; }\n                    .indent { margin: 0.25em 0 0.5em 2em; }\n                    .clickable { cursor: pointer; }\n                    .testcount { font-size: 85%; }\n                </style>\n                <script language=\"javascript\">\n                    function ToggleClass(id) {\n                        var elem = document.getElementById(id);\n                        if (elem.style.display == \"none\") {\n                            elem.style.display = \"block\";\n                        }\n                        else {\n                            elem.style.display = \"none\";\n                        }\n                    }\n                </script>\n            </head>\n            <body>\n                <xsl:apply-templates/>\n            </body>\n        </html>\n    </xsl:template>\n\n    <xsl:template match=\"assemblies\">\n        <xsl:apply-templates/>\n    </xsl:template>\n\n    <xsl:template match=\"assembly\">\n        <h3 class=\"divided\"><b>Results for <xsl:value-of select=\"@name\"/></b></h3>\n        <div>\n            Tests run: <a href=\"#all\"><b><xsl:value-of select=\"@total\"/></b></a> &#160;\n            Failures: <a href=\"#failures\"><b><xsl:value-of select=\"@failed\"/></b></a>,\n            Skipped: <a href=\"#skipped\"><b><xsl:value-of select=\"@skipped\"/></b></a>,\n            Run time: <b><xsl:value-of select=\"@time\"/>s</b>\n        </div>\n        <xsl:if test=\"class/test[@result='Fail']\">\n            <br />\n            <h2><a name=\"failures\"></a>Failed tests</h2>\n            <xsl:apply-templates select=\"class/test[@result='Fail']\"><xsl:sort select=\"@name\"/></xsl:apply-templates>\n        </xsl:if>\n        <xsl:if test=\"class/failure\">\n            <br />\n            <h2><a name=\"failures\"></a>Failed fixtures</h2>\n            <xsl:apply-templates select=\"class/failure\"><xsl:sort select=\"../@name\"/></xsl:apply-templates>\n        </xsl:if>\n        <xsl:if test=\"@skipped > 0\">\n            <br />\n            <h2><a name=\"skipped\"></a>Skipped tests</h2>\n            <xsl:apply-templates select=\"class/test[@result='Skip']\"><xsl:sort select=\"@name\"/></xsl:apply-templates>\n        </xsl:if>\n        <br />\n        <h2><a name=\"all\"></a>All tests</h2>\n        <h5>Click test class name to expand/collapse test details</h5>\n        <xsl:apply-templates select=\"class\"><xsl:sort select=\"@name\"/></xsl:apply-templates>\n        <br /><h5>Results generated <xsl:value-of select=\"@run-date\"/> at <xsl:value-of select=\"@run-time\"/></h5>\n    </xsl:template>\n\n    <xsl:template match=\"test\">\n        <div>\n            <xsl:attribute name=\"class\"><xsl:if test=\"(position() mod 2 = 0)\">alt</xsl:if>row</xsl:attribute>\n            <xsl:if test=\"@result!='Skip'\"><span class=\"timing\"><xsl:value-of select=\"@time\"/>s</span></xsl:if>\n            <xsl:if test=\"@result='Skip'\"><span class=\"timing\">Skipped</span><span class=\"skipped\">&#x2762;</span></xsl:if>\n            <xsl:if test=\"@result='Fail'\"><span class=\"failure\">&#x2718;</span></xsl:if>\n            <xsl:if test=\"@result='Pass'\"><span class=\"success\">&#x2714;</span></xsl:if>\n            &#160;<xsl:value-of select=\"@name\"/>\n            <xsl:if test=\"child::node()/message\"> : <xsl:value-of select=\"child::node()/message\"/></xsl:if>\n            <br clear=\"all\" />\n            <xsl:if test=\"failure/stack-trace\">\n                <pre><xsl:value-of select=\"failure/stack-trace\"/></pre>\n            </xsl:if>\n            <xsl:if test=\"output\">\n                <h4>Output</h4>\n                <pre><xsl:value-of select=\"output\"/></pre>\n            </xsl:if>\n        </div>\n    </xsl:template>\n\n    <xsl:template match=\"failure\">\n        <span class=\"failure\">&#x2718;</span> <xsl:value-of select=\"../@name\"/> : <xsl:value-of select=\"message\"/><br clear=\"all\"/>\n        Stack Trace:<br />\n        <pre><xsl:value-of select=\"stack-trace\"/></pre>\n    </xsl:template>\n\n    <xsl:template match=\"class\">\n        <h3>\n            <span class=\"timing\"><xsl:value-of select=\"@time\"/>s</span>\n            <span class=\"clickable\">\n                <xsl:attribute name=\"onclick\">ToggleClass('class<xsl:value-of select=\"position()\"/>')</xsl:attribute>\n                <xsl:attribute name=\"ondblclick\">ToggleClass('class<xsl:value-of select=\"position()\"/>')</xsl:attribute>\n                <xsl:if test=\"@failed > 0\"><span class=\"failure\">&#x2718;</span></xsl:if>\n                <xsl:if test=\"@failed = 0\"><span class=\"success\">&#x2714;</span></xsl:if>\n                &#160;<xsl:value-of select=\"@name\"/>\n                &#160;<span class=\"testcount\">(<xsl:value-of select=\"@total\"/>&#160;test<xsl:if test=\"@total > 1\">s</xsl:if>)</span>\n            </span>\n            <br clear=\"all\" />\n        </h3>\n        <div class=\"indent\">\n            <xsl:if test=\"@failed = 0\"><xsl:attribute name=\"style\">display: none;</xsl:attribute></xsl:if>\n            <xsl:attribute name=\"id\">class<xsl:value-of select=\"position()\"/></xsl:attribute>\n            <xsl:apply-templates select=\"test\"><xsl:sort select=\"@name\"/></xsl:apply-templates>\n        </div>\n    </xsl:template>\n\n</xsl:stylesheet>"
  },
  {
    "path": "3rdParty/xunit/NUnitXml.xslt",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n  <xsl:output cdata-section-elements=\"message stack-trace\"/>\n\n  <xsl:template match=\"/\">\n    <xsl:apply-templates/>\n  </xsl:template>\n\n  <xsl:template match=\"assembly\">\n    <test-results>\n      <xsl:attribute name=\"name\">\n        <xsl:value-of select=\"@name\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"date\">\n        <xsl:value-of select=\"@run-date\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"time\">\n        <xsl:value-of select=\"@run-time\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"total\">\n        <xsl:value-of select=\"@total\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"failures\">\n        <xsl:value-of select=\"@failed\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"not-run\">\n        <xsl:value-of select=\"@skipped\"/>\n      </xsl:attribute>\n      <test-suite>\n        <xsl:attribute name=\"name\">\n          <xsl:value-of select=\"@name\"/>\n        </xsl:attribute>\n        <xsl:attribute name=\"success\">\n          <xsl:if test=\"@failed > 0\">False</xsl:if>\n          <xsl:if test=\"@failed = 0\">True</xsl:if>\n        </xsl:attribute>\n        <xsl:attribute name=\"time\">\n          <xsl:value-of select=\"@time\"/>\n        </xsl:attribute>\n        <results>\n          <xsl:apply-templates select=\"class\"/>\n        </results>\n      </test-suite>\n    </test-results>\n  </xsl:template>\n\n  <xsl:template match=\"class\">\n    <test-suite>\n      <xsl:attribute name=\"name\">\n        <xsl:value-of select=\"@name\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"success\">\n        <xsl:if test=\"@failed > 0\">False</xsl:if>\n        <xsl:if test=\"@failed = 0\">True</xsl:if>\n      </xsl:attribute>\n      <xsl:attribute name=\"time\">\n        <xsl:value-of select=\"@time\"/>\n      </xsl:attribute>\n      <xsl:if test=\"failure\">\n        <xsl:copy-of select=\"failure\"/>\n      </xsl:if>\n      <xsl:if test=\"reason\">\n        <reason>\n          <xsl:apply-templates select=\"reason\"/>\n        </reason>\n      </xsl:if>\n      <results>\n        <xsl:apply-templates select=\"test\"/>\n      </results>\n    </test-suite>\n  </xsl:template>\n\n  <xsl:template match=\"test\">\n    <test-case>\n      <xsl:attribute name=\"name\">\n        <xsl:value-of select=\"@name\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"executed\">\n        <xsl:if test=\"@result='Skip'\">False</xsl:if>\n        <xsl:if test=\"@result!='Skip'\">True</xsl:if>\n      </xsl:attribute>\n      <xsl:if test=\"@result!='Skip'\">\n        <xsl:attribute name=\"success\">\n          <xsl:if test=\"@result='Fail'\">False</xsl:if>\n          <xsl:if test=\"@result='Pass'\">True</xsl:if>\n        </xsl:attribute>\n      </xsl:if>\n      <xsl:if test=\"@time\">\n        <xsl:attribute name=\"time\">\n          <xsl:value-of select=\"@time\"/>\n        </xsl:attribute>\n      </xsl:if>\n      <xsl:apply-templates select=\"traits\"/>\n      <xsl:apply-templates select=\"failure\"/>\n    </test-case>\n  </xsl:template>\n\n  <xsl:template match=\"traits\">\n    <properties>\n      <xsl:apply-templates select=\"trait\"/>\n    </properties>\n  </xsl:template>\n\n  <xsl:template match=\"trait\">\n    <property>\n      <xsl:attribute name=\"name\">\n        <xsl:value-of select=\"@name\"/>\n      </xsl:attribute>\n      <xsl:attribute name=\"value\">\n        <xsl:value-of select=\"@value\"/>\n      </xsl:attribute>\n    </property>\n  </xsl:template>\n\n  <xsl:template match=\"failure\">\n    <failure>\n      <xsl:copy-of select=\"node()\"/>\n    </failure>\n  </xsl:template>\n\n</xsl:stylesheet>"
  },
  {
    "path": "3rdParty/xunit/xunit.console.clr4.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n\n  <configSections>\n    <section name=\"xunit\" type=\"Xunit.ConsoleClient.XunitConsoleConfigurationSection, xunit.console.clr4\"/>\n  </configSections>\n\n  <xunit>\n    <transforms>\n      <add\n        commandline=\"html\"\n        xslfile=\"HTML.xslt\"\n        description=\"output results to HTML file\"/>\n      <add\n        commandline=\"nunit\"\n        xslfile=\"NUnitXml.xslt\"\n        description=\"output results to NUnit-style XML file\"/>\n    </transforms>\n  </xunit>\n  \n</configuration>"
  },
  {
    "path": "3rdParty/xunit/xunit.console.clr4.x86.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n\n  <configSections>\n    <section name=\"xunit\" type=\"Xunit.ConsoleClient.XunitConsoleConfigurationSection, xunit.console.clr4.x86\"/>\n  </configSections>\n\n  <xunit>\n    <transforms>\n      <add\n        commandline=\"html\"\n        xslfile=\"HTML.xslt\"\n        description=\"output results to HTML file\"/>\n      <add\n        commandline=\"nunit\"\n        xslfile=\"NUnitXml.xslt\"\n        description=\"output results to NUnit-style XML file\"/>\n    </transforms>\n  </xunit>\n  \n</configuration>"
  },
  {
    "path": "3rdParty/xunit/xunit.console.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n\n  <configSections>\n    <section name=\"xunit\" type=\"Xunit.ConsoleClient.XunitConsoleConfigurationSection, xunit.console\"/>\n  </configSections>\n\n  <xunit>\n    <transforms>\n      <add\n        commandline=\"html\"\n        xslfile=\"HTML.xslt\"\n        description=\"output results to HTML file\"/>\n      <add\n        commandline=\"nunit\"\n        xslfile=\"NUnitXml.xslt\"\n        description=\"output results to NUnit-style XML file\"/>\n    </transforms>\n  </xunit>\n  \n</configuration>"
  },
  {
    "path": "3rdParty/xunit/xunit.console.x86.exe.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n\n  <configSections>\n    <section name=\"xunit\" type=\"Xunit.ConsoleClient.XunitConsoleConfigurationSection, xunit.console.x86\"/>\n  </configSections>\n\n  <xunit>\n    <transforms>\n      <add\n        commandline=\"html\"\n        xslfile=\"HTML.xslt\"\n        description=\"output results to HTML file\"/>\n      <add\n        commandline=\"nunit\"\n        xslfile=\"NUnitXml.xslt\"\n        description=\"output results to NUnit-style XML file\"/>\n    </transforms>\n  </xunit>\n  \n</configuration>"
  },
  {
    "path": "3rdParty/xunit/xunit.dll.tdnet",
    "content": "<TestRunner>\n  <FriendlyName>xUnit.net {0}.{1}.{2} build {3}</FriendlyName>\n  <AssemblyPath>xunit.runner.tdnet.dll</AssemblyPath>\n  <TypeName>Xunit.Runner.TdNet.TdNetRunner</TypeName>\n</TestRunner>"
  },
  {
    "path": "3rdParty/xunit/xunit.extensions.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>xunit.extensions</name>\n    </assembly>\n    <members>\n        <member name=\"T:Xunit.Extensions.Assertions\">\n            <summary>\n            A wrapper for Assert which is used by <see cref=\"T:Xunit.Extensions.TestClass\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Contains``1(``0,System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that a collection contains a given object.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be verified</typeparam>\n            <param name=\"expected\">The object expected to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the object is not present in the collection</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Contains``1(``0,System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that a collection contains a given object, using an equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be verified</typeparam>\n            <param name=\"expected\">The object expected to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <param name=\"comparer\">The comparer used to equate objects in the collection with the expected object</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the object is not present in the collection</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Contains(System.String,System.String)\">\n            <summary>\n            Verifies that a string contains a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string expected to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the sub-string is not present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Contains(System.String,System.String,System.StringComparison)\">\n            <summary>\n            Verifies that a string contains a given sub-string, using the given comparison type.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string expected to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <param name=\"comparisonType\">The type of string comparison to perform</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the sub-string is not present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.DoesNotContain``1(``0,System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that a collection does not contain a given object.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be compared</typeparam>\n            <param name=\"expected\">The object that is expected not to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the object is present inside the container</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.DoesNotContain``1(``0,System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that a collection does not contain a given object, using an equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be compared</typeparam>\n            <param name=\"expected\">The object that is expected not to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <param name=\"comparer\">The comparer used to equate objects in the collection with the expected object</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the object is present inside the container</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.DoesNotContain(System.String,System.String)\">\n            <summary>\n            Verifies that a string does not contain a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string which is expected not to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the sub-string is present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.DoesNotContain(System.String,System.String,System.StringComparison)\">\n            <summary>\n            Verifies that a string does not contain a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string which is expected not to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <param name=\"comparisonType\">The type of string comparison to perform</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the sub-string is present inside the given string</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.DoesNotThrow(Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that a block of code does not throw any exceptions.\n            </summary>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Empty(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that a collection is empty.\n            </summary>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown when the collection is null</exception>\n            <exception cref=\"T:Xunit.Sdk.EmptyException\">Thrown when the collection is not empty</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Equal``1(``0,``0)\">\n            <summary>\n            Verifies that two objects are equal, using a default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the objects are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Equal``1(``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that two objects are equal, using a custom equatable comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"comparer\">The comparer used to compare the two objects</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the objects are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Equal(System.Double,System.Double,System.Int32)\">\n            <summary>\n            Verifies that two <see cref=\"T:System.Double\"/> values are equal, within the number of decimal\n            places given by <paramref name=\"precision\"/>.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"precision\">The number of decimal places (valid values: 0-15)</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the values are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Equal(System.Decimal,System.Decimal,System.Int32)\">\n            <summary>\n            Verifies that two <see cref=\"T:System.Decimal\"/> values are equal, within the number of decimal\n            places given by <paramref name=\"precision\"/>.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"precision\">The number of decimal places (valid values: 0-15)</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the values are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.False(System.Boolean)\">\n            <summary>\n            Verifies that the condition is false.\n            </summary>\n            <param name=\"condition\">The condition to be tested</param>\n            <exception cref=\"T:Xunit.Sdk.FalseException\">Thrown if the condition is not false</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.False(System.Boolean,System.String)\">\n            <summary>\n            Verifies that the condition is false.\n            </summary>\n            <param name=\"condition\">The condition to be tested</param>\n            <param name=\"userMessage\">The message to show when the condition is not false</param>\n            <exception cref=\"T:Xunit.Sdk.FalseException\">Thrown if the condition is not false</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.InRange``1(``0,``0,``0)\">\n            <summary>\n            Verifies that a value is within a given range.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <exception cref=\"T:Xunit.Sdk.InRangeException\">Thrown when the value is not in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.InRange``1(``0,``0,``0,System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Verifies that a value is within a given range, using a comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <param name=\"comparer\">The comparer used to evaluate the value's range</param>\n            <exception cref=\"T:Xunit.Sdk.InRangeException\">Thrown when the value is not in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsAssignableFrom``1(System.Object)\">\n            <summary>\n            Verifies that an object is of the given type or a derived type.\n            </summary>\n            <typeparam name=\"T\">The type the object should be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <returns>The object, casted to type T when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.IsAssignableFromException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsAssignableFrom(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is of the given type or a derived type.\n            </summary>\n            <param name=\"expectedType\">The type the object should be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsAssignableFromException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsNotType``1(System.Object)\">\n            <summary>\n            Verifies that an object is not exactly the given type.\n            </summary>\n            <typeparam name=\"T\">The type the object should not be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsNotTypeException\">Thrown when the object is the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsNotType(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is not exactly the given type.\n            </summary>\n            <param name=\"expectedType\">The type the object should not be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsNotTypeException\">Thrown when the object is the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsType``1(System.Object)\">\n            <summary>\n            Verifies that an object is exactly the given type (and not a derived type).\n            </summary>\n            <typeparam name=\"T\">The type the object should be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <returns>The object, casted to type T when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.IsTypeException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.IsType(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is exactly the given type (and not a derived type).\n            </summary>\n            <param name=\"expectedType\">The type the object should be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsTypeException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotEmpty(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that a collection is not empty.\n            </summary>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown when a null collection is passed</exception>\n            <exception cref=\"T:Xunit.Sdk.NotEmptyException\">Thrown when the collection is empty</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotEqual``1(``0,``0)\">\n            <summary>\n            Verifies that two objects are not equal, using a default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected object</param>\n            <param name=\"actual\">The actual object</param>\n            <exception cref=\"T:Xunit.Sdk.NotEqualException\">Thrown when the objects are equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotEqual``1(``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that two objects are not equal, using a custom equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected object</param>\n            <param name=\"actual\">The actual object</param>\n            <param name=\"comparer\">The comparer used to examine the objects</param>\n            <exception cref=\"T:Xunit.Sdk.NotEqualException\">Thrown when the objects are equal</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotInRange``1(``0,``0,``0)\">\n            <summary>\n            Verifies that a value is not within a given range, using the default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <exception cref=\"T:Xunit.Sdk.NotInRangeException\">Thrown when the value is in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotInRange``1(``0,``0,``0,System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Verifies that a value is not within a given range, using a comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <param name=\"comparer\">The comparer used to evaluate the value's range</param>\n            <exception cref=\"T:Xunit.Sdk.NotInRangeException\">Thrown when the value is in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotNull(System.Object)\">\n            <summary>\n            Verifies that an object reference is not null.\n            </summary>\n            <param name=\"object\">The object to be validated</param>\n            <exception cref=\"T:Xunit.Sdk.NotNullException\">Thrown when the object is not null</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.NotSame(System.Object,System.Object)\">\n            <summary>\n            Verifies that two objects are not the same instance.\n            </summary>\n            <param name=\"expected\">The expected object instance</param>\n            <param name=\"actual\">The actual object instance</param>\n            <exception cref=\"T:Xunit.Sdk.NotSameException\">Thrown when the objects are the same instance</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Null(System.Object)\">\n            <summary>\n            Verifies that an object reference is null.\n            </summary>\n            <param name=\"object\">The object to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.NullException\">Thrown when the object reference is not null</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Same(System.Object,System.Object)\">\n            <summary>\n            Verifies that two objects are the same instance.\n            </summary>\n            <param name=\"expected\">The expected object instance</param>\n            <param name=\"actual\">The actual object instance</param>\n            <exception cref=\"T:Xunit.Sdk.SameException\">Thrown when the objects are not the same instance</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Single(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given type.\n            </summary>\n            <param name=\"collection\">The collection.</param>\n            <returns>The single item in the collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the collection does not contain\n            exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Single``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given type.\n            </summary>\n            <typeparam name=\"T\">The collection type.</typeparam>\n            <param name=\"collection\">The collection.</param>\n            <returns>The single item in the collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the collection does not contain\n            exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Throws``1(Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            </summary>\n            <typeparam name=\"T\">The type of the exception expected to be thrown</typeparam>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Throws``1(Xunit.Assert.ThrowsDelegateWithReturn)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            Generally used to test property accessors.\n            </summary>\n            <typeparam name=\"T\">The type of the exception expected to be thrown</typeparam>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Throws(System.Type,Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            </summary>\n            <param name=\"exceptionType\">The type of the exception expected to be thrown</param>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.Throws(System.Type,Xunit.Assert.ThrowsDelegateWithReturn)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            Generally used to test property accessors.\n            </summary>\n            <param name=\"exceptionType\">The type of the exception expected to be thrown</param>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.True(System.Boolean)\">\n            <summary>\n            Verifies that an expression is true.\n            </summary>\n            <param name=\"condition\">The condition to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.TrueException\">Thrown when the condition is false</exception>\n        </member>\n        <member name=\"M:Xunit.Extensions.Assertions.True(System.Boolean,System.String)\">\n            <summary>\n            Verifies that an expression is true.\n            </summary>\n            <param name=\"condition\">The condition to be inspected</param>\n            <param name=\"userMessage\">The message to be shown when the condition is false</param>\n            <exception cref=\"T:Xunit.Sdk.TrueException\">Thrown when the condition is false</exception>\n        </member>\n        <member name=\"T:Xunit.Extensions.TestClass\">\n            <summary>\n            A class which can be derived from for test classes, which bring an overridable version\n            of Assert (using the <see cref=\"T:Xunit.Extensions.Assertions\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.TestClass.Assert\">\n            <summary>\n            Gets a class which provides assertions.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.AssumeIdentityAttribute\">\n            <summary>\n            Apply this attribute to your test method to replace the \n            <see cref=\"P:System.Threading.Thread.CurrentPrincipal\"/> with another role.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.AssumeIdentityAttribute.#ctor(System.String)\">\n            <summary>\n            Replaces the identity of the current thread with <paramref name=\"name\"/>.\n            </summary>\n            <param name=\"name\">The role's name</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.AssumeIdentityAttribute.After(System.Reflection.MethodInfo)\">\n            <summary>\n            Restores the original <see cref=\"P:System.Threading.Thread.CurrentPrincipal\"/>.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.AssumeIdentityAttribute.Before(System.Reflection.MethodInfo)\">\n            <summary>\n            Stores the current <see cref=\"P:System.Threading.Thread.CurrentPrincipal\"/> and replaces it with\n            a new role identified in constructor.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"P:Xunit.Extensions.AssumeIdentityAttribute.Name\">\n            <summary>\n            Gets the name.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.AutoRollbackAttribute\">\n            <summary>\n            Apply this attribute to your test method to automatically create a\n            <see cref=\"T:System.Transactions.TransactionScope\"/> that is rolled back when the test is\n            finished.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.AutoRollbackAttribute.After(System.Reflection.MethodInfo)\">\n            <summary>\n            Rolls back the transaction.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.AutoRollbackAttribute.Before(System.Reflection.MethodInfo)\">\n            <summary>\n            Creates the transaction.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.AutoRollbackAttribute.IsolationLevel\">\n            <summary>\n            Gets or sets the isolation level of the transaction.\n            Default value is <see cref=\"P:Xunit.Extensions.AutoRollbackAttribute.IsolationLevel\"/>.Unspecified.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.AutoRollbackAttribute.ScopeOption\">\n            <summary>\n            Gets or sets the scope option for the transaction.\n            Default value is <see cref=\"T:System.Transactions.TransactionScopeOption\"/>.Required.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.AutoRollbackAttribute.TimeoutInMS\">\n            <summary>\n            Gets or sets the timeout of the transaction, in milliseconds.\n            By default, the transaction will not timeout.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.ClassDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming from a class\n            which must implement IEnumerable&lt;object[]&gt;.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.DataAttribute\">\n            <summary>\n            Abstract attribute which represents a data source for a data theory.\n            Data source providers derive from this attribute and implement GetData\n            to return the data for the theory.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.DataAttribute.GetData(System.Reflection.MethodInfo,System.Type[])\">\n            <summary>\n            Returns the data to be used to test the theory.\n            </summary>\n            <remarks>\n            The <paramref name=\"parameterTypes\"/> parameter is provided so that the\n            test data can be converted to the destination parameter type when necessary.\n            Generally, data should NOT be automatically converted, UNLESS the source data\n            format does not have rich types (for example, all numbers in Excel spreadsheets\n            are returned as <see cref=\"T:System.Double\"/> even if they are integers). Derivers of\n            this class should NOT throw exceptions for mismatched types or mismatched number\n            of parameters; the test framework will throw these exceptions at the correct\n            time.\n            </remarks>\n            <param name=\"methodUnderTest\">The method that is being tested</param>\n            <param name=\"parameterTypes\">The types of the parameters for the test method</param>\n            <returns>The theory data</returns>\n        </member>\n        <member name=\"P:Xunit.Extensions.DataAttribute.TypeId\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Extensions.ClassDataAttribute.#ctor(System.Type)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Extensions.ClassDataAttribute\"/> class.\n            </summary>\n            <param name=\"class\">The class that provides the data.</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.ClassDataAttribute.GetData(System.Reflection.MethodInfo,System.Type[])\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Extensions.ClassDataAttribute.Class\">\n            <summary>\n            Gets the type of the class that provides the data.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.DataAdapterDataAttribute\">\n            <summary>\n            Represents an implementation of <see cref=\"T:Xunit.Extensions.DataAttribute\"/> which uses an\n            instance of <see cref=\"T:System.Data.IDataAdapter\"/> to get the data for a <see cref=\"T:Xunit.Extensions.TheoryAttribute\"/>\n            decorated test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.DataAdapterDataAttribute.GetData(System.Reflection.MethodInfo,System.Type[])\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Extensions.DataAdapterDataAttribute.ConvertParameter(System.Object,System.Type)\">\n            <summary>\n            Converts a parameter to its destination parameter type, if necessary.\n            </summary>\n            <param name=\"parameter\">The parameter value</param>\n            <param name=\"parameterType\">The destination parameter type (null if not known)</param>\n            <returns>The converted parameter value</returns>\n        </member>\n        <member name=\"P:Xunit.Extensions.DataAdapterDataAttribute.DataAdapter\">\n            <summary>\n            Gets the data adapter to be used to retrieve the test data.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.InlineDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming from inline values.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.InlineDataAttribute.#ctor(System.Object[])\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Extensions.InlineDataAttribute\"/> class.\n            </summary>\n            <param name=\"dataValues\">The data values to pass to the theory</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.InlineDataAttribute.GetData(System.Reflection.MethodInfo,System.Type[])\">\n            <summary>\n            Returns the data to be used to test the theory.\n            </summary>\n            <param name=\"methodUnderTest\">The method that is being tested</param>\n            <param name=\"parameterTypes\">The types of the parameters for the test method</param>\n            <returns>The theory data, in table form</returns>\n        </member>\n        <member name=\"P:Xunit.Extensions.InlineDataAttribute.DataValues\">\n            <summary>\n            Gets the data values.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.OleDbDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming from an OLEDB connection.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.OleDbDataAttribute.#ctor(System.String,System.String)\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.OleDbDataAttribute\"/>.\n            </summary>\n            <param name=\"connectionString\">The OLEDB connection string to the data</param>\n            <param name=\"selectStatement\">The SELECT statement used to return the data for the theory</param>\n        </member>\n        <member name=\"P:Xunit.Extensions.OleDbDataAttribute.ConnectionString\">\n            <summary>\n            Gets the connection string.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.OleDbDataAttribute.SelectStatement\">\n            <summary>\n            Gets the select statement.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.OleDbDataAttribute.DataAdapter\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Extensions.PropertyDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming from a public static property on the test class.\n            The property must return IEnumerable&lt;object[]&gt; with the test data.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.PropertyDataAttribute.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.PropertyDataAttribute\"/>/\n            </summary>\n            <param name=\"propertyName\">The name of the public static property on the test class that will provide the test data</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.PropertyDataAttribute.GetData(System.Reflection.MethodInfo,System.Type[])\">\n            <summary>\n            Returns the data to be used to test the theory.\n            </summary>\n            <param name=\"methodUnderTest\">The method that is being tested</param>\n            <param name=\"parameterTypes\">The types of the parameters for the test method</param>\n            <returns>The theory data, in table form</returns>\n        </member>\n        <member name=\"P:Xunit.Extensions.PropertyDataAttribute.PropertyName\">\n            <summary>\n            Gets the property name.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.SqlServerDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming a Microsoft SQL Server.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.SqlServerDataAttribute.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.SqlServerDataAttribute\"/>, using a trusted connection.\n            </summary>\n            <param name=\"serverName\">The server name of the Microsoft SQL Server</param>\n            <param name=\"databaseName\">The database name</param>\n            <param name=\"selectStatement\">The SQL SELECT statement to return the data for the data theory</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.SqlServerDataAttribute.#ctor(System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.SqlServerDataAttribute\"/>, using the provided username and password.\n            </summary>\n            <param name=\"serverName\">The server name of the Microsoft SQL Server</param>\n            <param name=\"databaseName\">The database name</param>\n            <param name=\"username\">The username for the server</param>\n            <param name=\"password\">The password for the server</param>\n            <param name=\"selectStatement\">The SQL SELECT statement to return the data for the data theory</param>\n        </member>\n        <member name=\"T:Xunit.Extensions.ExcelDataAttribute\">\n            <summary>\n            Provides a data source for a data theory, with the data coming a Microsoft Excel (.xls) spreadsheet.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.ExcelDataAttribute.#ctor(System.String,System.String)\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.ExcelDataAttribute\"/>.\n            </summary>\n            <param name=\"filename\">The filename of the XLS spreadsheet file; if the filename provided\n            is relative, then it is relative to the location of xunit.extensions.dll.</param>\n            <param name=\"selectStatement\">The SELECT statement that returns the data for the theory</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.ExcelDataAttribute.ConvertParameter(System.Object,System.Type)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Extensions.Clock\">\n            <summary>\n            A wrapper around the static operations on <see cref=\"T:System.DateTime\"/> which allows time\n            to be frozen using the <see cref=\"T:Xunit.Extensions.FreezeClockAttribute\"/>. The clock begins in the\n            thawed state; that is, calls to <see cref=\"P:Xunit.Extensions.Clock.Now\"/>, <see cref=\"P:Xunit.Extensions.Clock.Today\"/>, and\n            <see cref=\"P:Xunit.Extensions.Clock.UtcNow\"/> return current (non-frozen) values.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.Clock.Freeze\">\n            <summary>\n            Freezes the clock with the current time.\n            Until <see cref=\"M:Xunit.Extensions.Clock.Thaw\"/> is called, all calls to <see cref=\"P:Xunit.Extensions.Clock.Now\"/>, <see cref=\"P:Xunit.Extensions.Clock.Today\"/>, and\n            <see cref=\"P:Xunit.Extensions.Clock.UtcNow\"/> will return the exact same values.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.Clock.FreezeLocal(System.DateTime)\">\n            <summary>\n            Freezes the clock with the given date and time, considered to be local time.\n            Until <see cref=\"M:Xunit.Extensions.Clock.Thaw\"/> is called, all calls to <see cref=\"P:Xunit.Extensions.Clock.Now\"/>, <see cref=\"P:Xunit.Extensions.Clock.Today\"/>, and\n            <see cref=\"P:Xunit.Extensions.Clock.UtcNow\"/> will return the exact same values.\n            </summary>\n            <param name=\"localDateTime\">The local date and time to freeze to</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.Clock.FreezeUtc(System.DateTime)\">\n            <summary>\n            Freezes the clock with the given date and time, considered to be Coordinated Universal Time (UTC).\n            Until <see cref=\"M:Xunit.Extensions.Clock.Thaw\"/> is called, all calls to <see cref=\"P:Xunit.Extensions.Clock.Now\"/>, <see cref=\"P:Xunit.Extensions.Clock.Today\"/>, and\n            <see cref=\"P:Xunit.Extensions.Clock.UtcNow\"/> will return the exact same values.\n            </summary>\n            <param name=\"utcDateTime\">The UTC date and time to freeze to</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.Clock.Thaw\">\n            <summary>\n            Thaws the clock so that <see cref=\"P:Xunit.Extensions.Clock.Now\"/>, <see cref=\"P:Xunit.Extensions.Clock.Today\"/>, and <see cref=\"P:Xunit.Extensions.Clock.UtcNow\"/>\n            return normal values.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.Clock.Now\">\n            <summary>\n            Gets a <see cref=\"T:System.DateTime\"/> object that is set to the current date and time on this computer,\n            expressed as the local time.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.Clock.Today\">\n            <summary>\n            Gets the current date.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Extensions.Clock.UtcNow\">\n            <summary>\n            Gets a <see cref=\"T:System.DateTime\"/> object that is set to the current date and time on this computer,\n            expressed as the Coordinated Universal Time (UTC).\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.FreezeClockAttribute\">\n            <summary>\n            Apply this attribute to your test method to freeze the time represented by the\n            <see cref=\"T:Xunit.Extensions.Clock\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.#ctor\">\n            <summary>\n            Freeze the clock with the current date and time.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.#ctor(System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Freeze the clock with the given date, considered to be local time.\n            </summary>\n            <param name=\"year\">The frozen year</param>\n            <param name=\"month\">The frozen month</param>\n            <param name=\"day\">The frozen day</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)\">\n            <summary>\n            Freeze the clock with the given date and time, considered to be in local time.\n            </summary>\n            <param name=\"year\">The frozen year</param>\n            <param name=\"month\">The frozen month</param>\n            <param name=\"day\">The frozen day</param>\n            <param name=\"hour\">The frozen hour</param>\n            <param name=\"minute\">The frozen minute</param>\n            <param name=\"second\">The frozen second</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.DateTimeKind)\">\n            <summary>\n            Freeze the clock with the given date and time, with the given kind of time.\n            </summary>\n            <param name=\"year\">The frozen year</param>\n            <param name=\"month\">The frozen month</param>\n            <param name=\"day\">The frozen day</param>\n            <param name=\"hour\">The frozen hour</param>\n            <param name=\"minute\">The frozen minute</param>\n            <param name=\"second\">The frozen second</param>\n            <param name=\"kind\">The frozen time kind</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.After(System.Reflection.MethodInfo)\">\n            <summary>\n            Thaws the clock.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.FreezeClockAttribute.Before(System.Reflection.MethodInfo)\">\n            <summary>\n            Freezes the clock.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"T:Xunit.Extensions.TheoryAttribute\">\n            <summary>\n            Marks a test method as being a data theory. Data theories are tests which are fed\n            various bits of data from a data source, mapping to parameters on the test method.\n            If the data source contains multiple rows, then the test method is executed\n            multiple times (once with each data row).\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.TheoryAttribute.EnumerateTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Creates instances of <see cref=\"T:Xunit.Extensions.TheoryCommand\"/> which represent individual intended\n            invocations of the test method, one per data row in the data source.\n            </summary>\n            <param name=\"method\">The method under test</param>\n            <returns>An enumerator through the desired test method invocations</returns>\n        </member>\n        <member name=\"T:Xunit.Extensions.TheoryCommand\">\n            <summary>\n            Represents a single invocation of a data theory test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.TheoryCommand.#ctor(Xunit.Sdk.IMethodInfo,System.Object[])\">\n            <summary>\n            Creates a new instance of <see cref=\"T:Xunit.Extensions.TheoryCommand\"/>.\n            </summary>\n            <param name=\"testMethod\">The method under test</param>\n            <param name=\"parameters\">The parameters to be passed to the test method</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.TheoryCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Extensions.TheoryCommand.Parameters\">\n            <summary>\n            Gets the parameter values that are passed to the test method.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Extensions.TraceAttribute\">\n            <summary>\n            Apply to a test method to trace the method begin and end.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Extensions.TraceAttribute.Before(System.Reflection.MethodInfo)\">\n            <summary>\n            This method is called before the test method is executed.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.Extensions.TraceAttribute.After(System.Reflection.MethodInfo)\">\n            <summary>\n            This method is called after the test method is executed.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "3rdParty/xunit/xunit.runner.utility.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>xunit.runner.utility</name>\n    </assembly>\n    <members>\n        <member name=\"T:Xunit.Sdk.Guard\">\n            <summary>\n            Guard class, used for guard clauses and argument validation\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentNotNull(System.String,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentNotNullOrEmpty(System.String,System.Collections.IEnumerable)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentValid(System.String,System.String,System.Boolean)\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper\">\n            <summary>\n            Wraps calls to the Executor. Used by runners to perform version-resilient test\n            enumeration and execution.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.IExecutorWrapper\">\n            <summary>\n            Wraps calls to the Executor. Used by runners to perform version-resilient test\n            enumeration and execution.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.EnumerateTests\">\n            <summary>\n            Enumerates the tests in an assembly.\n            </summary>\n            <returns>The fully-formed assembly node of the XML</returns>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.GetAssemblyTestCount\">\n            <summary>\n            Gets a count of the tests in the assembly.\n            </summary>\n            <returns>Returns the number of tests, if known; returns -1 if not known. May not represent\n            an exact count, but should be a best effort guess by the framework.</returns>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.RunAssembly(System.Predicate{System.Xml.XmlNode})\">\n            <summary>\n            Runs all the tests in an assembly.\n            </summary>\n            <param name=\"callback\">The callback which is called as each test/class/assembly is\n            finished, providing XML nodes that are part of the xUnit.net XML output format.\n            Test runs can be cancelled by returning false to the callback. If null, there are\n            no status callbacks (and cancellation isn't possible).</param>\n            <returns>Returns the fully-formed assembly node for the assembly that was just run.</returns>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.RunClass(System.String,System.Predicate{System.Xml.XmlNode})\">\n            <summary>\n            Runs all the tests in the given class.\n            </summary>\n            <param name=\"type\">The type.</param>\n            <param name=\"callback\">The callback which is called as each test/class is\n            finished, providing XML nodes that are part of the xUnit.net XML output format.\n            Test runs can be cancelled by returning false to the callback. If null, there are\n            no status callbacks (and cancellation isn't possible).</param>\n            <returns>Returns the fully-formed class node for the class that was just run.</returns>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.RunTest(System.String,System.String,System.Predicate{System.Xml.XmlNode})\">\n            <summary>\n            Runs a single test in a class.\n            </summary>\n            <param name=\"type\">The type to run.</param>\n            <param name=\"method\">The method to run.</param>\n            <param name=\"callback\">The callback which is called as each test/class is\n            finished, providing XML nodes that are part of the xUnit.net XML output format.\n            Test runs can be cancelled by returning false to the callback. If null, there are\n            no status callbacks (and cancellation isn't possible).</param>\n            <returns>Returns the fully-formed class node for the class of the test that was just run.</returns>\n        </member>\n        <member name=\"M:Xunit.IExecutorWrapper.RunTests(System.String,System.Collections.Generic.List{System.String},System.Predicate{System.Xml.XmlNode})\">\n            <summary>\n            Runs several tests in a single class.\n            </summary>\n            <param name=\"type\">The type.</param>\n            <param name=\"methods\">The methods to run.</param>\n            <param name=\"callback\">The callback which is called as each test/class is\n            finished, providing XML nodes that are part of the xUnit.net XML output format.\n            Test runs can be cancelled by returning false to the callback. If null, there are\n            no status callbacks (and cancellation isn't possible).</param>\n            <returns>Returns the fully-formed class node for the class of the tests that were just run.</returns>\n        </member>\n        <member name=\"P:Xunit.IExecutorWrapper.AssemblyFilename\">\n            <summary>\n            Gets the full pathname to the assembly under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.IExecutorWrapper.ConfigFilename\">\n            <summary>\n            Gets the full pathname to the configuration file.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.IExecutorWrapper.XunitVersion\">\n            <summary>\n            Gets the version of xunit.dll used by the test assembly.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.#cctor\">\n            <summary>\n            Initializes the <see cref=\"T:Xunit.ExecutorWrapper\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.#ctor(System.String,System.String,System.Boolean)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.ExecutorWrapper\"/> class.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"configFilename\">The config filename. If null, the default config filename will be used.</param>\n            <param name=\"shadowCopy\">Set to true to enable shadow copying; false, otherwise.</param>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.Dispose\">\n            <summary>\n            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.EnumerateTests\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.GetAssemblyTestCount\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.RunAssembly(System.Predicate{System.Xml.XmlNode})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.RunClass(System.String,System.Predicate{System.Xml.XmlNode})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.RunTest(System.String,System.String,System.Predicate{System.Xml.XmlNode})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.RunTests(System.String,System.Collections.Generic.List{System.String},System.Predicate{System.Xml.XmlNode})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.AssemblyFilename\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.ConfigFilename\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.XunitVersion\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.IntCallbackHandler\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandler.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.IntCallbackHandler.Result\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.IntCallbackHandlerWithIMessageSink\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#AsyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage,System.Runtime.Remoting.Messaging.IMessageSink)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage)\">\n            <summary/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.IntCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#NextSink\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.IntCallbackHandlerWithICallbackEventHandler\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandlerWithICallbackEventHandler.GetCallbackResult\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandlerWithICallbackEventHandler.RaiseCallbackEvent(System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.IntCallbackHandlerWithICallbackEventHandler.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.XmlNodeCallbackHandler\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"F:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.callback\">\n            <summary/>\n        </member>\n        <member name=\"F:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.lastNodeName\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.#ctor(System.Predicate{System.Xml.XmlNode},System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.LastNode\">\n            <summary/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.XmlNodeCallbackHandler.LastNodeArrived\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithIMessageSink\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithIMessageSink.#ctor(System.Predicate{System.Xml.XmlNode},System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#AsyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage,System.Runtime.Remoting.Messaging.IMessageSink)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage)\">\n            <summary/>\n        </member>\n        <member name=\"P:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithIMessageSink.System#Runtime#Remoting#Messaging#IMessageSink#NextSink\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithICallbackEventHandler\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithICallbackEventHandler.#ctor(System.Predicate{System.Xml.XmlNode},System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithICallbackEventHandler.RaiseCallbackEvent(System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.XmlNodeCallbackHandlerWithICallbackEventHandler.GetCallbackResult\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ExecutorWrapper.OutgoingMessage\">\n            <summary>\n            THIS CLASS IS FOR INTERNAL USE ONLY.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.OutgoingMessage.#ctor(System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.ExecutorWrapper.OutgoingMessage.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.ITestMethodRunnerCallback\">\n            <summary>\n            The callback object which receives real-time status notifications from the\n            test runner.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.AssemblyFinished(Xunit.TestAssembly,System.Int32,System.Int32,System.Int32,System.Double)\">\n            <summary>\n            Called when the assembly has finished running.\n            </summary>\n            <param name=\"testAssembly\">The test assembly.</param>\n            <param name=\"total\">The total number of tests run.</param>\n            <param name=\"failed\">The number of failed tests.</param>\n            <param name=\"skipped\">The number of skipped tests.</param>\n            <param name=\"time\">The time taken to run, in seconds.</param>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.AssemblyStart(Xunit.TestAssembly)\">\n            <summary>\n            Called when the assembly has started running.\n            </summary>\n            <param name=\"testAssembly\">The test assembly.</param>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.ClassFailed(Xunit.TestClass,System.String,System.String,System.String)\">\n            <summary>\n            Called when a class failure is encountered (i.e., when a fixture from\n            IUseFixture throws an exception during construction or <see cref=\"M:System.IDisposable.Dispose\"/>.\n            </summary>\n            <param name=\"testClass\">The test class.</param>\n            <param name=\"exceptionType\">The full type name of the exception.</param>\n            <param name=\"message\">The exception message.</param>\n            <param name=\"stackTrace\">The exception stack trace.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.ExceptionThrown(Xunit.TestAssembly,System.Exception)\">\n            <summary>\n            Called when an exception is thrown (i.e., a catastrophic failure of the testing system).\n            </summary>\n            <param name=\"testAssembly\">The test assembly.</param>\n            <param name=\"exception\">The exception that was thrown.</param>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.TestFinished(Xunit.TestMethod)\">\n            <summary>\n            Called when a test has finished running, regardless of what the result was.\n            </summary>\n            <param name=\"testMethod\">The test method.</param>\n            <returns>Return true to continue running tests; return false to stop the test run.</returns>\n        </member>\n        <member name=\"M:Xunit.ITestMethodRunnerCallback.TestStart(Xunit.TestMethod)\">\n            <summary>\n            Called when a test has started running.\n            </summary>\n            <param name=\"testMethod\">The test method.</param>\n            <returns>Return true to continue running tests; return false to stop the test run.</returns>\n        </member>\n        <member name=\"T:Xunit.MultiAssemblyTestEnvironment\">\n            <summary>\n            Represents the ability to load and unload test assemblies, as well as enumerate\n            the test assemblies, the test methods, and run tests.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.ITestMethodEnumerator\">\n            <summary>\n            Represents the ability to enumerate and filter test methods.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ITestMethodEnumerator.EnumerateTestMethods\">\n            <summary>\n            Enumerates all test methods.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ITestMethodEnumerator.EnumerateTestMethods(System.Predicate{Xunit.TestMethod})\">\n            <summary>\n            Enumerates test methods which pass the given filter.\n            </summary>\n            <param name=\"filter\">The test method filter.</param>\n        </member>\n        <member name=\"F:Xunit.MultiAssemblyTestEnvironment.testAssemblies\">\n            <summary>\n            The test assemblies loaded into the environment.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Dispose\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.EnumerateTestAssemblies\">\n            <summary>\n            Enumerates the test assemblies in the environment.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.EnumerateTestMethods\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.EnumerateTestMethods(System.Predicate{Xunit.TestMethod})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.EnumerateTraits\">\n            <summary>\n            Enumerates the traits across all the loaded assemblies.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Load(System.String)\">\n            <summary>\n            Loads the specified assembly, using the default configuration file.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <returns>The <see cref=\"T:Xunit.TestAssembly\"/> which represents the newly\n            loaded test assembly.</returns>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Load(System.String,System.String)\">\n            <summary>\n            Loads the specified assembly using the specified configuration file.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"configFilename\">The config filename.</param>\n            <returns>The <see cref=\"T:Xunit.TestAssembly\"/> which represents the newly\n            loaded test assembly.</returns>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Load(System.String,System.String,System.Boolean)\">\n            <summary>\n            Loads the specified assembly using the specified configuration file.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"configFilename\">The config filename.</param>\n            <param name=\"shadowCopy\">Whether the DLLs should be shadow copied.</param>\n            <returns>The <see cref=\"T:Xunit.TestAssembly\"/> which represents the newly\n            loaded test assembly.</returns>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Load(Xunit.IExecutorWrapper)\">\n            <summary>\n            Adds the assembly loaded into the given <see cref=\"T:Xunit.IExecutorWrapper\"/>\n            into the environment.\n            </summary>\n            <param name=\"executorWrapper\">The executor wrapper.</param>\n            <returns>The <see cref=\"T:Xunit.TestAssembly\"/> which represents the newly\n            loaded test assembly.</returns>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Run(System.Collections.Generic.IEnumerable{Xunit.TestMethod},Xunit.ITestMethodRunnerCallback)\">\n            <summary>\n            Runs the specified test methods.\n            </summary>\n            <param name=\"testMethods\">The test methods to run.</param>\n            <param name=\"callback\">The run status information callback.</param>\n            <returns>Returns the result as XML.</returns>\n        </member>\n        <member name=\"M:Xunit.MultiAssemblyTestEnvironment.Unload(Xunit.TestAssembly)\">\n            <summary>\n            Unloads the specified assembly.\n            </summary>\n            <param name=\"assembly\">The assembly to unload.</param>\n        </member>\n        <member name=\"T:Xunit.TestFailedResult\">\n            <summary>\n            Represents a failed test run in the object model.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestResult\">\n            <summary>\n            Base class for all test results in the object model.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestResult.#ctor(System.Double,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestResult\"/> class.\n            </summary>\n            <param name=\"duration\">The duration the test took to run. For skipped tests, should be 0.0.</param>\n            <param name=\"displayName\">The display name of the test result.</param>\n        </member>\n        <member name=\"P:Xunit.TestResult.DisplayName\">\n            <summary>\n            Gets the display name of the test result.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestResult.Duration\">\n            <summary>\n            Gets the duration the test took to run.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestFailedResult.#ctor(System.Double,System.String,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestFailedResult\"/> class.\n            </summary>\n            <param name=\"duration\">The duration the test took to run.</param>\n            <param name=\"displayName\">The display name of the test result.</param>\n            <param name=\"output\">The output that was captured during the test run.</param>\n            <param name=\"exceptionType\">Type of the exception.</param>\n            <param name=\"exceptionMessage\">The exception message.</param>\n            <param name=\"exceptionStackTrace\">The exception stack trace.</param>\n        </member>\n        <member name=\"P:Xunit.TestFailedResult.Output\">\n            <summary>\n            Gets the output that was captured during the test run.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestFailedResult.ExceptionType\">\n            <summary>\n            Gets the type of the exception.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestFailedResult.ExceptionMessage\">\n            <summary>\n            Gets the exception message.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestFailedResult.ExceptionStackTrace\">\n            <summary>\n            Gets the exception stack trace.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestSkippedResult\">\n            <summary>\n            Represents a skipped test run in the object model.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestSkippedResult.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestSkippedResult\"/> class.\n            </summary>\n            <param name=\"displayName\">The display name of the test result.</param>\n            <param name=\"reason\">The skip reason.</param>\n        </member>\n        <member name=\"P:Xunit.TestSkippedResult.Reason\">\n            <summary>\n            Gets the skip reason.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestClassCallbackDispatcher\">\n            <summary>\n            Acts as an <see cref=\"T:Xunit.IRunnerLogger\"/> and adapts the callback messages\n            into calls to an instance of <see cref=\"T:Xunit.ITestMethodRunnerCallback\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.IRunnerLogger\">\n            <summary>\n            Represents a logger used by <see cref=\"T:Xunit.TestRunner\"/> and <see cref=\"T:Xunit.XmlLoggerAdapter\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.AssemblyFinished(System.String,System.Int32,System.Int32,System.Int32,System.Double)\">\n            <summary>\n            Called when the assembly has finished running.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"total\">The total number of tests run.</param>\n            <param name=\"failed\">The number of failed tests.</param>\n            <param name=\"skipped\">The number of skipped tests.</param>\n            <param name=\"time\">The time taken to run, in seconds.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.AssemblyStart(System.String,System.String,System.String)\">\n            <summary>\n            Called when the assembly has started running.\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"configFilename\">The configuration filename, if given; null, otherwise.</param>\n            <param name=\"xUnitVersion\">The version of xunit.dll.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.ClassFailed(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Called when a class failure is encountered (i.e., when a fixture from\n            IUseFixture throws an exception during construction or <see cref=\"M:System.IDisposable.Dispose\"/>.\n            </summary>\n            <param name=\"className\">The full type name of the class.</param>\n            <param name=\"exceptionType\">The full type name of the exception.</param>\n            <param name=\"message\">The exception message.</param>\n            <param name=\"stackTrace\">The exception stack trace.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.ExceptionThrown(System.String,System.Exception)\">\n            <summary>\n            Called when an exception is thrown (i.e., a catastrophic failure of the testing system).\n            </summary>\n            <param name=\"assemblyFilename\">The assembly filename.</param>\n            <param name=\"exception\">The exception that was thrown.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.TestFailed(System.String,System.String,System.String,System.Double,System.String,System.String,System.String,System.String)\">\n            <summary>\n            Called when a test fails.\n            </summary>\n            <param name=\"name\">The description name of the test.</param>\n            <param name=\"type\">The full type name of the test class.</param>\n            <param name=\"method\">The name of the method.</param>\n            <param name=\"duration\">The time spent running the test, in seconds.</param>\n            <param name=\"output\">The output of the test during its run.</param>\n            <param name=\"exceptionType\">The full type name of the exception.</param>\n            <param name=\"message\">The exception message.</param>\n            <param name=\"stackTrace\">The exception stack trace.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.TestFinished(System.String,System.String,System.String)\">\n            <summary>\n            Called when a test has finished running, regardless of what the result was.\n            </summary>\n            <param name=\"name\">The description name of the test.</param>\n            <param name=\"type\">The full type name of the test class.</param>\n            <param name=\"method\">The name of the method.</param>\n            <returns>Return true to continue running tests; return false to stop the test run.</returns>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.TestPassed(System.String,System.String,System.String,System.Double,System.String)\">\n            <summary>\n            Called when a test has passed.\n            </summary>\n            <param name=\"name\">The description name of the test.</param>\n            <param name=\"type\">The full type name of the test class.</param>\n            <param name=\"method\">The name of the method.</param>\n            <param name=\"duration\">The time spent running the test, in seconds.</param>\n            <param name=\"output\">The output of the test during its run.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.TestSkipped(System.String,System.String,System.String,System.String)\">\n            <summary>\n            Called when a test was finished.\n            </summary>\n            <param name=\"name\">The description name of the test.</param>\n            <param name=\"type\">The full type name of the test class.</param>\n            <param name=\"method\">The name of the method.</param>\n            <param name=\"reason\">The skip reason.</param>\n        </member>\n        <member name=\"M:Xunit.IRunnerLogger.TestStart(System.String,System.String,System.String)\">\n            <summary>\n            Called when a test has started running.\n            </summary>\n            <param name=\"name\">The description name of the test.</param>\n            <param name=\"type\">The full type name of the test class.</param>\n            <param name=\"method\">The name of the method.</param>\n            <returns>Return true to continue running tests; return false to stop the test run.</returns>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.#ctor(Xunit.TestClass,Xunit.ITestMethodRunnerCallback)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestClassCallbackDispatcher\"/> class.\n            </summary>\n            <param name=\"testClass\">The test class.</param>\n            <param name=\"callback\">The run status information callback.</param>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.AssemblyFinished(System.String,System.Int32,System.Int32,System.Int32,System.Double)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.AssemblyStart(System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.ClassFailed(System.String,System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.ExceptionThrown(System.String,System.Exception)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.TestFailed(System.String,System.String,System.String,System.Double,System.String,System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.TestFinished(System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.TestPassed(System.String,System.String,System.String,System.Double,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.TestSkipped(System.String,System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClassCallbackDispatcher.TestStart(System.String,System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.TestPassedResult\">\n            <summary>\n            Represents a passed test run in the object model.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestPassedResult.#ctor(System.Double,System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestPassedResult\"/> class.\n            </summary>\n            <param name=\"duration\">The duration the test took to run.</param>\n            <param name=\"displayName\">The display name of the test result.</param>\n            <param name=\"output\">The output that was captured during the test run.</param>\n        </member>\n        <member name=\"P:Xunit.TestPassedResult.Output\">\n            <summary>\n            Gets the output that was captured during the test run.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestStatus\">\n            <summary>\n            Indicates the composite test method status\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestStatus.NotRun\">\n            <summary>\n            The method has not been run\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestStatus.Passed\">\n            <summary>\n            All test results for the last run passed\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestStatus.Failed\">\n            <summary>\n            At least one test result for the last run failed\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestStatus.Skipped\">\n            <summary>\n            At least one test result for the last run was skipped, and none failed\n            </summary>\n        </member>\n        <member name=\"T:Xunit.XunitFilters\">\n            <summary>\n            Represents a set of filters for an <see cref=\"T:Xunit.XunitProject\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitFilters.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.XunitFilters\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitFilters.Filter(Xunit.TestMethod)\">\n            <summary>\n            Filters the given methods using the defined filter values.\n            </summary>\n            <param name=\"methods\">The methods to filter.</param>\n            <returns>The filtered methods.</returns>\n        </member>\n        <member name=\"P:Xunit.XunitFilters.ExcludedTraits\">\n            <summary>\n            Gets the set of trait filters for tests to exclude.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitFilters.IncludedTraits\">\n            <summary>\n            Gets the set of trait filters for tests to include.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.XunitProject\">\n            <summary>\n            Represents an xUnit Test Project file (.xunit file)\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitProject.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.XunitProject\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitProject.AddAssembly(Xunit.XunitProjectAssembly)\">\n            <summary>\n            Adds an assembly to the project\n            </summary>\n            <param name=\"assembly\">The assembly to be added</param>\n        </member>\n        <member name=\"M:Xunit.XunitProject.Load(System.String)\">\n            <summary>\n            Loads an xUnit.net Test Project file from disk.\n            </summary>\n            <param name=\"filename\">The test project filename</param>\n        </member>\n        <member name=\"M:Xunit.XunitProject.RemoveAssembly(Xunit.XunitProjectAssembly)\">\n            <summary>\n            Removes assembly from the assembly list\n            </summary>\n            <param name=\"assembly\">The assembly to be removed</param>\n        </member>\n        <member name=\"M:Xunit.XunitProject.Save\">\n            <summary>\n            Saves the xUnit.net Test Project file to disk using the project's filename.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitProject.SaveAs(System.String)\">\n            <summary>\n            Saves the xUnit.net Test Project file to disk using the provided filename.\n            The projects filename is updated to match this new name.\n            </summary>\n            <param name=\"filename\">The test project filename</param>\n        </member>\n        <member name=\"P:Xunit.XunitProject.Assemblies\">\n            <summary>\n            Gets or sets the assemblies in the project.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProject.Filename\">\n            <summary>\n            Gets or set the filename of the project.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProject.Filters\">\n            <summary>\n            Gets the filters applied to this project.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProject.IsDirty\">\n            <summary>\n            Gets or sets a flag which indicates if this project has been modified since\n            the last time it was loaded or saved.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.XunitProjectAssembly\">\n            <summary>\n            Represents an assembly in an <see cref=\"T:Xunit.XunitProject\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XunitProjectAssembly.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.XunitProjectAssembly\"/> class.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProjectAssembly.AssemblyFilename\">\n            <summary>\n            Gets or sets the assembly filename.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProjectAssembly.ConfigFilename\">\n            <summary>\n            Gets or sets the config filename.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XunitProjectAssembly.ShadowCopy\">\n            <summary>\n            Gets or sets a value indicating whether to shadow copy the assembly\n            when running the tests.\n            </summary>\n            <remarks>\n            The xUnit.net GUI runner does not support this field.\n            </remarks>\n        </member>\n        <member name=\"P:Xunit.XunitProjectAssembly.Output\">\n            <summary>\n            Gets or sets the output filenames. The dictionary key is the type\n            of the file to be output; the dictionary value is the filename to\n            write the output to.\n            </summary>\n            <remarks>\n            The xUnit.net GUI runner does not support this field. The MSBuild\n            runner only supports output of type 'xml', 'html', and 'nunit'.\n            </remarks>\n        </member>\n        <member name=\"T:Xunit.ITestRunner\">\n            <summary>\n            Interface which represents a high level test runner.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.ITestRunner.RunAssembly\">\n            <summary>\n            Executes the tests in the assembly.\n            </summary>\n            <returns>Returns true if there were no failures; return false otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.ITestRunner.RunAssembly(System.Collections.Generic.IEnumerable{Xunit.IResultXmlTransform})\">\n            <summary>\n            Executes the tests in the assembly, and then executes the transforms with the\n            resulting assembly XML.\n            </summary>\n            <param name=\"transforms\">The transforms to execute.</param>\n            <returns>Returns true if there were no failures; return false otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.ITestRunner.RunClass(System.String)\">\n            <summary>\n            Runs the class.\n            </summary>\n            <param name=\"type\">The type.</param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Xunit.ITestRunner.RunTest(System.String,System.String)\">\n            <summary>\n            Runs a single test in a test class.\n            </summary>\n            <param name=\"type\">The full name of the class.</param>\n            <param name=\"method\">The name of the method.</param>\n        </member>\n        <member name=\"M:Xunit.ITestRunner.RunTests(System.String,System.Collections.Generic.List{System.String})\">\n            <summary>\n            Runs the list of tests in a test class.\n            </summary>\n            <param name=\"type\">The full name of the class.</param>\n            <param name=\"methods\">The names of the methods to run.</param>\n        </member>\n        <member name=\"T:Xunit.TestAssembly\">\n            <summary>\n            Represents a single test assembly with test classes.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.#ctor(Xunit.IExecutorWrapper,System.Collections.Generic.IEnumerable{Xunit.TestClass})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestAssembly\"/> class.\n            </summary>\n            <param name=\"executorWrapper\">The executor wrapper.</param>\n            <param name=\"testClasses\">The test classes.</param>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.Dispose\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.EnumerateClasses\">\n            <summary>\n            Enumerates the test classes in the assembly.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.EnumerateTestMethods\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.EnumerateTestMethods(System.Predicate{Xunit.TestMethod})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestAssembly.Run(System.Collections.Generic.IEnumerable{Xunit.TestMethod},Xunit.ITestMethodRunnerCallback)\">\n            <summary>\n            Runs the specified test methods.\n            </summary>\n            <param name=\"testMethods\">The test methods to run.</param>\n            <param name=\"callback\">The run status information callback.</param>\n            <returns>Returns the result as XML.</returns>\n        </member>\n        <member name=\"P:Xunit.TestAssembly.AssemblyFilename\">\n            <summary>\n            Gets the assembly filename.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestAssembly.ConfigFilename\">\n            <summary>\n            Gets the config filename.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestAssembly.ExecutorWrapper\">\n            <summary>\n            Gets the executor wrapper.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestAssembly.XunitVersion\">\n            <summary>\n            Gets the version of xunit.dll that the tests are linked against.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestClass\">\n            <summary>\n            Represents a single class with test methods.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestClass.#ctor(System.String,System.Collections.Generic.IEnumerable{Xunit.TestMethod})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestClass\"/> class.\n            </summary>\n            <param name=\"typeName\">The namespace-qualified type name that\n            this class represents.</param>\n            <param name=\"testMethods\">The test methods inside this test class.</param>\n        </member>\n        <member name=\"M:Xunit.TestClass.EnumerateTestMethods\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClass.EnumerateTestMethods(System.Predicate{Xunit.TestMethod})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestClass.Run(System.Collections.Generic.IEnumerable{Xunit.TestMethod},Xunit.ITestMethodRunnerCallback)\">\n            <summary>\n            Runs the specified test methods.\n            </summary>\n            <param name=\"testMethods\">The test methods to run.</param>\n            <param name=\"callback\">The run status information callback.</param>\n            <returns>Returns the result as XML.</returns>\n        </member>\n        <member name=\"M:Xunit.TestClass.RunTests(System.Collections.Generic.List{System.String},Xunit.ITestMethodRunnerCallback)\">\n            <summary>\n            Runs the specified tests in the given type, calling the callback as appropriate.\n            This override point exists primarily for unit testing purposes.\n            </summary>\n            <param name=\"methods\">The test methods to run</param>\n            <param name=\"callback\">The run status information callback.</param>\n        </member>\n        <member name=\"P:Xunit.TestClass.TestAssembly\">\n            <summary>\n            Gets the test assembly that this class belongs to.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestClass.TypeName\">\n            <summary>\n            Gets the namespace-qualified type name of this class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestMethod\">\n            <summary>\n            Represents a single test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestMethod.#ctor(System.String,System.String,Xunit.MultiValueDictionary{System.String,System.String})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestMethod\"/> class.\n            </summary>\n            <param name=\"methodName\">The method name.</param>\n            <param name=\"displayName\">The method's display name.</param>\n            <param name=\"traits\">The method's traits.</param>\n        </member>\n        <member name=\"P:Xunit.TestMethod.DisplayName\">\n            <summary>\n            Gets the method's display name.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestMethod.MethodName\">\n            <summary>\n            Gets the method's name.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestMethod.RunResults\">\n            <summary>\n            Gets the run results for the last run.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestMethod.RunStatus\">\n            <summary>\n            Gets the composite run status for all the results of the last run.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestMethod.TestClass\">\n            <summary>\n            Gets the test class this test method belongs to.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TestMethod.Traits\">\n            <summary>\n            Gets the method's traits.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestRunnerResult\">\n            <summary>\n            The result of a test run via <see cref=\"T:Xunit.TestRunner\"/>.\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestRunnerResult.Passed\">\n            <summary>\n            All tests passed, with no class-level failures\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestRunnerResult.Failed\">\n            <summary>\n            At least one test failed, or there was a class-level failure\n            </summary>\n        </member>\n        <member name=\"F:Xunit.TestRunnerResult.NoTests\">\n            <summary>\n            There were no tests to run\n            </summary>\n        </member>\n        <member name=\"T:Xunit.IResultXmlTransform\">\n            <summary>\n            Represents a transformation of the resulting assembly XML into some output format.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.IResultXmlTransform.Transform(System.String)\">\n            <summary>\n            Transforms the given assembly XML into the destination format.\n            </summary>\n            <param name=\"xml\">The assembly XML.</param>\n        </member>\n        <member name=\"P:Xunit.IResultXmlTransform.OutputFilename\">\n            <summary>\n            Gets the output filename, if known; returns null if the output isn't done to file.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TestRunner\">\n            <summary>\n            Runs tests in an assembly, and transforms the XML results into calls to\n            the provided <see cref=\"T:Xunit.IRunnerLogger\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestRunner.#ctor(Xunit.IExecutorWrapper,Xunit.IRunnerLogger)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.TestRunner\"/> class.\n            </summary>\n            <param name=\"executorWrapper\">The executor wrapper.</param>\n            <param name=\"logger\">The logger.</param>\n        </member>\n        <member name=\"M:Xunit.TestRunner.RunAssembly\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestRunner.RunAssembly(System.Collections.Generic.IEnumerable{Xunit.IResultXmlTransform})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestRunner.RunClass(System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestRunner.RunTest(System.String,System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.TestRunner.RunTests(System.String,System.Collections.Generic.List{System.String})\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.NullTransformer\">\n            <summary>\n            An implementation of <see cref=\"T:Xunit.IResultXmlTransform\"/> which writes the\n            XML to a file without any transformation applied.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.NullTransformer.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.NullTransformer\"/> class.\n            </summary>\n            <param name=\"filename\">The output filename.</param>\n        </member>\n        <member name=\"M:Xunit.NullTransformer.Transform(System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.NullTransformer.OutputFilename\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.XslStreamTransformer\">\n            <summary>\n            An implementation of <see cref=\"T:Xunit.IResultXmlTransform\"/> which writes the\n            XML to a file after applying the XSL stylesheet in the given stream.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XslStreamTransformer.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.XslStreamTransformer\"/> class.\n            </summary>\n            <param name=\"xslFilename\">The XSL filename.</param>\n            <param name=\"outputFilename\">The output filename.</param>\n        </member>\n        <member name=\"M:Xunit.XslStreamTransformer.#ctor(System.IO.Stream,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.XslStreamTransformer\"/> class.\n            </summary>\n            <param name=\"xslStream\">The stream with the XSL stylesheet.</param>\n            <param name=\"outputFilename\">The output filename.</param>\n        </member>\n        <member name=\"M:Xunit.XslStreamTransformer.Transform(System.String)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.XslStreamTransformer.OutputFilename\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.XslStreamTransformer.XslFilename\">\n            <summary>\n            Gets or sets the XSL filename.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.XslStreamTransformer.XslStream\">\n            <summary>\n            Gets or sets the XSL stream.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.MultiValueDictionary`2\">\n            <summary>\n            A dictionary which contains multiple unique values for each key.\n            </summary>\n            <typeparam name=\"TKey\">The type of the key.</typeparam>\n            <typeparam name=\"TValue\">The type of the value.</typeparam>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.AddValue(`0,`1)\">\n            <summary>\n            Adds the value for the given key. If the key does not exist in the\n            dictionary yet, it will add it.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Determines whether the dictionary contains to specified key and value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.ForEach(Xunit.MultiValueDictionary{`0,`1}.ForEachDelegate)\">\n            <summary>\n            Calls the delegate once for each key/value pair in the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.Remove(`0)\">\n            <summary>\n            Removes the given key and all of its values.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.MultiValueDictionary`2.RemoveValue(`0,`1)\">\n            <summary>\n            Removes the given value from the given key. If this was the\n            last value for the key, then the key is removed as well.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"P:Xunit.MultiValueDictionary`2.Item(`0)\">\n            <summary>\n            Gets the values for the given key.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.MultiValueDictionary`2.Count\">\n            <summary>\n            Gets the count of the keys in the dictionary.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.MultiValueDictionary`2.Keys\">\n            <summary>\n            Gets the keys.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.MultiValueDictionary`2.ForEachDelegate\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.TestAssemblyBuilder\">\n            <summary>\n            Responsible for building <see cref=\"T:Xunit.TestAssembly\"/> instances. Uses an instance\n            of <see cref=\"T:Xunit.IExecutorWrapper\"/> to interrogate the list of available tests\n            and create the entire object model tree.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TestAssemblyBuilder.Build(Xunit.IExecutorWrapper)\">\n            <summary>\n            Creates a <see cref=\"T:Xunit.TestAssembly\"/> which is a complete object model over\n            the tests inside of instance of <see cref=\"T:Xunit.IExecutorWrapper\"/>.\n            </summary>\n            <param name=\"executorWrapper\">The executor wrapper</param>\n            <returns>The fully populated object model</returns>\n        </member>\n        <member name=\"T:Xunit.XmlLoggerAdapter\">\n            <summary>\n            Parses the XML nodes from the version resilient runner facility and converts\n            them into calls against the provided <see cref=\"T:Xunit.IRunnerLogger\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.XmlLoggerAdapter.LogNode(System.Xml.XmlNode,Xunit.IRunnerLogger)\">\n            <summary>\n            Logs a result XML node. Maybe be any kind of XML node.\n            </summary>\n            <param name=\"node\">The node to be logged.</param>\n            <param name=\"logger\">The logger.</param>\n            <returns>Returns true if the user wishes to continue running tests; returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.XmlLoggerAdapter.LogAssemblyNode(System.Xml.XmlNode,Xunit.IRunnerLogger)\">\n            <summary>\n            Logs the assembly node by calling <see cref=\"M:Xunit.IRunnerLogger.AssemblyFinished(System.String,System.Int32,System.Int32,System.Int32,System.Double)\"/>.\n            </summary>\n            <param name=\"assemblyNode\">The assembly node.</param>\n            <param name=\"logger\">The logger.</param>\n        </member>\n        <member name=\"M:Xunit.XmlLoggerAdapter.LogClassNode(System.Xml.XmlNode,Xunit.IRunnerLogger)\">\n            <summary>\n            Logs the class node by calling <see cref=\"M:Xunit.IRunnerLogger.ClassFailed(System.String,System.String,System.String,System.String)\"/> (if the class failed).\n            The exception type was added in xUnit.net 1.1, so when the test assembly is linked against\n            xUnit.net versions prior to 1.1, the exception type will be null.\n            </summary>\n            <param name=\"classNode\">The class node.</param>\n            <param name=\"logger\">The logger.</param>\n            <returns>Returns true if the user wishes to continue running tests; returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.XmlLoggerAdapter.LogStartNode(System.Xml.XmlNode,Xunit.IRunnerLogger)\">\n            <summary>\n            Logs the start node by calling <see cref=\"M:Xunit.IRunnerLogger.TestStart(System.String,System.String,System.String)\"/>. The start node was added\n            in xUnit.net 1.1, so it will only be present when the test assembly is linked against xunit.dll\n            version 1.1 or later.\n            </summary>\n            <param name=\"startNode\">The start node.</param>\n            <param name=\"logger\">The logger.</param>\n            <returns>Returns true if the user wishes to continue running tests; returns false otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.XmlLoggerAdapter.LogTestNode(System.Xml.XmlNode,Xunit.IRunnerLogger)\">\n            <summary>\n            Logs the test node by calling <see cref=\"M:Xunit.IRunnerLogger.TestFinished(System.String,System.String,System.String)\"/>. It will also call\n            <see cref=\"M:Xunit.IRunnerLogger.TestPassed(System.String,System.String,System.String,System.Double,System.String)\"/>, <see cref=\"M:Xunit.IRunnerLogger.TestFailed(System.String,System.String,System.String,System.Double,System.String,System.String,System.String,System.String)\"/>, or\n            <see cref=\"M:Xunit.IRunnerLogger.TestSkipped(System.String,System.String,System.String,System.String)\"/> as appropriate.\n            </summary>\n            <param name=\"testNode\">The test node.</param>\n            <param name=\"logger\">The logger.</param>\n            <returns>Returns true if the user wishes to continue running tests; returns false otherwise.</returns>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "3rdParty/xunit/xunit.xml",
    "content": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>xunit</name>\n    </assembly>\n    <members>\n        <member name=\"T:Xunit.Assert\">\n            <summary>\n            Contains various static methods that are used to verify that conditions are met during the\n            process of running tests.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Assert.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Assert\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Assert.Contains``1(``0,System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that a collection contains a given object.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be verified</typeparam>\n            <param name=\"expected\">The object expected to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the object is not present in the collection</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Contains``1(``0,System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that a collection contains a given object, using an equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be verified</typeparam>\n            <param name=\"expected\">The object expected to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <param name=\"comparer\">The comparer used to equate objects in the collection with the expected object</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the object is not present in the collection</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Contains(System.String,System.String)\">\n            <summary>\n            Verifies that a string contains a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string expected to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the sub-string is not present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Contains(System.String,System.String,System.StringComparison)\">\n            <summary>\n            Verifies that a string contains a given sub-string, using the given comparison type.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string expected to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <param name=\"comparisonType\">The type of string comparison to perform</param>\n            <exception cref=\"T:Xunit.Sdk.ContainsException\">Thrown when the sub-string is not present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.DoesNotContain``1(``0,System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that a collection does not contain a given object.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be compared</typeparam>\n            <param name=\"expected\">The object that is expected not to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the object is present inside the container</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.DoesNotContain``1(``0,System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that a collection does not contain a given object, using an equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the object to be compared</typeparam>\n            <param name=\"expected\">The object that is expected not to be in the collection</param>\n            <param name=\"collection\">The collection to be inspected</param>\n            <param name=\"comparer\">The comparer used to equate objects in the collection with the expected object</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the object is present inside the container</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.DoesNotContain(System.String,System.String)\">\n            <summary>\n            Verifies that a string does not contain a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string which is expected not to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the sub-string is present inside the string</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.DoesNotContain(System.String,System.String,System.StringComparison)\">\n            <summary>\n            Verifies that a string does not contain a given sub-string, using the current culture.\n            </summary>\n            <param name=\"expectedSubstring\">The sub-string which is expected not to be in the string</param>\n            <param name=\"actualString\">The string to be inspected</param>\n            <param name=\"comparisonType\">The type of string comparison to perform</param>\n            <exception cref=\"T:Xunit.Sdk.DoesNotContainException\">Thrown when the sub-string is present inside the given string</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.DoesNotThrow(Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that a block of code does not throw any exceptions.\n            </summary>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n        </member>\n        <member name=\"M:Xunit.Assert.Empty(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that a collection is empty.\n            </summary>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown when the collection is null</exception>\n            <exception cref=\"T:Xunit.Sdk.EmptyException\">Thrown when the collection is not empty</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Equal``1(``0,``0)\">\n            <summary>\n            Verifies that two objects are equal, using a default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the objects are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Equal``1(``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that two objects are equal, using a custom equatable comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"comparer\">The comparer used to compare the two objects</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the objects are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Equal(System.Double,System.Double,System.Int32)\">\n            <summary>\n            Verifies that two <see cref=\"T:System.Double\"/> values are equal, within the number of decimal\n            places given by <paramref name=\"precision\"/>.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"precision\">The number of decimal places (valid values: 0-15)</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the values are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Equal(System.Decimal,System.Decimal,System.Int32)\">\n            <summary>\n            Verifies that two <see cref=\"T:System.Decimal\"/> values are equal, within the number of decimal\n            places given by <paramref name=\"precision\"/>.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The value to be compared against</param>\n            <param name=\"precision\">The number of decimal places (valid values: 0-15)</param>\n            <exception cref=\"T:Xunit.Sdk.EqualException\">Thrown when the values are not equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Equals(System.Object,System.Object)\">\n            <summary>Do not call this method.</summary>\n        </member>\n        <member name=\"M:Xunit.Assert.False(System.Boolean)\">\n            <summary>\n            Verifies that the condition is false.\n            </summary>\n            <param name=\"condition\">The condition to be tested</param>\n            <exception cref=\"T:Xunit.Sdk.FalseException\">Thrown if the condition is not false</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.False(System.Boolean,System.String)\">\n            <summary>\n            Verifies that the condition is false.\n            </summary>\n            <param name=\"condition\">The condition to be tested</param>\n            <param name=\"userMessage\">The message to show when the condition is not false</param>\n            <exception cref=\"T:Xunit.Sdk.FalseException\">Thrown if the condition is not false</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.InRange``1(``0,``0,``0)\">\n            <summary>\n            Verifies that a value is within a given range.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <exception cref=\"T:Xunit.Sdk.InRangeException\">Thrown when the value is not in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.InRange``1(``0,``0,``0,System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Verifies that a value is within a given range, using a comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <param name=\"comparer\">The comparer used to evaluate the value's range</param>\n            <exception cref=\"T:Xunit.Sdk.InRangeException\">Thrown when the value is not in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsAssignableFrom``1(System.Object)\">\n            <summary>\n            Verifies that an object is of the given type or a derived type.\n            </summary>\n            <typeparam name=\"T\">The type the object should be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <returns>The object, casted to type T when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.IsAssignableFromException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsAssignableFrom(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is of the given type or a derived type.\n            </summary>\n            <param name=\"expectedType\">The type the object should be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsAssignableFromException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsNotType``1(System.Object)\">\n            <summary>\n            Verifies that an object is not exactly the given type.\n            </summary>\n            <typeparam name=\"T\">The type the object should not be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsNotTypeException\">Thrown when the object is the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsNotType(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is not exactly the given type.\n            </summary>\n            <param name=\"expectedType\">The type the object should not be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsNotTypeException\">Thrown when the object is the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsType``1(System.Object)\">\n            <summary>\n            Verifies that an object is exactly the given type (and not a derived type).\n            </summary>\n            <typeparam name=\"T\">The type the object should be</typeparam>\n            <param name=\"object\">The object to be evaluated</param>\n            <returns>The object, casted to type T when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.IsTypeException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.IsType(System.Type,System.Object)\">\n            <summary>\n            Verifies that an object is exactly the given type (and not a derived type).\n            </summary>\n            <param name=\"expectedType\">The type the object should be</param>\n            <param name=\"object\">The object to be evaluated</param>\n            <exception cref=\"T:Xunit.Sdk.IsTypeException\">Thrown when the object is not the given type</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotEmpty(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that a collection is not empty.\n            </summary>\n            <param name=\"collection\">The collection to be inspected</param>\n            <exception cref=\"T:System.ArgumentNullException\">Thrown when a null collection is passed</exception>\n            <exception cref=\"T:Xunit.Sdk.NotEmptyException\">Thrown when the collection is empty</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotEqual``1(``0,``0)\">\n            <summary>\n            Verifies that two objects are not equal, using a default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected object</param>\n            <param name=\"actual\">The actual object</param>\n            <exception cref=\"T:Xunit.Sdk.NotEqualException\">Thrown when the objects are equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotEqual``1(``0,``0,System.Collections.Generic.IEqualityComparer{``0})\">\n            <summary>\n            Verifies that two objects are not equal, using a custom equality comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the objects to be compared</typeparam>\n            <param name=\"expected\">The expected object</param>\n            <param name=\"actual\">The actual object</param>\n            <param name=\"comparer\">The comparer used to examine the objects</param>\n            <exception cref=\"T:Xunit.Sdk.NotEqualException\">Thrown when the objects are equal</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotInRange``1(``0,``0,``0)\">\n            <summary>\n            Verifies that a value is not within a given range, using the default comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <exception cref=\"T:Xunit.Sdk.NotInRangeException\">Thrown when the value is in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotInRange``1(``0,``0,``0,System.Collections.Generic.IComparer{``0})\">\n            <summary>\n            Verifies that a value is not within a given range, using a comparer.\n            </summary>\n            <typeparam name=\"T\">The type of the value to be compared</typeparam>\n            <param name=\"actual\">The actual value to be evaluated</param>\n            <param name=\"low\">The (inclusive) low value of the range</param>\n            <param name=\"high\">The (inclusive) high value of the range</param>\n            <param name=\"comparer\">The comparer used to evaluate the value's range</param>\n            <exception cref=\"T:Xunit.Sdk.NotInRangeException\">Thrown when the value is in the given range</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotNull(System.Object)\">\n            <summary>\n            Verifies that an object reference is not null.\n            </summary>\n            <param name=\"object\">The object to be validated</param>\n            <exception cref=\"T:Xunit.Sdk.NotNullException\">Thrown when the object is not null</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.NotSame(System.Object,System.Object)\">\n            <summary>\n            Verifies that two objects are not the same instance.\n            </summary>\n            <param name=\"expected\">The expected object instance</param>\n            <param name=\"actual\">The actual object instance</param>\n            <exception cref=\"T:Xunit.Sdk.NotSameException\">Thrown when the objects are the same instance</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Null(System.Object)\">\n            <summary>\n            Verifies that an object reference is null.\n            </summary>\n            <param name=\"object\">The object to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.NullException\">Thrown when the object reference is not null</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.PropertyChanged(System.ComponentModel.INotifyPropertyChanged,System.String,Xunit.Assert.PropertyChangedDelegate)\">\n            <summary>\n            Verifies that the provided object raised INotifyPropertyChanged.PropertyChanged\n            as a result of executing the given test code.\n            </summary>\n            <param name=\"object\">The object which should raise the notification</param>\n            <param name=\"propertyName\">The property name for which the notification should be raised</param>\n            <param name=\"testCode\">The test code which should cause the notification to be raised</param>\n            <exception cref=\"T:Xunit.Sdk.PropertyChangedException\">Thrown when the notification is not raised</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Same(System.Object,System.Object)\">\n            <summary>\n            Verifies that two objects are the same instance.\n            </summary>\n            <param name=\"expected\">The expected object instance</param>\n            <param name=\"actual\">The actual object instance</param>\n            <exception cref=\"T:Xunit.Sdk.SameException\">Thrown when the objects are not the same instance</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Single(System.Collections.IEnumerable)\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given type.\n            </summary>\n            <param name=\"collection\">The collection.</param>\n            <returns>The single item in the collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the collection does not contain\n            exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Single(System.Collections.IEnumerable,System.Object)\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given value. The collection may or may not\n            contain other values.\n            </summary>\n            <param name=\"collection\">The collection.</param>\n            <param name=\"expected\">The value to find in the collection.</param>\n            <returns>The single item in the collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the collection does not contain\n            exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Single``1(System.Collections.Generic.IEnumerable{``0})\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given type.\n            </summary>\n            <typeparam name=\"T\">The collection type.</typeparam>\n            <param name=\"collection\">The collection.</param>\n            <returns>The single item in the collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the collection does not contain\n            exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Single``1(System.Collections.Generic.IEnumerable{``0},System.Predicate{``0})\">\n            <summary>\n            Verifies that the given collection contains only a single\n            element of the given type which matches the given predicate. The\n            collection may or may not contain other values which do not\n            match the given predicate.\n            </summary>\n            <typeparam name=\"T\">The collection type.</typeparam>\n            <param name=\"collection\">The collection.</param>\n            <param name=\"predicate\">The item matching predicate.</param>\n            <returns>The single item in the filtered collection.</returns>\n            <exception cref=\"T:Xunit.Sdk.SingleException\">Thrown when the filtered collection does\n            not contain exactly one element.</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Throws``1(Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            </summary>\n            <typeparam name=\"T\">The type of the exception expected to be thrown</typeparam>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Throws``1(Xunit.Assert.ThrowsDelegateWithReturn)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            Generally used to test property accessors.\n            </summary>\n            <typeparam name=\"T\">The type of the exception expected to be thrown</typeparam>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Throws(System.Type,Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            </summary>\n            <param name=\"exceptionType\">The type of the exception expected to be thrown</param>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.Throws(System.Type,Xunit.Assert.ThrowsDelegateWithReturn)\">\n            <summary>\n            Verifies that the exact exception is thrown (and not a derived exception type).\n            Generally used to test property accessors.\n            </summary>\n            <param name=\"exceptionType\">The type of the exception expected to be thrown</param>\n            <param name=\"testCode\">A delegate to the code to be tested</param>\n            <returns>The exception that was thrown, when successful</returns>\n            <exception cref=\"T:Xunit.Sdk.ThrowsException\">Thrown when an exception was not thrown, or when an exception of the incorrect type is thrown</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.True(System.Boolean)\">\n            <summary>\n            Verifies that an expression is true.\n            </summary>\n            <param name=\"condition\">The condition to be inspected</param>\n            <exception cref=\"T:Xunit.Sdk.TrueException\">Thrown when the condition is false</exception>\n        </member>\n        <member name=\"M:Xunit.Assert.True(System.Boolean,System.String)\">\n            <summary>\n            Verifies that an expression is true.\n            </summary>\n            <param name=\"condition\">The condition to be inspected</param>\n            <param name=\"userMessage\">The message to be shown when the condition is false</param>\n            <exception cref=\"T:Xunit.Sdk.TrueException\">Thrown when the condition is false</exception>\n        </member>\n        <member name=\"T:Xunit.Assert.PropertyChangedDelegate\">\n            <summary>\n            Used by the PropertyChanged.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Assert.ThrowsDelegate\">\n            <summary>\n            Used by the Throws and DoesNotThrow methods.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Assert.ThrowsDelegateWithReturn\">\n            <summary>\n            Used by the Throws and DoesNotThrow methods.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ExceptionAndOutputCaptureCommand\">\n            <summary>\n            This command sets up the necessary trace listeners and standard\n            output/error listeners to capture Assert/Debug.Trace failures,\n            output to stdout/stderr, and Assert/Debug.Write text. It also\n            captures any exceptions that are thrown and packages them as\n            FailedResults, including the possibility that the configuration\n            file is messed up (which is exposed when we attempt to manipulate\n            the trace listener list).\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.DelegatingTestCommand\">\n            <summary>\n            Base class used by commands which delegate to inner commands.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ITestCommand\">\n            <summary>\n            Interface which represents the ability to invoke of a test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestCommand.Execute(System.Object)\">\n            <summary>\n            Executes the test method.\n            </summary>\n            <param name=\"testClass\">The instance of the test class</param>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestCommand.ToStartXml\">\n            <summary>\n            Creates the start XML to be sent to the callback when the test is about to start\n            running.\n            </summary>\n            <returns>Return the <see cref=\"T:System.Xml.XmlNode\"/> of the start node, or null if the test\n            is known that it will not be running.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestCommand.DisplayName\">\n            <summary>\n            Gets the display name of the test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestCommand.ShouldCreateInstance\">\n            <summary>\n            Determines if the test runner infrastructure should create a new instance of the\n            test class before running the test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestCommand.Timeout\">\n            <summary>\n            Determines if the test should be limited to running a specific amount of time\n            before automatically failing.\n            </summary>\n            <returns>The timeout value, in milliseconds; if zero, the test will not have\n            a timeout.</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.DelegatingTestCommand.#ctor(Xunit.Sdk.ITestCommand)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.DelegatingTestCommand\"/> class.\n            </summary>\n            <param name=\"innerCommand\">The inner command to delegate to.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.DelegatingTestCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Sdk.DelegatingTestCommand.ToStartXml\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.DelegatingTestCommand.InnerCommand\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.DelegatingTestCommand.DisplayName\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.DelegatingTestCommand.ShouldCreateInstance\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.DelegatingTestCommand.Timeout\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExceptionAndOutputCaptureCommand.#ctor(Xunit.Sdk.ITestCommand,Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.ExceptionAndOutputCaptureCommand\"/>\n            class.\n            </summary>\n            <param name=\"innerCommand\">The command that will be wrapped.</param>\n            <param name=\"method\">The test method.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExceptionAndOutputCaptureCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Sdk.FactCommand\">\n            <summary>\n            Represents an implementation of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> to be used with\n            tests which are decorated with the <see cref=\"T:Xunit.FactAttribute\"/>.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestCommand\">\n            <summary>\n            Represents an xUnit.net test command.\n            </summary>\n        </member>\n        <member name=\"F:Xunit.Sdk.TestCommand.testMethod\">\n            <summary>\n            The method under test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestCommand.#ctor(Xunit.Sdk.IMethodInfo,System.String,System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.TestCommand\"/> class.\n            </summary>\n            <param name=\"method\">The method under test.</param>\n            <param name=\"displayName\">The display name of the test.</param>\n            <param name=\"timeout\">The timeout, in milliseconds.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestCommand.ToStartXml\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestCommand.DisplayName\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestCommand.MethodName\">\n            <summary>\n            Gets the name of the method under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestCommand.ShouldCreateInstance\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestCommand.Timeout\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestCommand.TypeName\">\n            <summary>\n            Gets the name of the type under test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.FactCommand.#ctor(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.FactCommand\"/> class.\n            </summary>\n            <param name=\"method\">The test method.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.FactCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Sdk.AssertActualExpectedException\">\n            <summary>\n            Base class for exceptions that have actual and expected values\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.AssertException\">\n            <summary>\n            The base assert exception class\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertException.#ctor\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AssertException\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertException.#ctor(System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AssertException\"/> class.\n            </summary>\n            <param name=\"userMessage\">The user message to be displayed</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertException.#ctor(System.String,System.Exception)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AssertException\"/> class.\n            </summary>\n            <param name=\"userMessage\">The user message to be displayed</param>\n            <param name=\"innerException\">The inner exception</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertException.#ctor(System.String,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AssertException\"/> class.\n            </summary>\n            <param name=\"userMessage\">The user message to be displayed</param>\n            <param name=\"stackTrace\">The stack trace to be displayed</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertException.FilterStackTrace(System.String)\">\n            <summary>\n            Filters the stack trace to remove all lines that occur within the testing framework.\n            </summary>\n            <param name=\"stackTrace\">The original stack trace</param>\n            <returns>The filtered stack trace</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssertException.StackTrace\">\n            <summary>\n            Gets a string representation of the frames on the call stack at the time the current exception was thrown.\n            </summary>\n            <returns>A string that describes the contents of the call stack, with the most recent method call appearing first.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssertException.UserMessage\">\n            <summary>\n            Gets the user message\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertActualExpectedException.#ctor(System.Object,System.Object,System.String)\">\n            <summary>\n            Creates a new instance of the <see href=\"AssertActualExpectedException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The actual value</param>\n            <param name=\"userMessage\">The user message to be shown</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssertActualExpectedException.#ctor(System.Object,System.Object,System.String,System.Boolean)\">\n            <summary>\n            Creates a new instance of the <see href=\"AssertActualExpectedException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected value</param>\n            <param name=\"actual\">The actual value</param>\n            <param name=\"userMessage\">The user message to be shown</param>\n            <param name=\"skipPositionCheck\">Set to true to skip the check for difference position</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssertActualExpectedException.Actual\">\n            <summary>\n            Gets the actual value.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssertActualExpectedException.Expected\">\n            <summary>\n            Gets the expected value.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssertActualExpectedException.Message\">\n            <summary>\n            Gets a message that describes the current exception. Includes the expected and actual values.\n            </summary>\n            <returns>The error message that explains the reason for the exception, or an empty string(\"\").</returns>\n            <filterpriority>1</filterpriority>\n        </member>\n        <member name=\"T:Xunit.Sdk.ContainsException\">\n            <summary>\n            Exception thrown when a collection unexpectedly does not contain the expected value.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ContainsException.#ctor(System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ContainsException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object value</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ContainsException.#ctor(System.Object,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ContainsException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object value</param>\n            <param name=\"actual\">The actual value</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.ParameterCountMismatchException\">\n            <summary>\n            Exception to be thrown from <see cref=\"M:Xunit.Sdk.IMethodInfo.Invoke(System.Object,System.Object[])\"/> when the number of\n            parameter values does not the test method signature.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ParameterCountMismatchException.#ctor\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.ParameterCountMismatchException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.PropertyChangedException\">\n            <summary>\n            Exception thrown when code unexpectedly fails change a property.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.PropertyChangedException.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ThrowsException\"/> class. Call this constructor\n            when no exception was thrown.\n            </summary>\n            <param name=\"expectedType\">The type of the exception that was expected</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.SingleException\">\n            <summary>\n            Exception thrown when the collection did not contain exactly one element.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.SingleException.#ctor(System.Int32)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.SingleException\"/> class.\n            </summary>\n            <param name=\"count\">The numbers of items in the collection.</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor\">\n            <summary>\n            Internal class used for version-resilient test runners. DO NOT CALL DIRECTLY.\n            Version-resilient runners should link against xunit.runner.utility.dll and use\n            ExecutorWrapper instead.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.#ctor(System.String)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.AssemblyTestCount\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.AssemblyTestCount.#ctor(Xunit.Sdk.Executor,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.AssemblyTestCount.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.EnumerateTests\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.EnumerateTests.#ctor(Xunit.Sdk.Executor,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.EnumerateTests.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.RunAssembly\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunAssembly.#ctor(Xunit.Sdk.Executor,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunAssembly.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.RunClass\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunClass.#ctor(Xunit.Sdk.Executor,System.String,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunClass.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.RunTest\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunTest.#ctor(Xunit.Sdk.Executor,System.String,System.String,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunTest.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.Executor.RunTests\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunTests.#ctor(Xunit.Sdk.Executor,System.String,System.Collections.Generic.List{System.String},System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Executor.RunTests.InitializeLifetimeService\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.IsAssignableFromException\">\n            <summary>\n            Exception thrown when the value is unexpectedly not of the given type or a derived type.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.IsAssignableFromException.#ctor(System.Type,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.IsTypeException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected type</param>\n            <param name=\"actual\">The actual object value</param>\n        </member>\n        <member name=\"T:Xunit.Record\">\n            <summary>\n            Allows the user to record actions for a test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Record.Exception(Xunit.Assert.ThrowsDelegate)\">\n            <summary>\n            Records any exception which is thrown by the given code.\n            </summary>\n            <param name=\"code\">The code which may thrown an exception.</param>\n            <returns>Returns the exception that was thrown by the code; null, otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.Record.Exception(Xunit.Assert.ThrowsDelegateWithReturn)\">\n            <summary>\n            Records any exception which is thrown by the given code that has\n            a return value. Generally used for testing property accessors.\n            </summary>\n            <param name=\"code\">The code which may thrown an exception.</param>\n            <returns>Returns the exception that was thrown by the code; null, otherwise.</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.AfterTestException\">\n            <summary>\n            Exception that is thrown when one or more exceptions are thrown from\n            the After method of a <see cref=\"T:Xunit.BeforeAfterTestAttribute\"/>.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.AfterTestException.#ctor(System.Collections.Generic.IEnumerable{System.Exception})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AfterTestException\"/> class.\n            </summary>\n            <param name=\"exceptions\">The exceptions.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AfterTestException.#ctor(System.Exception[])\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.AfterTestException\"/> class.\n            </summary>\n            <param name=\"exceptions\">The exceptions.</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.AfterTestException.AfterExceptions\">\n            <summary>\n            Gets the list of exceptions thrown in the After method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AfterTestException.Message\">\n            <summary>\n            Gets a message that describes the current exception.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AfterTestException.StackTrace\">\n            <summary>\n            Gets a string representation of the frames on the call stack at the time the current exception was thrown.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.BeforeAfterCommand\">\n            <summary>\n            Implementation of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> which executes the\n            <see cref=\"T:Xunit.BeforeAfterTestAttribute\"/> instances attached to a test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.BeforeAfterCommand.#ctor(Xunit.Sdk.ITestCommand,System.Reflection.MethodInfo)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.BeforeAfterCommand\"/> class.\n            </summary>\n            <param name=\"innerCommand\">The inner command.</param>\n            <param name=\"testMethod\">The method.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.BeforeAfterCommand.Execute(System.Object)\">\n            <summary>\n            Executes the test method.\n            </summary>\n            <param name=\"testClass\">The instance of the test class</param>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.ExecutorCallback\">\n            <summary>\n            This class supports the xUnit.net infrastructure and is not intended to be used\n            directly from your code.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExecutorCallback.Wrap(System.Object)\">\n            <summary>\n            This API supports the xUnit.net infrastructure and is not intended to be used\n            directly from your code.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExecutorCallback.Notify(System.String)\">\n            <summary>\n            This API supports the xUnit.net infrastructure and is not intended to be used\n            directly from your code.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExecutorCallback.ShouldContinue\">\n            <summary>\n            This API supports the xUnit.net infrastructure and is not intended to be used\n            directly from your code.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.Guard\">\n            <summary>\n            Guard class, used for guard clauses and argument validation\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentNotNull(System.String,System.Object)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentNotNullOrEmpty(System.String,System.Collections.IEnumerable)\">\n            <summary/>\n        </member>\n        <member name=\"M:Xunit.Sdk.Guard.ArgumentValid(System.String,System.String,System.Boolean)\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestResult\">\n            <summary>\n            Base class which contains XML manipulation helper methods\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ITestResult\">\n            <summary>\n            Interface that represents a single test result.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestResult.ExecutionTime\">\n            <summary>\n            The amount of time spent in execution\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestResult.AddTime(System.Xml.XmlNode)\">\n            <summary>\n            Adds the test execution time to the XML node.\n            </summary>\n            <param name=\"testNode\">The XML node.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestResult.ToXml(System.Xml.XmlNode)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestResult.ExecutionTime\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Sdk.ExceptionUtility\">\n            <summary>\n            Utility methods for dealing with exceptions.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExceptionUtility.GetMessage(System.Exception)\">\n            <summary>\n            Gets the message for the exception, including any inner exception messages.\n            </summary>\n            <param name=\"ex\">The exception</param>\n            <returns>The formatted message</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExceptionUtility.GetStackTrace(System.Exception)\">\n            <summary>\n            Gets the stack trace for the exception, including any inner exceptions.\n            </summary>\n            <param name=\"ex\">The exception</param>\n            <returns>The formatted stack trace</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ExceptionUtility.RethrowWithNoStackTraceLoss(System.Exception)\">\n            <summary>\n            Rethrows an exception object without losing the existing stack trace information\n            </summary>\n            <param name=\"ex\">The exception to re-throw.</param>\n            <remarks>\n            For more information on this technique, see\n            http://www.dotnetjunkies.com/WebLog/chris.taylor/archive/2004/03/03/8353.aspx\n            </remarks>\n        </member>\n        <member name=\"T:Xunit.Sdk.MultiValueDictionary`2\">\n            <summary>\n            A dictionary which contains multiple unique values for each key.\n            </summary>\n            <typeparam name=\"TKey\">The type of the key.</typeparam>\n            <typeparam name=\"TValue\">The type of the value.</typeparam>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.AddValue(`0,`1)\">\n            <summary>\n            Adds the value for the given key. If the key does not exist in the\n            dictionary yet, it will add it.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.Clear\">\n            <summary>\n            Removes all keys and values from the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.Contains(`0,`1)\">\n            <summary>\n            Determines whether the dictionary contains to specified key and value.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.ForEach(Xunit.Sdk.MultiValueDictionary{`0,`1}.ForEachDelegate)\">\n            <summary>\n            Calls the delegate once for each key/value pair in the dictionary.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.Remove(`0)\">\n            <summary>\n            Removes the given key and all of its values.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.MultiValueDictionary`2.RemoveValue(`0,`1)\">\n            <summary>\n            Removes the given value from the given key. If this was the\n            last value for the key, then the key is removed as well.\n            </summary>\n            <param name=\"key\">The key.</param>\n            <param name=\"value\">The value.</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.MultiValueDictionary`2.Item(`0)\">\n            <summary>\n            Gets the values for the given key.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MultiValueDictionary`2.Count\">\n            <summary>\n            Gets the count of the keys in the dictionary.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MultiValueDictionary`2.Keys\">\n            <summary>\n            Gets the keys.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.MultiValueDictionary`2.ForEachDelegate\">\n            <summary/>\n        </member>\n        <member name=\"T:Xunit.Sdk.XmlUtility\">\n            <summary>\n            XML utility methods\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.XmlUtility.AddAttribute(System.Xml.XmlNode,System.String,System.Object)\">\n            <summary>\n            Adds an attribute to an XML node.\n            </summary>\n            <param name=\"node\">The XML node.</param>\n            <param name=\"name\">The attribute name.</param>\n            <param name=\"value\">The attribute value.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.XmlUtility.AddElement(System.Xml.XmlNode,System.String)\">\n            <summary>\n            Adds a child element to an XML node.\n            </summary>\n            <param name=\"parentNode\">The parent XML node.</param>\n            <param name=\"name\">The child element name.</param>\n            <returns>The new child XML element.</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TraceAssertException\">\n            <summary>\n            Exception that is thrown when a call to Debug.Assert() fails.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TraceAssertException.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TraceAssertException\"/> class.\n            </summary>\n            <param name=\"assertMessage\">The original assert message</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TraceAssertException.#ctor(System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TraceAssertException\"/> class.\n            </summary>\n            <param name=\"assertMessage\">The original assert message</param>\n            <param name=\"assertDetailedMessage\">The original assert detailed message</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.TraceAssertException.AssertDetailedMessage\">\n            <summary>\n            Gets the original assert detailed message.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TraceAssertException.AssertMessage\">\n            <summary>\n            Gets the original assert message.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TraceAssertException.Message\">\n            <summary>\n            Gets a message that describes the current exception.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.DoesNotContainException\">\n            <summary>\n            Exception thrown when a collection unexpectedly contains the expected value.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.DoesNotContainException.#ctor(System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.DoesNotContainException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object value</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.DoesNotThrowException\">\n            <summary>\n            Exception thrown when code unexpectedly throws an exception.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.DoesNotThrowException.#ctor(System.Exception)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.DoesNotThrowException\"/> class.\n            </summary>\n            <param name=\"actual\">Actual exception</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.DoesNotThrowException.StackTrace\">\n            <summary>\n            Gets a string representation of the frames on the call stack at the time the current exception was thrown.\n            </summary>\n            <returns>A string that describes the contents of the call stack, with the most recent method call appearing first.</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.EmptyException\">\n            <summary>\n            Exception thrown when a collection is unexpectedly not empty.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.EmptyException.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.EmptyException\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.EqualException\">\n            <summary>\n            Exception thrown when two values are unexpectedly not equal.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.EqualException.#ctor(System.Object,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.EqualException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object value</param>\n            <param name=\"actual\">The actual object value</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.EqualException.#ctor(System.Object,System.Object,System.Boolean)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.EqualException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object value</param>\n            <param name=\"actual\">The actual object value</param>\n            <param name=\"skipPositionCheck\">Set to true to skip the check for difference position</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.FalseException\">\n            <summary>\n            Exception thrown when a value is unexpectedly true.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.FalseException.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.FalseException\"/> class.\n            </summary>\n            <param name=\"userMessage\">The user message to be display, or null for the default message</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.InRangeException\">\n            <summary>\n            Exception thrown when a value is unexpectedly not in the given range.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.InRangeException.#ctor(System.Object,System.Object,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.InRangeException\"/> class.\n            </summary>\n            <param name=\"actual\">The actual object value</param>\n            <param name=\"low\">The low value of the range</param>\n            <param name=\"high\">The high value of the range</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.InRangeException.Actual\">\n            <summary>\n            Gets the actual object value\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.InRangeException.High\">\n            <summary>\n            Gets the high value of the range\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.InRangeException.Low\">\n            <summary>\n            Gets the low value of the range\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.InRangeException.Message\">\n            <summary>\n            Gets a message that describes the current exception.\n            </summary>\n            <returns>The error message that explains the reason for the exception, or an empty string(\"\").</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.IsNotTypeException\">\n            <summary>\n            Exception thrown when the value is unexpectedly of the exact given type.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.IsNotTypeException.#ctor(System.Type,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.IsNotTypeException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected type</param>\n            <param name=\"actual\">The actual object value</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.IsTypeException\">\n            <summary>\n            Exception thrown when the value is unexpectedly not of the exact given type.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.IsTypeException.#ctor(System.Type,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.IsTypeException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected type</param>\n            <param name=\"actual\">The actual object value</param>\n        </member>\n        <member name=\"T:Xunit.IUseFixture`1\">\n            <summary>\n            Used to decorate xUnit.net test classes that utilize fixture classes.\n            An instance of the fixture data is initialized just before the first\n            test in the class is run, and if it implements IDisposable, is disposed\n            after the last test in the class is run.\n            </summary>\n            <typeparam name=\"T\">The type of the fixture</typeparam>\n        </member>\n        <member name=\"M:Xunit.IUseFixture`1.SetFixture(`0)\">\n            <summary>\n            Called on the test class just before each test method is run,\n            passing the fixture data so that it can be used for the test.\n            All test runs share the same instance of fixture data.\n            </summary>\n            <param name=\"data\">The fixture data</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.NotInRangeException\">\n            <summary>\n            Exception thrown when a value is unexpectedly in the given range.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NotInRangeException.#ctor(System.Object,System.Object,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NotInRangeException\"/> class.\n            </summary>\n            <param name=\"actual\">The actual object value</param>\n            <param name=\"low\">The low value of the range</param>\n            <param name=\"high\">The high value of the range</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.NotInRangeException.Actual\">\n            <summary>\n            Gets the actual object value\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.NotInRangeException.High\">\n            <summary>\n            Gets the high value of the range\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.NotInRangeException.Low\">\n            <summary>\n            Gets the low value of the range\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.NotInRangeException.Message\">\n            <summary>\n            Gets a message that describes the current exception.\n            </summary>\n            <returns>The error message that explains the reason for the exception, or an empty string(\"\").</returns>\n        </member>\n        <member name=\"T:Xunit.BeforeAfterTestAttribute\">\n            <summary>\n            Base attribute which indicates a test method interception (allows code to be run before and\n            after the test is run).\n            </summary>\n        </member>\n        <member name=\"M:Xunit.BeforeAfterTestAttribute.After(System.Reflection.MethodInfo)\">\n            <summary>\n            This method is called after the test method is executed.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.BeforeAfterTestAttribute.Before(System.Reflection.MethodInfo)\">\n            <summary>\n            This method is called before the test method is executed.\n            </summary>\n            <param name=\"methodUnderTest\">The method under test</param>\n        </member>\n        <member name=\"P:Xunit.BeforeAfterTestAttribute.TypeId\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Sdk.NotEmptyException\">\n            <summary>\n            Exception thrown when a collection is unexpectedly empty.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NotEmptyException.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NotEmptyException\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.NotEqualException\">\n            <summary>\n            Exception thrown when two values are unexpectedly equal.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NotEqualException.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NotEqualException\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.NotNullException\">\n            <summary>\n            Exception thrown when an object is unexpectedly null.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NotNullException.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NotNullException\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.NotSameException\">\n            <summary>\n            Exception thrown when two values are unexpected the same instance.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NotSameException.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NotSameException\"/> class.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.NullException\">\n            <summary>\n            Exception thrown when an object reference is unexpectedly not null.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.NullException.#ctor(System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.NullException\"/> class.\n            </summary>\n            <param name=\"actual\"></param>\n        </member>\n        <member name=\"T:Xunit.Sdk.LifetimeCommand\">\n            <summary>\n            Command that automatically creates the instance of the test class\n            and disposes it (if it implements <see cref=\"T:System.IDisposable\"/>).\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.LifetimeCommand.#ctor(Xunit.Sdk.ITestCommand,Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.LifetimeCommand\"/> object.\n            </summary>\n            <param name=\"innerCommand\">The command that is bring wrapped</param>\n            <param name=\"method\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.LifetimeCommand.Execute(System.Object)\">\n            <summary>\n            Executes the test method. Creates a new instance of the class\n            under tests and passes it to the inner command. Also catches\n            any exceptions and converts them into <see cref=\"T:Xunit.Sdk.FailedResult\"/>s.\n            </summary>\n            <param name=\"testClass\">The instance of the test class</param>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.FixtureCommand\">\n            <summary>\n            Command used to wrap a <see cref=\"T:Xunit.Sdk.ITestCommand\"/> which has associated\n            fixture data.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.FixtureCommand.#ctor(Xunit.Sdk.ITestCommand,System.Collections.Generic.Dictionary{System.Reflection.MethodInfo,System.Object})\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.FixtureCommand\"/> class.\n            </summary>\n            <param name=\"innerCommand\">The inner command</param>\n            <param name=\"fixtures\">The fixtures to be set on the test class</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.FixtureCommand.Execute(System.Object)\">\n            <summary>\n            Sets the fixtures on the test class by calling SetFixture, then\n            calls the inner command.\n            </summary>\n            <param name=\"testClass\">The instance of the test class</param>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestTimer\">\n            <summary>\n            A timer class used to figure out how long tests take to run. On most .NET implementations\n            this will use the <see cref=\"T:System.Diagnostics.Stopwatch\"/> class because it's a high\n            resolution timer; however, on Silverlight/CoreCLR, it will use <see cref=\"T:System.DateTime\"/>\n            (which will provide lower resolution results).\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestTimer.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TestTimer\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestTimer.Start\">\n            <summary>\n            Starts timing.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestTimer.Stop\">\n            <summary>\n            Stops timing.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestTimer.ElapsedMilliseconds\">\n            <summary>\n            Gets how long the timer ran, in milliseconds. In order for this to be valid,\n            both <see cref=\"M:Xunit.Sdk.TestTimer.Start\"/> and <see cref=\"M:Xunit.Sdk.TestTimer.Stop\"/> must have been called.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.TraitAttribute\">\n            <summary>\n            Attribute used to decorate a test method with arbitrary name/value pairs (\"traits\").\n            </summary>\n        </member>\n        <member name=\"M:Xunit.TraitAttribute.#ctor(System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.TraitAttribute\"/> class.\n            </summary>\n            <param name=\"name\">The trait name</param>\n            <param name=\"value\">The trait value</param>\n        </member>\n        <member name=\"P:Xunit.TraitAttribute.Name\">\n            <summary>\n            Gets the trait name.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.TraitAttribute.TypeId\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.TraitAttribute.Value\">\n            <summary>\n            Gets the trait value.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestClassCommandRunner\">\n            <summary>\n            Runner that executes an <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/> synchronously.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommandRunner.Execute(Xunit.Sdk.ITestClassCommand,System.Collections.Generic.List{Xunit.Sdk.IMethodInfo},System.Predicate{Xunit.Sdk.ITestCommand},System.Predicate{Xunit.Sdk.ITestResult})\">\n            <summary>\n            Execute the <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/>.\n            </summary>\n            <param name=\"testClassCommand\">The test class command to execute</param>\n            <param name=\"methods\">The methods to execute; if null or empty, all methods will be executed</param>\n            <param name=\"startCallback\">The start run callback</param>\n            <param name=\"resultCallback\">The end run result callback</param>\n            <returns>A <see cref=\"T:Xunit.Sdk.ClassResult\"/> with the results of the test run</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestClassCommandFactory\">\n            <summary>\n            Factory for <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/> objects, based on the type under test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommandFactory.Make(System.Type)\">\n            <summary>\n            Creates the test class command, which implements <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/>, for a given type.\n            </summary>\n            <param name=\"type\">The type under test</param>\n            <returns>The test class command, if the class is a test class; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommandFactory.Make(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Creates the test class command, which implements <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/>, for a given type.\n            </summary>\n            <param name=\"typeInfo\">The type under test</param>\n            <returns>The test class command, if the class is a test class; null, otherwise</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestClassCommand\">\n            <summary>\n            Represents an xUnit.net test class\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ITestClassCommand\">\n            <summary>\n            Interface which describes the ability to executes all the tests in a test class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.ChooseNextTest(System.Collections.Generic.ICollection{Xunit.Sdk.IMethodInfo})\">\n            <summary>\n            Allows the test class command to choose the next test to be run from the list of\n            tests that have not yet been run, thereby allowing it to choose the run order.\n            </summary>\n            <param name=\"testsLeftToRun\">The tests remaining to be run</param>\n            <returns>The index of the test that should be run</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.ClassFinish\">\n            <summary>\n            Execute actions to be run after all the test methods of this test class are run.\n            </summary>\n            <returns>Returns the <see cref=\"T:System.Exception\"/> thrown during execution, if any; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.ClassStart\">\n            <summary>\n            Execute actions to be run before any of the test methods of this test class are run.\n            </summary>\n            <returns>Returns the <see cref=\"T:System.Exception\"/> thrown during execution, if any; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.EnumerateTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Enumerates the test commands for a given test method in this test class.\n            </summary>\n            <param name=\"testMethod\">The method under test</param>\n            <returns>The test commands for the given test method</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.EnumerateTestMethods\">\n            <summary>\n            Enumerates the methods which are test methods in this test class.\n            </summary>\n            <returns>The test methods</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITestClassCommand.IsTestMethod(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines if a given <see cref=\"T:Xunit.Sdk.IMethodInfo\"/> refers to a test method.\n            </summary>\n            <param name=\"testMethod\">The test method to validate</param>\n            <returns>True if the method is a test method; false, otherwise</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestClassCommand.ObjectUnderTest\">\n            <summary>\n            Gets the object instance that is under test. May return null if you wish\n            the test framework to create a new object instance for each test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITestClassCommand.TypeUnderTest\">\n            <summary>\n            Gets or sets the type that is being tested\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.#ctor\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TestClassCommand\"/> class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.#ctor(System.Type)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TestClassCommand\"/> class.\n            </summary>\n            <param name=\"typeUnderTest\">The type under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.#ctor(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TestClassCommand\"/> class.\n            </summary>\n            <param name=\"typeUnderTest\">The type under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.ChooseNextTest(System.Collections.Generic.ICollection{Xunit.Sdk.IMethodInfo})\">\n            <summary>\n            Chooses the next test to run, randomly, using the <see cref=\"P:Xunit.Sdk.TestClassCommand.Randomizer\"/>.\n            </summary>\n            <param name=\"testsLeftToRun\">The tests remaining to be run</param>\n            <returns>The index of the test that should be run</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.ClassFinish\">\n            <summary>\n            Execute actions to be run after all the test methods of this test class are run.\n            </summary>\n            <returns>Returns the <see cref=\"T:System.Exception\"/> thrown during execution, if any; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.ClassStart\">\n            <summary>\n            Execute actions to be run before any of the test methods of this test class are run.\n            </summary>\n            <returns>Returns the <see cref=\"T:System.Exception\"/> thrown during execution, if any; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.EnumerateTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Enumerates the test commands for a given test method in this test class.\n            </summary>\n            <param name=\"testMethod\">The method under test</param>\n            <returns>The test commands for the given test method</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.EnumerateTestMethods\">\n            <summary>\n            Enumerates the methods which are test methods in this test class.\n            </summary>\n            <returns>The test methods</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestClassCommand.IsTestMethod(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines if a given <see cref=\"T:Xunit.Sdk.IMethodInfo\"/> refers to a test method.\n            </summary>\n            <param name=\"testMethod\">The test method to validate</param>\n            <returns>True if the method is a test method; false, otherwise</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestClassCommand.ObjectUnderTest\">\n            <summary>\n            Gets the object instance that is under test. May return null if you wish\n            the test framework to create a new object instance for each test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestClassCommand.Randomizer\">\n            <summary>\n            Gets or sets the randomizer used to determine the order in which tests are run.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.TestClassCommand.TypeUnderTest\">\n            <summary>\n            Sets the type that is being tested\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.SkipCommand\">\n            <summary>\n            Implementation of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> that represents a skipped test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipCommand.#ctor(Xunit.Sdk.IMethodInfo,System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.SkipCommand\"/> class.\n            </summary>\n            <param name=\"testMethod\">The method that is being skipped</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n            <param name=\"reason\">The reason the test was skipped.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipCommand.Execute(System.Object)\">\n            <inheritdoc/>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipCommand.ToStartXml\">\n            <inheritdoc/>\n        </member>\n        <member name=\"P:Xunit.Sdk.SkipCommand.Reason\">\n            <summary>\n            Gets the skip reason.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.SkipCommand.ShouldCreateInstance\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.Sdk.TestCommandFactory\">\n            <summary>\n            Factory for creating <see cref=\"T:Xunit.Sdk.ITestCommand\"/> objects.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TestCommandFactory.Make(Xunit.Sdk.ITestClassCommand,Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Make instances of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> objects for the given class and method.\n            </summary>\n            <param name=\"classCommand\">The class command</param>\n            <param name=\"method\">The method under test</param>\n            <returns>The set of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> objects</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TimedCommand\">\n            <summary>\n            A command wrapper which times the running of a command.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TimedCommand.#ctor(Xunit.Sdk.ITestCommand)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TimedCommand\"/> class.\n            </summary>\n            <param name=\"innerCommand\">The command that will be timed.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TimedCommand.Execute(System.Object)\">\n            <summary>\n            Executes the inner test method, gathering the amount of time it takes to run.\n            </summary>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TimeoutCommand\">\n            <summary>\n            Wraps a command which should fail if it runs longer than the given timeout value.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TimeoutCommand.#ctor(Xunit.Sdk.ITestCommand,System.Int32,Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TimeoutCommand\"/> class.\n            </summary>\n            <param name=\"innerCommand\">The command to be run</param>\n            <param name=\"timeout\">The timout, in milliseconds</param>\n            <param name=\"testMethod\">The method under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.TimeoutCommand.Execute(System.Object)\">\n            <summary>\n            Executes the test method, failing if it takes too long.\n            </summary>\n            <returns>Returns information about the test run</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.TimeoutCommand.Timeout\">\n            <inheritdoc/>\n        </member>\n        <member name=\"T:Xunit.RunWithAttribute\">\n            <summary>\n            Attributes used to decorate a test fixture that is run with an alternate test runner.\n            The test runner must implement the <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/> interface.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.RunWithAttribute.#ctor(System.Type)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.RunWithAttribute\"/> class.\n            </summary>\n            <param name=\"testClassCommand\">The class which implements ITestClassCommand and acts as the runner\n            for the test fixture.</param>\n        </member>\n        <member name=\"P:Xunit.RunWithAttribute.TestClassCommand\">\n            <summary>\n            Gets the test class command.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.SameException\">\n            <summary>\n            Exception thrown when two object references are unexpectedly not the same instance.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.SameException.#ctor(System.Object,System.Object)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.SameException\"/> class.\n            </summary>\n            <param name=\"expected\">The expected object reference</param>\n            <param name=\"actual\">The actual object reference</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.AssemblyResult\">\n            <summary>\n            Contains the test results from an assembly.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.CompositeResult\">\n            <summary>\n            Contains multiple test results, representing them as a composite test result.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.CompositeResult.Add(Xunit.Sdk.ITestResult)\">\n            <summary>\n            Adds a test result to the composite test result list.\n            </summary>\n            <param name=\"testResult\"></param>\n        </member>\n        <member name=\"P:Xunit.Sdk.CompositeResult.Results\">\n            <summary>\n            Gets the test results.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssemblyResult.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.AssemblyResult\"/> class.\n            </summary>\n            <param name=\"assemblyFilename\">The filename of the assembly</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssemblyResult.#ctor(System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.AssemblyResult\"/> class.\n            </summary>\n            <param name=\"assemblyFilename\">The filename of the assembly</param>\n            <param name=\"configFilename\">The configuration filename</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.AssemblyResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.ConfigFilename\">\n            <summary>\n            Gets the fully qualified filename of the configuration file.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.Directory\">\n            <summary>\n            Gets the directory where the assembly resides.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.FailCount\">\n            <summary>\n            Gets the number of failed results.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.Filename\">\n            <summary>\n            Gets the fully qualified filename of the assembly.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.PassCount\">\n            <summary>\n            Gets the number of passed results.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.AssemblyResult.SkipCount\">\n            <summary>\n            Gets the number of skipped results.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ClassResult\">\n            <summary>\n            Contains the test results from a test class.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ClassResult.#ctor(System.Type)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ClassResult\"/> class.\n            </summary>\n            <param name=\"type\">The type under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ClassResult.#ctor(System.String,System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ClassResult\"/> class.\n            </summary>\n            <param name=\"typeName\">The simple name of the type under test</param>\n            <param name=\"typeFullName\">The fully qualified name of the type under test</param>\n            <param name=\"typeNamespace\">The namespace of the type under test</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ClassResult.SetException(System.Exception)\">\n            <summary>\n            Sets the exception thrown by the test fixture.\n            </summary>\n            <param name=\"ex\">The thrown exception</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ClassResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.ExceptionType\">\n            <summary>\n            Gets the fully qualified test fixture exception type, when an exception has occurred.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.FailCount\">\n            <summary>\n            Gets the number of tests which failed.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.FullyQualifiedName\">\n            <summary>\n            Gets the fully qualified name of the type under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.Message\">\n            <summary>\n            Gets the test fixture exception message, when an exception has occurred.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.Name\">\n            <summary>\n            Gets the simple name of the type under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.Namespace\">\n            <summary>\n            Gets the namespace of the type under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.PassCount\">\n            <summary>\n            Gets the number of tests which passed.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.SkipCount\">\n            <summary>\n            Gets the number of tests which were skipped.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ClassResult.StackTrace\">\n            <summary>\n            Gets the test fixture exception stack trace, when an exception has occurred.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.FailedResult\">\n            <summary>\n            Represents a failed test result.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.MethodResult\">\n            <summary>\n            Represents the results from running a test method\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodResult.#ctor(Xunit.Sdk.IMethodInfo,System.String)\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.MethodResult\"/> class. The traits for\n            the test method are discovered using reflection.\n            </summary>\n            <param name=\"method\">The method under test.</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodResult.#ctor(System.String,System.String,System.String,Xunit.Sdk.MultiValueDictionary{System.String,System.String})\">\n            <summary>\n            Initializes a new instance of the <see cref=\"T:Xunit.Sdk.MethodResult\"/> class.\n            </summary>\n            <param name=\"methodName\">The name of the method under test.</param>\n            <param name=\"typeName\">The type of the method under test.</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n            <param name=\"traits\">The traits.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.MethodResult.DisplayName\">\n            <summary>\n            Gets or sets the display name of the method under test. This is the value that's shown\n            during failures and in the resulting output XML.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MethodResult.MethodName\">\n            <summary>\n            Gets the name of the method under test.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MethodResult.Output\">\n            <summary>\n            Gets or sets the standard output/standard error from the test that was captured\n            while the test was running.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MethodResult.Traits\">\n            <summary>\n            Gets the traits attached to the test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.MethodResult.TypeName\">\n            <summary>\n            Gets the name of the type under test.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.FailedResult.#ctor(Xunit.Sdk.IMethodInfo,System.Exception,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.FailedResult\"/> class.\n            </summary>\n            <param name=\"method\">The method under test</param>\n            <param name=\"exception\">The exception throw by the test</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.FailedResult.#ctor(System.String,System.String,System.String,Xunit.Sdk.MultiValueDictionary{System.String,System.String},System.String,System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.FailedResult\"/> class.\n            </summary>\n            <param name=\"methodName\">The name of the method under test</param>\n            <param name=\"typeName\">The name of the type under test</param>\n            <param name=\"displayName\">The display name of the test</param>\n            <param name=\"traits\">The custom properties attached to the test method</param>\n            <param name=\"exceptionType\">The full type name of the exception throw</param>\n            <param name=\"message\">The exception message</param>\n            <param name=\"stackTrace\">The exception stack trace</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.FailedResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.FailedResult.ExceptionType\">\n            <summary>\n            Gets the exception type thrown by the test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.FailedResult.Message\">\n            <summary>\n            Gets the exception message thrown by the test method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.FailedResult.StackTrace\">\n            <summary>\n            Gets the stack trace of the exception thrown by the test method.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.PassedResult\">\n            <summary>\n            Represents a passing test result.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.PassedResult.#ctor(Xunit.Sdk.IMethodInfo,System.String)\">\n            <summary>\n            Create a new instance of the <see cref=\"T:Xunit.Sdk.PassedResult\"/> class.\n            </summary>\n            <param name=\"method\">The method under test</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.PassedResult.#ctor(System.String,System.String,System.String,Xunit.Sdk.MultiValueDictionary{System.String,System.String})\">\n            <summary>\n            Create a new instance of the <see cref=\"T:Xunit.Sdk.PassedResult\"/> class.\n            </summary>\n            <param name=\"methodName\">The name of the method under test</param>\n            <param name=\"typeName\">The name of the type under test</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n            <param name=\"traits\">The custom properties attached to the test method</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.PassedResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.SkipResult\">\n            <summary>\n            Represents a skipped test result.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipResult.#ctor(Xunit.Sdk.IMethodInfo,System.String,System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.SkipResult\"/> class. Uses reflection to discover\n            the skip reason.\n            </summary>\n            <param name=\"method\">The method under test</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n            <param name=\"reason\">The reason the test was skipped.</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipResult.#ctor(System.String,System.String,System.String,Xunit.Sdk.MultiValueDictionary{System.String,System.String},System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.SkipResult\"/> class.\n            </summary>\n            <param name=\"methodName\">The name of the method under test</param>\n            <param name=\"typeName\">The name of the type under test</param>\n            <param name=\"displayName\">The display name for the test. If null, the fully qualified\n            type name is used.</param>\n            <param name=\"traits\">The traits attached to the method under test</param>\n            <param name=\"reason\">The skip reason</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.SkipResult.ToXml(System.Xml.XmlNode)\">\n            <summary>\n            Converts the test result into XML that is consumed by the test runners.\n            </summary>\n            <param name=\"parentNode\">The parent node.</param>\n            <returns>The newly created XML node.</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.SkipResult.Reason\">\n            <summary>\n            Gets the skip reason.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.IAttributeInfo\">\n            <summary>\n            Represents information about an attribute.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.IAttributeInfo.GetInstance``1\">\n            <summary>\n            Gets the instance of the attribute, if available.\n            </summary>\n            <typeparam name=\"T\">The type of the attribute</typeparam>\n            <returns>The instance of the attribute, if available.</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.IAttributeInfo.GetPropertyValue``1(System.String)\">\n            <summary>\n            Gets an initialized property value of the attribute.\n            </summary>\n            <typeparam name=\"TValue\">The type of the property</typeparam>\n            <param name=\"propertyName\">The name of the property</param>\n            <returns>The property value</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.IMethodInfo\">\n            <summary>\n            Represents information about a method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.IMethodInfo.CreateInstance\">\n            <summary>\n            Creates an instance of the type where this test method was found. If using\n            reflection, this should be the ReflectedType.\n            </summary>\n            <returns>A new instance of the type.</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.IMethodInfo.GetCustomAttributes(System.Type)\">\n            <summary>\n            Gets all the custom attributes for the method that are of the given type.\n            </summary>\n            <param name=\"attributeType\">The type of the attribute</param>\n            <returns>The matching attributes that decorate the method</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.IMethodInfo.HasAttribute(System.Type)\">\n            <summary>\n            Determines if the method has at least one instance of the given attribute type.\n            </summary>\n            <param name=\"attributeType\">The type of the attribute</param>\n            <returns>True if the method has at least one instance of the given attribute type; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.IMethodInfo.Invoke(System.Object,System.Object[])\">\n            <summary>\n            Invokes the test on the given class, with the given parameters.\n            </summary>\n            <param name=\"testClass\">The instance of the test class (may be null if\n            the test method is static).</param>\n            <param name=\"parameters\">The parameters to be passed to the test method.</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.Class\">\n            <summary>\n            Gets a value which represents the class that this method was\n            reflected from (i.e., equivalent to MethodInfo.ReflectedType)\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.IsAbstract\">\n            <summary>\n            Gets a value indicating whether the method is abstract.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.IsStatic\">\n            <summary>\n            Gets a value indicating whether the method is static.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.MethodInfo\">\n            <summary>\n            Gets the underlying <see cref=\"P:Xunit.Sdk.IMethodInfo.MethodInfo\"/> for the method, if available.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.Name\">\n            <summary>\n            Gets the name of the method.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.ReturnType\">\n            <summary>\n            Gets the fully qualified type name of the return type.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.IMethodInfo.TypeName\">\n            <summary>\n            Gets the fully qualified type name of the type that this method belongs to. If\n            using reflection, this should be the ReflectedType.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ITypeInfo\">\n            <summary>\n            Represents information about a type.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITypeInfo.GetCustomAttributes(System.Type)\">\n            <summary>\n            Gets all the custom attributes for the type that are of the given attribute type.\n            </summary>\n            <param name=\"attributeType\">The type of the attribute</param>\n            <returns>The matching attributes that decorate the type</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITypeInfo.GetMethod(System.String)\">\n            <summary>\n            Gets a test method by name.\n            </summary>\n            <param name=\"methodName\">The name of the method</param>\n            <returns>The method, if it exists; null, otherwise.</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITypeInfo.GetMethods\">\n            <summary>\n            Gets all the methods \n            </summary>\n            <returns></returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITypeInfo.HasAttribute(System.Type)\">\n            <summary>\n            Determines if the type has at least one instance of the given attribute type.\n            </summary>\n            <param name=\"attributeType\">The type of the attribute</param>\n            <returns>True if the type has at least one instance of the given attribute type; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.ITypeInfo.HasInterface(System.Type)\">\n            <summary>\n            Determines if the type implements the given interface.\n            </summary>\n            <param name=\"interfaceType\">The type of the interface</param>\n            <returns>True if the type implements the given interface; false, otherwise</returns>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITypeInfo.IsAbstract\">\n            <summary>\n            Gets a value indicating whether the type is abstract.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITypeInfo.IsSealed\">\n            <summary>\n            Gets a value indicating whether the type is sealed.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.Sdk.ITypeInfo.Type\">\n            <summary>\n            Gets the underlying <see cref=\"P:Xunit.Sdk.ITypeInfo.Type\"/> object, if available.\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.MethodUtility\">\n            <summary>\n            Utility class which inspects methods for test information\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.GetDisplayName(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Gets the display name.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>The display name</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.GetSkipReason(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Gets the skip reason from a test method.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>The skip reason</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.GetTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Gets the test commands for a test method.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>The <see cref=\"T:Xunit.Sdk.ITestCommand\"/> objects for the test method</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.GetTimeoutParameter(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Gets the timeout value for a test method.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>The timeout, in milliseconds</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.GetTraits(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Gets the traits on a test method.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>A dictionary of the traits</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.HasTimeout(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines whether a test method has a timeout.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>True if the method has a timeout; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.HasTraits(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines whether a test method has traits.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>True if the method has traits; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.IsSkip(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines whether a test method should be skipped.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>True if the method should be skipped; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.MethodUtility.IsTest(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Determines whether a method is a test method. A test method must be decorated\n            with the <see cref=\"T:Xunit.FactAttribute\"/> (or derived class) and must not be abstract.\n            </summary>\n            <param name=\"method\">The method to be inspected</param>\n            <returns>True if the method is a test method; false, otherwise</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.Reflector\">\n            <summary>\n            Wrapper to implement <see cref=\"T:Xunit.Sdk.IMethodInfo\"/> and <see cref=\"T:Xunit.Sdk.ITypeInfo\"/> using reflection.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.Reflector.Wrap(System.Attribute)\">\n            <summary>\n            Converts an <see cref=\"T:System.Attribute\"/> into an <see cref=\"T:Xunit.Sdk.IAttributeInfo\"/> using reflection.\n            </summary>\n            <param name=\"attribute\"></param>\n            <returns></returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.Reflector.Wrap(System.Reflection.MethodInfo)\">\n            <summary>\n            Converts a <see cref=\"T:System.Reflection.MethodInfo\"/> into an <see cref=\"T:Xunit.Sdk.IMethodInfo\"/> using reflection.\n            </summary>\n            <param name=\"method\">The method to wrap</param>\n            <returns>The wrapper</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.Reflector.Wrap(System.Type)\">\n            <summary>\n            Converts a <see cref=\"T:System.Type\"/> into an <see cref=\"T:Xunit.Sdk.ITypeInfo\"/> using reflection.\n            </summary>\n            <param name=\"type\">The type to wrap</param>\n            <returns>The wrapper</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TypeUtility\">\n            <summary>\n            Utility class which inspects types for test information\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.ContainsTestMethods(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines if a type contains any test methods\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>True if the class contains any test methods; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.GetRunWith(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Retrieves the type to run the test class with from the <see cref=\"T:Xunit.RunWithAttribute\"/>, if present.\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>The type of the test class runner, if present; null, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.GetTestMethods(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Retrieves a list of the test methods from the test class.\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>The test methods</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.HasRunWith(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines if the test class has a <see cref=\"T:Xunit.RunWithAttribute\"/> applied to it.\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>True if the test class has a run with attribute; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.ImplementsITestClassCommand(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines if the type implements <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/>.\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>True if the type implements <see cref=\"T:Xunit.Sdk.ITestClassCommand\"/>; false, otherwise</returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.IsAbstract(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines whether the specified type is abstract.\n            </summary>\n            <param name=\"type\">The type.</param>\n            <returns>\n            \t<c>true</c> if the specified type is abstract; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.IsStatic(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines whether the specified type is static.\n            </summary>\n            <param name=\"type\">The type.</param>\n            <returns>\n            \t<c>true</c> if the specified type is static; otherwise, <c>false</c>.\n            </returns>\n        </member>\n        <member name=\"M:Xunit.Sdk.TypeUtility.IsTestClass(Xunit.Sdk.ITypeInfo)\">\n            <summary>\n            Determines if a class is a test class.\n            </summary>\n            <param name=\"type\">The type to be inspected</param>\n            <returns>True if the type is a test class; false, otherwise</returns>\n        </member>\n        <member name=\"T:Xunit.FactAttribute\">\n            <summary>\n            Attribute that is applied to a method to indicate that it is a fact that should be run\n            by the test runner. It can also be extended to support a customized definition of a\n            test method.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.FactAttribute.CreateTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Creates instances of <see cref=\"T:Xunit.Sdk.ITestCommand\"/> which represent individual intended\n            invocations of the test method.\n            </summary>\n            <param name=\"method\">The method under test</param>\n            <returns>An enumerator through the desired test method invocations</returns>\n        </member>\n        <member name=\"M:Xunit.FactAttribute.EnumerateTestCommands(Xunit.Sdk.IMethodInfo)\">\n            <summary>\n            Enumerates the test commands represented by this test method. Derived classes should\n            override this method to return instances of <see cref=\"T:Xunit.Sdk.ITestCommand\"/>, one per execution\n            of a test method.\n            </summary>\n            <param name=\"method\">The test method</param>\n            <returns>The test commands which will execute the test runs for the given method</returns>\n        </member>\n        <member name=\"P:Xunit.FactAttribute.DisplayName\">\n            <summary>\n            Gets the name of the test to be used when the test is skipped. Defaults to\n            null, which will cause the fully qualified test name to be used.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.FactAttribute.Name\">\n            <summary>\n            Obsolete. Please use the <see cref=\"P:Xunit.FactAttribute.DisplayName\"/> property instead.\n            </summary>\n        </member>\n        <member name=\"P:Xunit.FactAttribute.Skip\">\n            <summary>\n            Marks the test so that it will not be run, and gets or sets the skip reason\n            </summary>\n        </member>\n        <member name=\"P:Xunit.FactAttribute.Timeout\">\n            <summary>\n            Marks the test as failing if it does not finish running within the given time\n            period, in milliseconds; set to 0 or less to indicate the method has no timeout\n            </summary>\n        </member>\n        <member name=\"T:Xunit.Sdk.ThrowsException\">\n            <summary>\n            Exception thrown when code unexpectedly fails to throw an exception.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.ThrowsException.#ctor(System.Type)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ThrowsException\"/> class. Call this constructor\n            when no exception was thrown.\n            </summary>\n            <param name=\"expectedType\">The type of the exception that was expected</param>\n        </member>\n        <member name=\"M:Xunit.Sdk.ThrowsException.#ctor(System.Type,System.Exception)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.ThrowsException\"/> class. Call this constructor\n            when an exception of the wrong type was thrown.\n            </summary>\n            <param name=\"expectedType\">The type of the exception that was expected</param>\n            <param name=\"actual\">The actual exception that was thrown</param>\n        </member>\n        <member name=\"P:Xunit.Sdk.ThrowsException.StackTrace\">\n            <summary>\n            Gets a string representation of the frames on the call stack at the time the current exception was thrown.\n            </summary>\n            <returns>A string that describes the contents of the call stack, with the most recent method call appearing first.</returns>\n        </member>\n        <member name=\"T:Xunit.Sdk.TimeoutException\">\n            <summary>\n            Exception thrown when a test method exceeds the given timeout value\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TimeoutException.#ctor(System.Int64)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TimeoutException\"/> class.\n            </summary>\n            <param name=\"timeout\">The timeout value, in milliseconds</param>\n        </member>\n        <member name=\"T:Xunit.Sdk.TrueException\">\n            <summary>\n            Exception thrown when a value is unexpectedly false.\n            </summary>\n        </member>\n        <member name=\"M:Xunit.Sdk.TrueException.#ctor(System.String)\">\n            <summary>\n            Creates a new instance of the <see cref=\"T:Xunit.Sdk.TrueException\"/> class.\n            </summary>\n            <param name=\"userMessage\">The user message to be displayed, or null for the default message</param>\n        </member>\n    </members>\n</doc>\n"
  },
  {
    "path": "Build-Solution.ps1",
    "content": "$scriptPath = Split-Path $MyInvocation.MyCommand.Path\n\n$projFile = join-path $scriptPath WebBackgrounder.msbuild\n \n& \"$(get-content env:windir)\\Microsoft.NET\\Framework\\v4.0.30319\\MSBuild.exe\" $projFile /t:FullBuild"
  },
  {
    "path": "License.txt",
    "content": "  Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n \n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n \n   1. Definitions.\n \n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n \n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n \n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n \n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n \n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n \n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n \n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n \n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n \n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n \n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n \n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n \n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n \n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n \n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n \n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n \n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n \n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n \n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n \n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n \n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n \n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n \n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n \n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n \n   END OF TERMS AND CONDITIONS\n"
  },
  {
    "path": "README.md",
    "content": "# Intro\nWebBackgrounder is a proof-of-concept of a web-farm friendly background task \nmanager meant to just work with a vanilla ASP.NET web application.\n\n# Open Source Code of Conduct\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n# Problem Statement\nCode that runs within ASP.NET does not own the App Domain. IIS and ASP.NET are \nfree to shut down the app domain at any moment.\n\nTypically, when that happens, ASP.NET flushes the requests giving them time to \nfinish what they're doing before tearing down the App Domain.\n\nBut if you're doing work on background thread that ASP.NET doesn't know about, \nit could end up tearing down the app domain in the middle of the work, leaving \nyour data in a potentially invalid state.\n\nThere are ways to notify ASP.NET that work is in progress. WebBackgrounder \ndemonstrates the use of such facilities.\n\nLikewise, if you have multiple web servers in a farm, you'd like some small \namount of coordination between them without them having to explicitly know \nabout each other so they don't duplicate each other's work.\n\n# Why not use Azure Queues or a Scheduled Task?\nFor an enterprise solution, using an Azure Queue, a Windows Service, or a \nsystem level scheduled task are much better solutions. The goal of this project \nwould be to allow those to easily hook in and provide this functionality.\n\nBut for a small project, or for development environments, you still want these \ntasks to run without requiring a bunch of setup or a connection to Azure.\n\n# What this is not\nThis is not a general purpose scheduling framework. There are much better ones \nout there such as hangfire.io, FluentScheduler and Quartz.net. The goal of this project is \nto handle one task only, manage a recurring task on an interval in the \nbackground for a web app.\n\nThe needs I have are very simple. I didn't need a high fidelity scheduler. \nMaybe later, I'll look to integrate what I've done with one of the others. \nBut for now, this scratches an itch.\n"
  },
  {
    "path": "WebBackgrounder.msbuild",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Condition=\"'$(Configuration)' == ''\">\n    <Configuration>Debug</Configuration>\n  </PropertyGroup>\n\n  <UsingTask AssemblyFile=\".\\3rdParty\\xunit\\xunit.runner.msbuild.dll\" TaskName=\"Xunit.Runner.MSBuild.xunit\" />\n  \n  <Target Name=\"Clean\">\n    <MSBuild Projects=\".\\src\\WebBackgrounder.sln\" Targets=\"Clean\" Properties=\"Configuration=$(Configuration)\"/>\n  </Target>\n  \n  <Target Name=\"Build\" DependsOnTargets=\"Clean\">\n    <MSBuild Projects=\".\\src\\WebBackgrounder.sln\" Targets=\"Build\" Properties=\"Configuration=$(Configuration)\" />\n  </Target>\n\n  <Target Name=\"RunFacts\" DependsOnTargets=\"Build\"> \n    <xunit Assembly=\".\\src\\WebBackgrounder.UnitTests\\bin\\$(Configuration)\\WebBackgrounder.UnitTests.dll\" Xml=\"WebBackgrounder.UnitTests.results.xml\" />\n  </Target>\n \n  <Target Name=\"FullBuild\" DependsOnTargets=\"RunFacts\" />\n</Project>\n"
  },
  {
    "path": "src/.nuget/NuGet.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <PropertyGroup>\n        <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">$(MSBuildProjectDirectory)\\..\\</SolutionDir>\n        <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>\n        <NuGetExePath>$(NuGetToolsPath)\\nuget.exe</NuGetExePath>\n        <PackagesConfig>$(ProjectDir)packages.config</PackagesConfig>\n        <PackagesDir>$(SolutionDir)packages</PackagesDir>\n        <PackageOutputDir Condition=\"$(PackageOutputDir) == ''\">$(TargetDir.Trim('\\\\'))</PackageOutputDir>\n\n        <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\\NuGet\\NuGet.Config -->\n        <PackageSources>\"\"</PackageSources>\n\n        <!-- Enable the restore command to run before builds -->\n        <RestorePackages Condition=\"$(RestorePackages) == ''\">false</RestorePackages>\n\n        <!-- Property that enables building a package from a project -->\n        <BuildPackage Condition=\"$(BuildPackage) == ''\">false</BuildPackage>\n\n        <!-- Commands -->\n        <RestoreCommand>\"$(NuGetExePath)\" install \"$(PackagesConfig)\" -source $(PackageSources) -o \"$(PackagesDir)\"</RestoreCommand>\n        <BuildCommand>\"$(NuGetExePath)\" pack \"$(ProjectPath)\" -p Configuration=$(Configuration) -o \"$(PackageOutputDir)\" -symbols</BuildCommand>\n\n        <!-- Make the build depend on restore packages -->\n        <BuildDependsOn Condition=\"$(RestorePackages) == 'true'\">\n            RestorePackages;\n            $(BuildDependsOn);\n        </BuildDependsOn>\n\n        <!-- Make the build depend on restore packages -->\n        <BuildDependsOn Condition=\"$(BuildPackage) == 'true'\">\n            $(BuildDependsOn);\n            BuildPackage;\n        </BuildDependsOn>\n    </PropertyGroup>\n    \n    <Target Name=\"CheckPrerequisites\">\n        <!-- Raise an error if we're unable to locate nuget.exe  -->\n        <Error Condition=\"!Exists('$(NuGetExePath)')\" Text=\"Unable to locate '$(NuGetExePath)'\" />\n    </Target>\n</Project>"
  },
  {
    "path": "src/.nuget/NuGet.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n    <Import Project=\"NuGet.settings.targets\"/>\n    \n    <Target Name=\"RestorePackages\" DependsOnTargets=\"CheckPrerequisites\">\n        <Exec Command=\"$(RestoreCommand)\"\n              LogStandardErrorAsError=\"true\"\n              Condition=\"Exists('$(PackagesConfig)')\" />\n    </Target>\n\n    <Target Name=\"BuildPackage\" DependsOnTargets=\"CheckPrerequisites\">\n        <Exec Command=\"$(BuildCommand)\"\n              LogStandardErrorAsError=\"true\" />\n    </Target>\n</Project>"
  },
  {
    "path": "src/WebBackgrounder/IJob.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    public interface IJob\n    {\n        /// <summary>\n        /// Identifies the type of job. For example, \"UpdateStats\"\n        /// </summary>\n        string Name { get; }\n\n        Task Execute();\n\n        TimeSpan Interval { get; }\n\n        TimeSpan Timeout { get; }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/IJobCoordinator.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    public interface IJobCoordinator : IDisposable\n    {\n        /// <summary>\n        /// Coordinates the work to be done and returns a task that wraps \n        /// the work as well as the coordination of that work.\n        /// </summary>\n        /// <param name=\"job\"></param>\n        Task GetWork(IJob job);\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/IJobHost.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    /// <summary>\n    /// Represents the environment that is hosting the task manager. \n    /// Typically a web application such as ASP.NET.\n    /// </summary>\n    public interface IJobHost\n    {\n        void DoWork(Task work);\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/IWorkItem.cs",
    "content": "﻿using System;\n\nnamespace WebBackgrounder\n{\n    public interface IWorkItem\n    {\n        long Id { get; set; }\n        DateTime Started { get; set; }\n        DateTime? Completed { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/IWorkItemRepository.cs",
    "content": "﻿using System;\n\nnamespace WebBackgrounder\n{\n    public interface IWorkItemRepository : IDisposable\n    {\n        void RunInTransaction(Action query);\n        IWorkItem GetLastWorkItem(IJob job);\n        long CreateWorkItem(string workerId, IJob job);\n        void SetWorkItemCompleted(long workItemId);\n        void SetWorkItemFailed(long workItemId, Exception exception);\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/Job.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    public abstract class Job : IJob\n    {\n        protected Job(string name, TimeSpan interval, TimeSpan timeout)\n        {\n            Name = name;\n            Interval = interval;\n            Timeout = timeout;\n        }\n\n        protected Job(string name, TimeSpan interval) : this(name, interval, TimeSpan.MaxValue) { }\n\n        public string Name\n        {\n            get;\n            private set;\n        }\n\n        public abstract Task Execute();\n\n        public TimeSpan Interval\n        {\n            get;\n            private set;\n        }\n\n        public TimeSpan Timeout\n        {\n            get;\n            private set;\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder/JobHost.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing System.Web.Hosting;\n\nnamespace WebBackgrounder\n{\n    public class JobHost : IJobHost, IRegisteredObject\n    {\n        readonly object _lock = new object();\n        bool _shuttingDown;\n\n        public JobHost()\n        {\n            HostingEnvironment.RegisterObject(this);\n        }\n\n        public void Stop(bool immediate)\n        {\n            lock (_lock)\n            {\n                _shuttingDown = true;\n            }\n            HostingEnvironment.UnregisterObject(this);\n        }\n\n        public void DoWork(Task work)\n        {\n            if (work == null)\n            {\n                throw new ArgumentNullException(\"work\");\n            }\n            lock (_lock)\n            {\n                if (_shuttingDown)\n                {\n                    return;\n                }\n\n                if (work.Status == TaskStatus.Created)\r\n                {\r\n                    work.Start();\r\n                }\n\n                // Need to hold the lock until the task completes.\n                // Later on, we should take advantage of the fact that the work is represented \n                // by a task. Instead of locking, we could simply have the Stop method cancel \n                // any pending tasks.\n                work.Wait();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/JobManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\n\nnamespace WebBackgrounder\n{\n    public class JobManager : IDisposable\n    {\n        readonly IJobHost _host;\n        readonly Timer _timer;\n        readonly IJobCoordinator _coordinator;\n        readonly Scheduler _scheduler;\n        readonly IEnumerable<IJob> _jobs;\n        Action<Exception> _failHandler;\n\n        public bool RestartSchedulerOnFailure { get; set; }\n\n        public JobManager(IEnumerable<IJob> jobs, IJobHost host) : this(jobs, host, new SingleServerJobCoordinator()) { }\n\n        public JobManager(IEnumerable<IJob> jobs, IJobCoordinator coordinator) : this(jobs, new JobHost(), coordinator) { }\n\n        public JobManager(IEnumerable<IJob> jobs, IJobHost host, IJobCoordinator coordinator)\n        {\n            if (jobs == null)\n            {\n                throw new ArgumentNullException(\"jobs\");\n            }\n            if (host == null)\n            {\n                throw new ArgumentNullException(\"host\");\n            }\n            if (coordinator == null)\n            {\n                throw new ArgumentNullException(\"coordinator\");\n            }\n\n            _jobs = jobs;\n            _scheduler = new Scheduler(jobs);\n            _host = host;\n            _coordinator = coordinator;\n            _timer = new Timer(OnTimerElapsed);\n        }\n\n        public void Start()\n        {\n            _timer.Next(TimeSpan.FromMilliseconds(1));\n        }\n\n        public void Stop()\n        {\n            _timer.Stop();\n        }\n\n        void OnTimerElapsed(object sender)\n        {\n            try\n            {\n                _timer.Stop();\n                DoNextJob();\n                _timer.Next(_scheduler.Next().GetIntervalToNextRun()); // Start up again.\n            }\n            catch (Exception e)\n            {\n                OnException(e); // Someone else's problem.\n\n                if (RestartSchedulerOnFailure)\n                {\n                    _timer.Next(_scheduler.Next().GetIntervalToNextRun()); // Start up again.\n                }\n            }\n        }\n\n        void DoNextJob()\n        {\n            using (var schedule = _scheduler.Next())\n            {\n                var work = _coordinator.GetWork(schedule.Job);\n\n                if (work != null)\n                {\n                    _host.DoWork(work);\n                }\n            }\n        }\n\n        public void Dispose()\n        {\n            Stop();\n            foreach (var job in _jobs.OfType<IDisposable>())\n            {\n                job.Dispose();\n            }\n            _timer.Dispose();\n            _coordinator.Dispose();\n        }\n\n        public void Fail(Action<Exception> failHandler)\n        {\n            _failHandler = failHandler;\n        }\n\n        void OnException(Exception e)\n        {\n            var fail = _failHandler;\n            if (fail != null)\n            {\n                fail(e);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder/JobUnitOfWork.cs",
    "content": "﻿using System;\n\nnamespace WebBackgrounder\n{\n    public class JobUnitOfWork\n    {\n        readonly IWorkItemRepository _repository;\n        readonly long _workItemId;\n\n        public JobUnitOfWork(IWorkItemRepository repository, long workItemId)\n        {\n            _workItemId = workItemId;\n            _repository = repository;\n        }\n\n        public void Complete()\n        {\n            _repository.SetWorkItemCompleted(_workItemId);\n        }\n\n        public void Fail(Exception exception)\n        {\n            _repository.SetWorkItemFailed(_workItemId, exception);\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WebBackgrounder\")]\n[assembly: AssemblyDescription(\"WebBackgrounder is a proof-of-concept of a web-farm friendly background task manager meant to just work with a vanilla ASP.NET web application. See https://github.com/NuGet/WebBackgrounder for more information.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\".NET Foundation\")]\n[assembly: AssemblyProduct(\"WebBackgrounder\")]\n[assembly: AssemblyCopyright(\"Copyright © .NET Foundation 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"dcfda96a-65fa-4378-b3d6-d98091614fd2\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.2.0.0\")]\n[assembly: AssemblyFileVersion(\"0.2.0.0\")]\n[assembly: AssemblyInformationalVersion(\"0.2.0\")]\n\n"
  },
  {
    "path": "src/WebBackgrounder/Schedule.cs",
    "content": "﻿using System;\n\nnamespace WebBackgrounder\n{\n    public class Schedule : IDisposable\n    {\n        readonly Func<DateTime> _nowThunk;\n\n        public Schedule(IJob job)\n            : this(job, () => DateTime.UtcNow)\n        {\n        }\n\n        public Schedule(IJob job, Func<DateTime> nowThunk)\n        {\n            if (job == null)\n            {\n                throw new ArgumentNullException(\"job\");\n            }\n            Job = job;\n            _nowThunk = nowThunk;\n        }\n\n        public IJob Job { get; private set; }\n\n        public DateTime LastRunTime\n        {\n            get;\n            set;\n        }\n\n        public DateTime NextRunTime\n        {\n            get\n            {\n                return LastRunTime.Add(Job.Interval);\n            }\n        }\n\n        public TimeSpan GetIntervalToNextRun()\n        {\n            var now = _nowThunk();\n            if (NextRunTime < now)\n            {\n                return TimeSpan.FromMilliseconds(1);\n            }\n            return NextRunTime - now;\n        }\n\n        public void SetRunComplete()\n        {\n            LastRunTime = _nowThunk();\n        }\n\n        void IDisposable.Dispose()\n        {\n            SetRunComplete();\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/Scheduler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace WebBackgrounder\n{\n    public class Scheduler\n    {\n        readonly IEnumerable<Schedule> _schedules;\n\n        public Scheduler(IEnumerable<IJob> jobs, Func<DateTime> nowThunk)\n        {\n            if (jobs.Any(j => j.Interval < TimeSpan.Zero))\n            {\n                throw new ArgumentException(\"A job cannot have a negative interval.\", \"jobs\");\n            }\n            var lastRunTime = nowThunk();\n            _schedules = jobs.Select(job => new Schedule(job, nowThunk) { LastRunTime = lastRunTime }).ToList();\n        }\n\n        public Scheduler(IEnumerable<IJob> jobs) : this(jobs, () => DateTime.UtcNow)\n        {\n        }\n\n        public Schedule Next()\n        {\n            var schedules = _schedules.OrderBy(s => s.NextRunTime);\n            return schedules.First();\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/SingleServerJobCoordinator.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    public class SingleServerJobCoordinator : IJobCoordinator\n    {\n        public Task GetWork(IJob job)\n        {\n            return job.Execute();\n        }\n\n        public void Dispose()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/TimerExtensions.cs",
    "content": "﻿using System;\nusing System.Threading;\n\nnamespace WebBackgrounder\n{\n    public static class TimerExtensions\n    {\n        public static void Stop(this Timer timer)\n        {\n            timer.Change(Timeout.Infinite, Timeout.Infinite);\n        }\n\n        public static void Next(this Timer timer, TimeSpan dueTime)\n        {\n            timer.Change(dueTime, TimeSpan.FromMilliseconds(Timeout.Infinite));\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/WebBackgrounder.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WebBackgrounder</RootNamespace>\n    <AssemblyName>WebBackgrounder</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <BuildPackage>true</BuildPackage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"IJobCoordinator.cs\" />\n    <Compile Include=\"IJob.cs\" />\n    <Compile Include=\"IJobHost.cs\" />\n    <Compile Include=\"IWorkItem.cs\" />\n    <Compile Include=\"JobHost.cs\" />\n    <Compile Include=\"IWorkItemRepository.cs\" />\n    <Compile Include=\"Job.cs\" />\n    <Compile Include=\"JobUnitOfWork.cs\" />\n    <Compile Include=\"JobManager.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Schedule.cs\" />\n    <Compile Include=\"SingleServerJobCoordinator.cs\" />\n    <Compile Include=\"Scheduler.cs\" />\n    <Compile Include=\"TimerExtensions.cs\" />\n    <Compile Include=\"WebFarmJobCoordinator.cs\" />\n    <Compile Include=\"WorkItemExtensions.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"WebBackgrounder.nuspec\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/WebBackgrounder/WebBackgrounder.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>http://nuget.codeplex.com/license</licenseUrl>\n    <projectUrl>https://github.com/NuGet/WebBackgrounder</projectUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>$description$</description>\n    <releaseNotes>\n        * 0.0.1.1 Refactored the IWorkItemRepository interface to be stateless.\n        * 0.0.1.4 Added more robust handling of badly behaving jobs (throwing exceptions).\n        * 0.0.1.6 Fixed a bug in how the next task is scheduled\n    </releaseNotes>\n    <tags>aspnet threading background tasks jobs scheduled scheduling workers asp.net</tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src/WebBackgrounder/WebFarmJobCoordinator.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder\n{\n    /// <summary>\n    /// Uses the database accessed via EF Code First to coordinate jobs in a web farm.\n    /// </summary>\n    public class WebFarmJobCoordinator : IJobCoordinator\n    {\n        readonly static string WebServerWorkerId = Guid.NewGuid().ToString();\n        readonly IWorkItemRepository _workItemRepository;\n\n        public WebFarmJobCoordinator(IWorkItemRepository workItemRepository)\n        {\n            if (workItemRepository == null)\n            {\n                throw new ArgumentNullException(\"workItemRepository\");\n            }\n            _workItemRepository = workItemRepository;\n        }\n\n        // Returns a task with the work to do if work is available to do and another web server \n        // in the web farm isn't already doing it. \n        public Task GetWork(IJob job)\n        {\n            if (job == null)\n            {\n                throw new ArgumentNullException(\"job\");\n            }\n\n            var unitOfWork = ReserveWork(WebServerWorkerId, job);\n            if (unitOfWork == null)\n            {\n                return null;\n            }\n\n            Task task = null;\n            try\n            {\n                task = job.Execute();\n            }\n            catch (Exception e)\n            {\n                task = new Task(() => { throw e; });\n            }\n            task.ContinueWith(c =>\n            {\n                if (c.IsFaulted)\n                {\n                    unitOfWork.Fail(c.Exception.GetBaseException());\n                }\n                else\n                {\n                    unitOfWork.Complete();\n                }\n            });\n\n            return task;\n        }\n\n        // if work is available to do and another web server in the web farm isn't already doing, \n        // this returns a unit of work used to wrap the work. \n        public JobUnitOfWork ReserveWork(string workerId, IJob job)\n        {\n            long? workItemId = null;\n\n            // We do a double check here because this may be the first DB query that runs when starting \n            // WebBackgrounder. For those using EF Code First, this could trigger a database creation \n            // (typically on a dev box, hopefully not in production). A database can't be created inside \n            // a transaction scope so we run this query here first.\n            var lastWorkItem = _workItemRepository.GetLastWorkItem(job);\n            if (lastWorkItem.IsActive() && !lastWorkItem.IsTimedOut(job))\n            {\n                return null;\n            }\n\n            _workItemRepository.RunInTransaction(() =>\n                {\n                    lastWorkItem = _workItemRepository.GetLastWorkItem(job);\n\n                    if (lastWorkItem.IsTimedOut(job))\n                    {\n                        lastWorkItem.Completed = DateTime.UtcNow;\n                        _workItemRepository.SetWorkItemFailed(lastWorkItem.Id, new TimeoutException(\"Workitem expired. Job timeout was \" + job.Timeout));\n                        lastWorkItem = null;\n                    }\n\n                    if (lastWorkItem.IsActive())\n                    {\n                        workItemId = null;\n                        return;\n                    }\n                    workItemId = _workItemRepository.CreateWorkItem(workerId, job);\n                }\n            );\n\n            if (workItemId == null)\n            {\n                return null;\n            }\n            return new JobUnitOfWork(_workItemRepository, workItemId.Value);\n        }\n\n        public void Dispose()\n        {\n            var repository = _workItemRepository;\n            if (repository != null)\n            {\n                repository.Dispose();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder/WorkItemExtensions.cs",
    "content": "﻿using System;\n\nnamespace WebBackgrounder\n{\n    public static class WorkItemExtensions\n    {\n        public static bool IsActive(this IWorkItem workItem)\n        {\n            return workItem != null && workItem.Completed == null;\n        }\n\n        public static bool IsTimedOut(this IWorkItem workItem, IJob job)\n        {\n            if (job == null)\n            {\n                throw new ArgumentNullException(\"job\");\n            }\n            return workItem != null && job.Timeout != TimeSpan.MaxValue && workItem.Started.Add(job.Timeout) < DateTime.UtcNow;\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/App_Start/EntityFramework.SqlServerCompact.cs",
    "content": "using System.Data.Entity;\nusing System.Data.Entity.Infrastructure;\n\n[assembly: WebActivator.PreApplicationStartMethod(typeof(WebBackgrounder.DemoWeb.App_Start.EntityFramework_SqlServerCompact), \"Start\")]\n\nnamespace WebBackgrounder.DemoWeb.App_Start {\n    public static class EntityFramework_SqlServerCompact {\n        public static void Start() {\n            Database.DefaultConnectionFactory = new SqlCeConnectionFactory(\"System.Data.SqlServerCe.4.0\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/App_Start/WebBackgrounderSetup.cs",
    "content": "﻿using System;\nusing Elmah;\nusing WebBackgrounder.Jobs;\n\n[assembly: WebActivator.PostApplicationStartMethod(typeof(WebBackgrounder.DemoWeb.App_Start.WebBackgrounderSetup), \"Start\")]\n[assembly: WebActivator.ApplicationShutdownMethod(typeof(WebBackgrounder.DemoWeb.App_Start.WebBackgrounderSetup), \"Shutdown\")]\n\nnamespace WebBackgrounder.DemoWeb.App_Start\n{\n    public static class WebBackgrounderSetup\n    {\n        static readonly JobManager _jobManager = CreateJobWorkersManager();\n\n        public static void Start()\n        {\n            _jobManager.Start();\n        }\n\n        public static void Shutdown()\n        {\n            _jobManager.Dispose();\n        }\n\n        private static JobManager CreateJobWorkersManager()\n        {\n            var jobs = new IJob[]\n            {\n                new SampleJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)),\n                /* new ExceptionJob(TimeSpan.FromSeconds(15)), */\n                new WorkItemCleanupJob(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5), new WorkItemsContext())\n            };\n\n            var coordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new WorkItemsContext()));\n            var manager = new JobManager(jobs, coordinator);\n            manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex)));\n            return manager;\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Content/Site.css",
    "content": "body\n{\n    font-size: .85em;\n    font-family: \"Trebuchet MS\", Verdana, Helvetica, Sans-Serif;\n    color: #232323;\n    background-color: #fff;\n}\n\nheader,\nfooter,\nnav,\nsection {\n    display: block;\n}\n\n/* Styles for basic forms\n-----------------------------------------------------------*/\n\nfieldset \n{\n    border:1px solid #ddd;\n    padding:0 1.4em 1.4em 1.4em;\n    margin:0 0 1.5em 0;\n}\n\nlegend \n{\n    font-size:1.2em;\n    font-weight: bold;\n}\n\ntextarea \n{\n    min-height: 75px;\n}\n\n.editor-label \n{\n    margin: 1em 0 0 0;\n}\n\n.editor-field \n{\n    margin:0.5em 0 0 0;\n}\n\n\n/* Styles for validation helpers\n-----------------------------------------------------------*/\n.field-validation-error\n{\n    color: #ff0000;\n}\n\n.field-validation-valid\n{\n    display: none;\n}\n\n.input-validation-error\n{\n    border: 1px solid #ff0000;\n    background-color: #ffeeee;\n}\n\n.validation-summary-errors\n{\n    font-weight: bold;\n    color: #ff0000;\n}\n\n.validation-summary-valid\n{\n    display: none;\n}\n\ntd {padding-right: 10px;}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Controllers/HomeController.cs",
    "content": "﻿using System.Linq;\nusing System.Web.Mvc;\n\nnamespace WebBackgrounder.DemoWeb.Controllers\n{\n    public class HomeController : Controller\n    {\n        private IWorkItemsContext db = new WorkItemsContext();\n\n        public ActionResult Index()\n        {\n            var workers = (from w in db.WorkItems\n                           orderby w.Started descending\n                           select w).Take(30);\n            return View(workers);\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/ExceptionJob.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder.DemoWeb\n{\n    public class ExceptionJob : Job\n    {\n        public ExceptionJob(TimeSpan interval)\n            : base(\"Sample Job\", interval)\n        {\n        }\n\n        public override Task Execute()\n        {\n            return new Task(() => { throw new InvalidOperationException(\"This is a test\"); });\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"WebBackgrounder.DemoWeb.MvcApplication\" Language=\"C#\" %>\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Global.asax.cs",
    "content": "﻿using System.Web;\nusing System.Web.Mvc;\nusing System.Web.Routing;\n\nnamespace WebBackgrounder.DemoWeb\n{\n    // Note: For instructions on enabling IIS6 or IIS7 classic mode, \n    // visit http://go.microsoft.com/?LinkId=9394801\n\n    public class MvcApplication : HttpApplication\n    {\n        public static void RegisterGlobalFilters(GlobalFilterCollection filters)\n        {\n            filters.Add(new HandleErrorAttribute());\n        }\n\n        public static void RegisterRoutes(RouteCollection routes)\n        {\n            routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");\n\n            routes.MapRoute(\n                \"Default\", // Route name\n                \"{controller}/{action}/{id}\", // URL with parameters\n                new { controller = \"Home\", action = \"Index\", id = UrlParameter.Optional } // Parameter defaults\n            );\n\n        }\n\n        protected void Application_Start()\n        {\n            AreaRegistration.RegisterAllAreas();\n\n            RegisterGlobalFilters(GlobalFilters.Filters);\n            RegisterRoutes(RouteTable.Routes);\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WebBackgrounder.DemoWeb\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft\")]\n[assembly: AssemblyProduct(\"WebBackgrounder.DemoWeb\")]\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"9ca43cf3-f32e-4151-b218-345a3502e24a\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/SampleJob.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder.DemoWeb\n{\n    public class SampleJob : Job\n    {\n        public SampleJob(TimeSpan interval, TimeSpan timeout)\n            : base(\"Sample Job\", interval, timeout)\n        {\n        }\n\n        public override Task Execute()\n        {\n            return new Task(() => Thread.Sleep(3000));\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Views/Home/Index.cshtml",
    "content": "﻿@model IEnumerable<WorkItem>\n@{\n    ViewBag.Title = \"Index\";\n}\n\n<script type=\"text/javascript\">\n    window.setInterval(function() { self.location.href = self.location.href}, 100);\n</script>\n\n<h2>WebBackgrounder Demo Site</h2>\n\n<p>\nThis site is used to test and demonstrate WebBackgrounder\n</p>\n\n<table>\n    <tr>\n        <th>Id</th>\n        <th>Name</th>\n        <th>WorkerId</th>\n        <th>Started</th>\n        <th>Completed</th>\n        <th>Elapsed</th>\n        <th>ExceptionInfo</th>\n    </tr>\n\n@foreach (var item in Model) {\n    <tr>\n        <td>\n            @Html.DisplayFor(modelItem => item.Id)\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.JobName)\n        </td>\n        <td>\n            <span title=\"@item.WorkerId\">@item.WorkerId.ToString().Substring(0, 8)</span>\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.Started)\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.Completed)\n        </td>\n        <td>\n            @Elapsed(item)\n        </td>\n        <td>\n            @Html.DisplayFor(modelItem => item.ExceptionInfo)\n        </td>\n    </tr>\n}\n\n</table>\n\n@helper Elapsed(WorkItem workItem) {\n    if (workItem.Completed == null) {\n        <em>@((DateTime.UtcNow - workItem.Started).TotalSeconds)s so far...</em>\n    }\n    else {\n        <span>@((workItem.Completed.Value - workItem.Started).TotalSeconds)s</span>\n    } \n}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Views/Shared/Error.cshtml",
    "content": "﻿@{\n    Layout = null;\n}\n\n<!DOCTYPE html>\n<html>\n<head>\n    <title>Error</title>\n</head>\n<body>\n    <h2>\n        Sorry, an error occurred while processing your request.\n    </h2>\n</body>\n</html>"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <title>@ViewBag.Title</title>\n    <meta http-equiv=\"refresh\" content=\"100\">\n    <link href=\"@Url.Content(\"~/Content/Site.css\")\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n\n<body>\n    @RenderBody()\n</body>\n</html>\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Views/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"System.Web.Mvc.WebViewPage\">\n      <namespaces>\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"WebBackgrounder\"/>\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n\n  <appSettings>\n    <add key=\"webpages:Enabled\" value=\"false\" />\n  </appSettings>\n\n  <system.web>\n    <httpHandlers>\n      <add path=\"*\" verb=\"*\" type=\"System.Web.HttpNotFoundHandler\"/>\n    </httpHandlers>\n\n    <!--\n        Enabling request validation in view pages would cause validation to occur\n        after the input has already been processed by the controller. By default\n        MVC performs request validation before a controller processes the input.\n        To change this behavior apply the ValidateInputAttribute to a\n        controller or action.\n    -->\n    <pages\n        validateRequest=\"false\"\n        pageParserFilterType=\"System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        pageBaseType=\"System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\"\n        userControlBaseType=\"System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <controls>\n        <add assembly=\"System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" namespace=\"System.Web.Mvc\" tagPrefix=\"mvc\" />\n      </controls>\n    </pages>\n  </system.web>\n\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n\n    <handlers>\n      <remove name=\"BlockViewHandler\"/>\n      <add name=\"BlockViewHandler\" path=\"*\" verb=\"*\" preCondition=\"integratedMode\" type=\"System.Web.HttpNotFoundHandler\" />\n    </handlers>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\n}"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an atrribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/Web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=152368\n  -->\n<configuration>\n    \n  <configSections>\n    <sectionGroup name=\"elmah\">\n      <section name=\"security\" requirePermission=\"false\" type=\"Elmah.SecuritySectionHandler, Elmah\" />\n      <section name=\"errorLog\" requirePermission=\"false\" type=\"Elmah.ErrorLogSectionHandler, Elmah\" />\n      <section name=\"errorMail\" requirePermission=\"false\" type=\"Elmah.ErrorMailSectionHandler, Elmah\" />\n      <section name=\"errorFilter\" requirePermission=\"false\" type=\"Elmah.ErrorFilterSectionHandler, Elmah\" />\n    </sectionGroup>\n  </configSections>\n  <appSettings>\n    <add key=\"webpages:Version\" value=\"1.0.0.0\" />\n    <add key=\"ClientValidationEnabled\" value=\"true\" />\n    <add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />\n  </appSettings>\n  <system.web>\n    <compilation debug=\"true\" targetFramework=\"4.0\">\n      <assemblies>\n        <add assembly=\"System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add assembly=\"System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add assembly=\"System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add assembly=\"System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add assembly=\"System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n      </assemblies>\n    </compilation>\n    <authentication mode=\"Forms\">\n      <forms loginUrl=\"~/Account/LogOn\" timeout=\"2880\" />\n    </authentication>\n    <pages>\n      <namespaces>\n        <add namespace=\"System.Web.Helpers\" />\n        <add namespace=\"System.Web.Mvc\" />\n        <add namespace=\"System.Web.Mvc.Ajax\" />\n        <add namespace=\"System.Web.Mvc.Html\" />\n        <add namespace=\"System.Web.Routing\" />\n        <add namespace=\"System.Web.WebPages\" />\n      </namespaces>\n    </pages>\n    <httpModules>\n      <add name=\"ErrorLog\" type=\"Elmah.ErrorLogModule, Elmah\" />\n      <add name=\"ErrorMail\" type=\"Elmah.ErrorMailModule, Elmah\" />\n      <add name=\"ErrorFilter\" type=\"Elmah.ErrorFilterModule, Elmah\" />\n    </httpModules>\n    <httpHandlers>\n      <add verb=\"POST,GET,HEAD\" path=\"elmah.axd\" type=\"Elmah.ErrorLogPageFactory, Elmah\" />\n    </httpHandlers>\n  </system.web>\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <modules runAllManagedModulesForAllRequests=\"true\">\n      <add name=\"ErrorLog\" type=\"Elmah.ErrorLogModule, Elmah\" preCondition=\"managedHandler\" />\n      <add name=\"ErrorMail\" type=\"Elmah.ErrorMailModule, Elmah\" preCondition=\"managedHandler\" />\n      <add name=\"ErrorFilter\" type=\"Elmah.ErrorFilterModule, Elmah\" preCondition=\"managedHandler\" />\n    </modules>\n    <handlers>\n      <add name=\"Elmah\" path=\"elmah.axd\" verb=\"POST,GET,HEAD\" type=\"Elmah.ErrorLogPageFactory, Elmah\" preCondition=\"integratedMode\" />\n    </handlers>\n  </system.webServer>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Web.Mvc\" publicKeyToken=\"31bf3856ad364e35\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-2.0.0.0\" newVersion=\"3.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n  <system.data>\n    <DbProviderFactories>\n      <remove invariant=\"System.Data.SqlServerCe.4.0\" />\n      <add name=\"Microsoft SQL Server Compact Data Provider 4.0\" invariant=\"System.Data.SqlServerCe.4.0\" description=\".NET Framework Data Provider for Microsoft SQL Server Compact\" type=\"System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91\" />\n    </DbProviderFactories>\n  </system.data>\n  <elmah>\n    <errorLog type=\"Elmah.XmlFileErrorLog, Elmah\" logPath=\"~/App_Data/Elmah.Errors\" />\n  </elmah>\n</configuration>"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/WebBackgrounder.DemoWeb.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{0A004B9F-4440-4C05-9D84-E38726D6162F}</ProjectGuid>\n    <ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WebBackgrounder.DemoWeb</RootNamespace>\n    <AssemblyName>WebBackgrounder.DemoWeb</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <MvcBuildViews>false</MvcBuildViews>\n    <UseIISExpress>false</UseIISExpress>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <BuildPackage>false</BuildPackage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Elmah\">\n      <HintPath>..\\packages\\elmah.corelibrary.1.2\\lib\\Elmah.dll</HintPath>\n    </Reference>\n    <Reference Include=\"EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.4.1.10715.0\\lib\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Data.Entity\" />\n    <Reference Include=\"System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\SqlServerCompact.4.0.8482.1\\lib\\System.Data.SqlServerCe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Data.SqlServerCe.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\EntityFramework.SqlServerCompact.4.1.8482.2\\lib\\System.Data.SqlServerCe.Entity.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\n    <Reference Include=\"System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Abstractions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"WebActivator, Version=1.4.4.0, Culture=neutral, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>..\\packages\\WebActivator.1.4.4\\lib\\net40\\WebActivator.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App_Start\\EntityFramework.SqlServerCompact.cs\" />\n    <Compile Include=\"App_Start\\WebBackgrounderSetup.cs\" />\n    <Compile Include=\"Controllers\\HomeController.cs\" />\n    <Compile Include=\"ExceptionJob.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SampleJob.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"favicon.ico\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Content\\Site.css\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Views\\Web.config\" />\n    <Content Include=\"Views\\_ViewStart.cshtml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\WebBackgrounder.EntityFramework\\WebBackgrounder.EntityFramework.csproj\">\n      <Project>{06D8DE5D-F101-4CD5-B406-8A211216FCE1}</Project>\n      <Name>WebBackgrounder.EntityFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\WebBackgrounder\\WebBackgrounder.csproj\">\n      <Project>{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}</Project>\n      <Name>WebBackgrounder</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Views\\Home\\Index.cshtml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"App_Data\\Elmah.Errors\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Views\\Shared\\Error.cshtml\" />\n    <Content Include=\"Views\\Shared\\_Layout.cshtml\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target> -->\n  <Target Name=\"MvcBuildViews\" AfterTargets=\"AfterBuild\" Condition=\"'$(MvcBuildViews)'=='true'\">\n    <AspNetCompiler VirtualPath=\"temp\" PhysicalPath=\"$(WebProjectOutputDir)\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>False</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>53378</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>\n          </IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>\nif not exist \"$(TargetDir)x86\" md \"$(TargetDir)x86\"\nxcopy /s /y \"$(SolutionDir)packages\\SqlServerCompact.4.0.8482.1\\NativeBinaries\\x86\\*.*\" \"$(TargetDir)x86\"\nif not exist \"$(TargetDir)amd64\" md \"$(TargetDir)amd64\"\nxcopy /s /y \"$(SolutionDir)packages\\SqlServerCompact.4.0.8482.1\\NativeBinaries\\amd64\\*.*\" \"$(TargetDir)amd64\"</PostBuildEvent>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "src/WebBackgrounder.DemoWeb/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"elmah\" version=\"1.2.0.1\" />\n  <package id=\"elmah.corelibrary\" version=\"1.2\" />\n  <package id=\"elmah.xml\" version=\"1.2\" />\n  <package id=\"EntityFramework\" version=\"4.1.10715.0\" />\n  <package id=\"EntityFramework.SqlServerCompact\" version=\"4.1.8482.2\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" />\n  <package id=\"SqlServerCompact\" version=\"4.0.8482.1\" />\n  <package id=\"WebActivator\" version=\"1.4.4\" />\n</packages>"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/Entities/IWorkItemsContext.cs",
    "content": "﻿using System;\nusing System.Data.Entity;\n\nnamespace WebBackgrounder\n{\n    public interface IWorkItemsContext : IDisposable\n    {\n        IDbSet<WorkItem> WorkItems { get; set; }\n        int SaveChanges();\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/Entities/WorkItem.cs",
    "content": "﻿using System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace WebBackgrounder\n{\n    public class WorkItem : IWorkItem\n    {\n        public long Id { get; set; }\n        [StringLength(64)]\n        public string JobName { get; set; }\n        [StringLength(64)]\n        public string WorkerId { get; set; }\n        public DateTime Started { get; set; }\n        public DateTime? Completed { get; set; }\n        public string ExceptionInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/Entities/WorkItemsContext.cs",
    "content": "﻿using System.Data.Entity;\n\nnamespace WebBackgrounder\n{\n    public class WorkItemsContext : DbContext, IWorkItemsContext\n    {\n        public IDbSet<WorkItem> WorkItems { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/EntityWorkItemRepository.cs",
    "content": "﻿using System;\nusing System.Data.Entity.Infrastructure;\nusing System.Linq;\nusing System.Transactions;\n\nnamespace WebBackgrounder\n{\n    public class EntityWorkItemRepository : IWorkItemRepository, IDisposable\n    {\n        Func<IWorkItemsContext> _contextThunk;\n        IWorkItemsContext _context;\n\n        public EntityWorkItemRepository(Func<IWorkItemsContext> contextThunk)\n        {\n            _contextThunk = contextThunk;\n            _context = _contextThunk();\n        }\n\n        public void RunInTransaction(Action query)\n        {\n            using (var transaction = new TransactionScope())\n            {\n                // For some reason, I get different behavior when I use this\n                // instead of _context.Database.Connection. This works, that doesn't. :(\n                ((IObjectContextAdapter)_context).ObjectContext.Connection.Open();\n                query();\n                transaction.Complete();\n            }\n            // REVIEW: Make sure this is really needed. I kept running into \n            // exceptions when I didn't do this, but I may be doing it wrong. -Phil 10/17/2011\n            _context.Dispose();\n            _context = _contextThunk();\n        }\n\n        public IWorkItem GetLastWorkItem(IJob job)\n        {\n            return (from w in _context.WorkItems\n                    where w.JobName == job.Name\n                    orderby w.Started descending\n                    select w).FirstOrDefault() as IWorkItem;\n        }\n\n        public long CreateWorkItem(string workerId, IJob job)\n        {\n            var workItem = new WorkItem\n            {\n                JobName = job.Name,\n                WorkerId = workerId,\n                Started = DateTime.UtcNow,\n                Completed = null\n            };\n            _context.WorkItems.Add(workItem);\n            _context.SaveChanges();\n            return workItem.Id;\n        }\n\n        public void SetWorkItemCompleted(long workItemId)\n        {\n            var workItem = GetWorkItem(workItemId);\n            workItem.Completed = DateTime.UtcNow;\n            _context.SaveChanges();\n        }\n\n        public void SetWorkItemFailed(long workItemId, Exception exception)\n        {\n            var workItem = GetWorkItem(workItemId);\n            workItem.Completed = DateTime.UtcNow;\n            workItem.ExceptionInfo = exception.Message + Environment.NewLine + exception.StackTrace;\n            _context.SaveChanges();\n        }\n\n        private WorkItem GetWorkItem(long workerId)\n        {\n            return _context.WorkItems.Find(workerId);\n        }\n\n        public void Dispose()\n        {\n            var context = _context;\n            if (context != null)\n            {\n                context.Dispose();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WebBackgrounder.EntityFramework\")]\n[assembly: AssemblyDescription(\"WebBackgrounder.EntityFramework is an implementation of the IJobCoordinator for WebBackgrounder that uses a Database (via EF Code First) as the synchronization mechanism (aka a mutex) for coordinating jobs.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\".NET Foundation\")]\n[assembly: AssemblyProduct(\"WebBackgrounder\")]\n[assembly: AssemblyCopyright(\"Copyright © .NET Foundation 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"724b4dbb-4758-4270-b4d9-c33f9a1a4e4c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.1.0.0\")]\n[assembly: AssemblyFileVersion(\"0.1.0.0\")]\n[assembly: AssemblyInformationalVersion(\"0.1.0-beta\")]"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/WebBackgrounder.EntityFramework.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{06D8DE5D-F101-4CD5-B406-8A211216FCE1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WebBackgrounder.EntityFramework</RootNamespace>\n    <AssemblyName>WebBackgrounder.EntityFramework</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <BuildPackage>true</BuildPackage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework\">\n      <HintPath>..\\packages\\EntityFramework.4.1.10715.0\\lib\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\n      <Private>True</Private>\n      <HintPath>..\\packages\\Microsoft.Web.Infrastructure.1.0.0.0\\lib\\net40\\Microsoft.Web.Infrastructure.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Entity\" />\n    <Reference Include=\"System.Data.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"WebActivator\">\n      <HintPath>..\\packages\\WebActivator.1.4.4\\lib\\net40\\WebActivator.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Entities\\IWorkItemsContext.cs\" />\n    <Compile Include=\"Entities\\WorkItem.cs\" />\n    <Compile Include=\"Entities\\WorkItemsContext.cs\" />\n    <Compile Include=\"EntityWorkItemRepository.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"WorkItemCleanupJob.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n    <None Include=\"WebBackgrounder.EntityFramework.nuspec\">\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\WebBackgrounder\\WebBackgrounder.csproj\">\n      <Project>{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}</Project>\n      <Name>WebBackgrounder</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/WebBackgrounder.EntityFramework.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>$author$</authors>\n    <owners>$author$</owners>\n    <licenseUrl>http://nuget.codeplex.com/license</licenseUrl>\n    <projectUrl>https://github.com/NuGet/WebBackgrounder</projectUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>$description$</description>\n    <releaseNotes>\n        Updated this to take into account API changes in WebBackgrounder.\n    </releaseNotes>\n    <tags>aspnet threading background tasks jobs scheduled scheduling workers asp.net sql entity-framework database db</tags>\n  </metadata>\n</package>"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/WorkItemCleanupJob.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebBackgrounder.Jobs\n{\n    public class WorkItemCleanupJob : Job\n    {\n        readonly IWorkItemsContext _context;\n\n        public WorkItemCleanupJob(TimeSpan interval, TimeSpan spanToKeepRecords, IWorkItemsContext context)\n            : base(\"WorkItem Table Cleanup\", interval)\n        {\n            if (spanToKeepRecords < TimeSpan.Zero)\n            {\n                throw new ArgumentException(\"Need to specify a positive time span.\", \"spanToKeepRecords\");\n            }\n            SpanToKeepRecords = spanToKeepRecords;\n            _context = context;\n        }\n\n        /// <summary>\n        /// When this number is reached, this task will delete the oldest \n        /// work items larger than this number.\n        /// </summary>\n        public TimeSpan SpanToKeepRecords\n        {\n            get;\n            private set;\n        }\n\n        public override Task Execute()\n        {\n            return new Task(() =>\n            {\n                var cutoffDate = DateTime.UtcNow.Subtract(SpanToKeepRecords);\n                var oldItems = _context.WorkItems.Where(w => w.Completed != null && w.Completed < cutoffDate);\n                if (oldItems.Any())\n                {\n                    foreach (var workItem in oldItems.ToList())\n                    {\n                        _context.WorkItems.Remove(workItem);\n                    }\n                    _context.SaveChanges();\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.EntityFramework/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"4.1.10715.0\" />\n  <package id=\"Microsoft.Web.Infrastructure\" version=\"1.0.0.0\" />\n  <package id=\"WebActivator\" version=\"1.4.4\" />\n  <package id=\"WebBackgrounder\" version=\"0.1\" />\n</packages>"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/EntityWorkItemRepositoryFacts.cs",
    "content": "﻿using System;\nusing System.Data.Entity;\nusing System.Linq;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class EntityWorkItemRepositoryFacts\n    {\n        public class TheGetLastWorkItemMethod\n        {\n            [Fact]\n            public void ReturnsActiveWorkItemWhenAWorkerHasNoCompletedDate()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Name).Returns(\"docoolstuffjobname\");\n                var workItems = new InMemoryDbSet<WorkItem> \n                {\n                    new WorkItem\n                    {\n                        JobName = job.Object.Name, \n                        Started = DateTime.UtcNow, \n                        Completed = null\n                    }\n                };\n                var context = new Mock<WorkItemsContext>();\n                context.Object.WorkItems = workItems;\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                var activeWorkItem = repository.GetLastWorkItem(job.Object);\n\n                Assert.True(activeWorkItem.IsActive());\n            }\n\n            [Fact]\n            public void ReturnsLastInactiveWorkItemWhenAllWorkItemsHaveCompletedDate()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Name).Returns(\"docoolstuff\");\n                var workItems = new InMemoryDbSet<WorkItem> \n                {\n                    new WorkItem\n                    {\n                        Id = 1,\n                        JobName = job.Object.Name, \n                        Started = DateTime.UtcNow.AddMinutes(-1), \n                        Completed = DateTime.UtcNow.AddMinutes(-1)\n                    },\n                    new WorkItem\n                    {\n                        Id = 2,\n                        JobName = job.Object.Name, \n                        Started = DateTime.UtcNow, \n                        Completed = DateTime.UtcNow\n                    }\n                };\n                var context = new Mock<WorkItemsContext>();\n                context.Object.WorkItems = workItems;\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                var activeWorker = repository.GetLastWorkItem(job.Object);\n\n                Assert.Equal(2, activeWorker.Id);\n                Assert.False(activeWorker.IsActive());\n            }\n\n            [Fact]\n            public void ReturnsNullWhenNoWorkItemsReturnedForGivenJob()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Name).Returns(\"docoolstuff\");\n                var workItems = new InMemoryDbSet<WorkItem> \n                {\n                    new WorkItem\n                    {\n                        JobName = \"DoNotDoAnyCoolStuff\", \n                        Started = DateTime.UtcNow, \n                        Completed = DateTime.UtcNow\n                    }\n                };\n                var context = new Mock<WorkItemsContext>();\n                context.Object.WorkItems = workItems;\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                var activeWorkItem = repository.GetLastWorkItem(job.Object);\n\n                Assert.Null(activeWorkItem);\n            }\n        }\n\n        public class TheCreateWorkItemMethod\n        {\n            public void CreatesNewWorkItemThatIsNotComplete()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Name).Returns(\"do-cool-stuff\");\n                var before = DateTime.UtcNow;\n                var context = new Mock<WorkItemsContext>();\n                context.Setup(c => c.SaveChanges()).Verifiable();\n                context.Object.WorkItems = new InMemoryDbSet<WorkItem>();\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                repository.CreateWorkItem(\"web-server-1\", job.Object);\n\n                var created = context.Object.WorkItems.First(w => w.WorkerId == \"web-server-1\");\n                Assert.NotNull(created);\n                Assert.Null(created.Completed);\n                Assert.Equal(\"do-cool-stuff\", created.JobName);\n                Assert.True(created.Started >= before);\n                context.Verify();\n            }\n        }\n\n        public class TheSetWorkItemCompleteMethod\n        {\n            [Fact]\n            public void SetsWorkItemCompletedSetsCompletedDate()\n            {\n                const long workItemId = 123;\n                var context = new Mock<WorkItemsContext>();\n                var workItem = new WorkItem { Id = workItemId };\n                var workItems = new Mock<IDbSet<WorkItem>>();\n                workItems.Setup(w => w.Find(workItemId)).Returns(workItem);\n                context.Object.WorkItems = workItems.Object;\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                repository.SetWorkItemCompleted(workItemId);\n\n                Assert.NotNull(workItem.Completed);\n            }\n\n            [Fact]\n            public void SavesChanges()\n            {\n                var context = new Mock<WorkItemsContext>();\n                var workItems = new Mock<IDbSet<WorkItem>>();\n                workItems.Setup(w => w.Find(It.IsAny<long>())).Returns(new WorkItem());\n                context.Object.WorkItems = workItems.Object;\n                context.Setup(c => c.SaveChanges()).Verifiable();\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                repository.SetWorkItemCompleted(123);\n\n                context.Verify();\n            }\n        }\n\n        public class TheSetWorkItemFailedMethod\n        {\n            [Fact]\n            public void SetsWorkItemFailedSetsCompletedDateAndExceptionInfo()\n            {\n                const long workItemId = 123;\n                var context = new Mock<WorkItemsContext>();\n                var workItem = new WorkItem { Id = workItemId };\n                var workItems = new Mock<IDbSet<WorkItem>>();\n                workItems.Setup(w => w.Find(workItemId)).Returns(workItem);\n                context.Object.WorkItems = workItems.Object;\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                repository.SetWorkItemFailed(workItemId, new InvalidOperationException(\"Pretend failure!\"));\n\n                Assert.NotNull(workItem.Completed);\n                Assert.Contains(\"Pretend failure!\", workItem.ExceptionInfo);\n            }\n\n            [Fact]\n            public void SavesChanges()\n            {\n                var context = new Mock<WorkItemsContext>();\n                var workItems = new Mock<IDbSet<WorkItem>>();\n                workItems.Setup(w => w.Find(It.IsAny<long>())).Returns(new WorkItem());\n                context.Object.WorkItems = workItems.Object;\n                context.Setup(c => c.SaveChanges()).Verifiable();\n                var repository = new EntityWorkItemRepository(() => context.Object);\n\n                repository.SetWorkItemFailed(123, new InvalidOperationException());\n\n                context.Verify();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/InMemoryDbSet.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Data.Entity;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class InMemoryDbSet<TEntity> : IDbSet<TEntity> where TEntity : class\n    {\n        readonly HashSet<TEntity> _set;\n        readonly IQueryable<TEntity> _queryableSet;\n\n        public InMemoryDbSet()\n            : this(Enumerable.Empty<TEntity>())\n        {\n        }\n\n        public InMemoryDbSet(IEnumerable<TEntity> entities)\n        {\n            _set = new HashSet<TEntity>();\n            foreach (var entity in entities)\n            {\n                _set.Add(entity);\n            }\n            _queryableSet = _set.AsQueryable();\n        }\n\n        public TEntity Add(TEntity entity)\n        {\n            _set.Add(entity);\n            return entity;\n        }\n\n        public TEntity Attach(TEntity entity)\n        {\n            _set.Add(entity);\n            return entity;\n        }\n        \n        public TEntity Remove(TEntity entity)\n        {\n            _set.Remove(entity);\n            return entity;\n        }\n\n        public virtual TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, TEntity\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual TEntity Create()\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual TEntity Find(params object[] keyValues)\n        {\n            throw new NotImplementedException();    \n        }\n\n        public ObservableCollection<TEntity> Local\n        {\n            get { return new ObservableCollection<TEntity>(_queryableSet); }\n        }\n\n        public IEnumerator<TEntity> GetEnumerator()\n        {\n            return _queryableSet.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _queryableSet.GetEnumerator();\n        }\n\n        public Type ElementType\n        {\n            get { return _queryableSet.ElementType; }\n        }\n\n        public Expression Expression\n        {\n            get { return _queryableSet.Expression; }\n        }\n\n        public IQueryProvider Provider\n        {\n            get { return _queryableSet.Provider; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/JobHostFacts.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class JobHostFacts\n    {\n        public class TheStopMethod\n        {\n            [Fact]\n            public void EnsuresNoWorkIsDone()\n            {\n                var host = new JobHost();\n                var task = new Task(() => { throw new InvalidOperationException(\"Hey, this is supposed to be shut down!\"); });\n\n                host.Stop(true);\n\n                host.DoWork(task);\n            }\n\n            [Fact]\n            public void WaitsForTaskToComplete()\n            {\n                var host = new JobHost();\n                var workTask = new Task(() => host.DoWork(new Task(() =>\n                {\n                    // Was getting inconsistent results with Thread.Sleep(100)\n                    for (int i = 0; i < 100; i++)\n                    {\n                        Thread.Sleep(1);\n                    }\n                })));\n                var beforeStop = DateTime.UtcNow;\n                workTask.Start();\n                while (workTask.Status != TaskStatus.Running)\n                {\n                    Thread.Sleep(1);\n                }\n\n                host.Stop(false);\n                var afterStop = DateTime.UtcNow;\n\n                // If Stop didn't wait, we'd expect after to be less than 100 ms larger than beforeStop\n                Assert.True((afterStop - beforeStop).TotalMilliseconds >= 100);\n            }\n        }\n\n        public class TheDoWorkMethod\n        {\n            [Fact]\n            public void ThrowsArgumentNullExceptionIfWorkIsNull()\n            {\n                var host = new JobHost();\n\n                var exception = Assert.Throws<ArgumentNullException>(() => host.DoWork(null));\n\n                Assert.Equal(\"work\", exception.ParamName);\n            }\n\n            [Fact]\n            public void DoesNotCallStartIfWorkIsAlreadyScheduledOrCompleted()\r\n            {\r\n                var tcs = new TaskCompletionSource<object>();\r\n                tcs.SetResult(null);\r\n\r\n                var task = tcs.Task;\r\n\r\n                var host = new JobHost();\r\n\r\n                Assert.DoesNotThrow(() => host.DoWork(task));\r\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/JobManagerFacts.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class JobManagerFacts\n    {\n        public class TheConstructor\n        {\n            [Fact]\n            public void ThrowsExceptionWhenAnyParameterIsNull()\n            {\n                Assert.Throws<ArgumentNullException>(() => new JobManager(null, new Mock<IJobHost>().Object));\n                Assert.Throws<ArgumentNullException>(() => new JobManager(new[] { new Mock<IJob>().Object }, (IJobHost)null));\n                Assert.Throws<ArgumentNullException>(() => new JobManager(new[] { new Mock<IJob>().Object }, (IJobCoordinator)null));\n            }\n        }\n\n        public class TheStartMethod\n        {\n            [Fact]\n            public void GetsTheJobDone()\n            {\n                var jobDoneEvent = new ManualResetEvent(false);\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(1));\n                var jobs = new[] { job.Object };\n                var coordinator = new Mock<IJobCoordinator>();\n                coordinator.Setup(c => c.GetWork(job.Object)).Returns(new Task(() => jobDoneEvent.Set()));\n\n                using (var manager = new JobManager(jobs, coordinator.Object))\n                {\n                    manager.Start();\n                    Assert.True(jobDoneEvent.WaitOne(TimeSpan.FromSeconds(2)));\n                }\n            }\n\n            [Fact]\n            public void GetsTheJobsDoneInTheRightOrder()\n            {\n                var completed = new ConcurrentQueue<string>();\n                var longerJobDoneEvent = new ManualResetEvent(false);\n                var shorterJobDoneEvent = new ManualResetEvent(false);\n                var longerJob = new Mock<IJob>();\n                var shorterJob = new Mock<IJob>();\n                longerJob.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(4));\n                shorterJob.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(3));\n                var jobs = new[] { longerJob.Object, shorterJob.Object };\n                var coordinator = new Mock<IJobCoordinator>();\n                coordinator.Setup(c => c.GetWork(shorterJob.Object)).Returns((Task)null).Callback(() => { completed.Enqueue(\"shortJob\"); shorterJobDoneEvent.Set(); });\n                coordinator.Setup(c => c.GetWork(longerJob.Object)).Returns((Task)null).Callback(() => { completed.Enqueue(\"longJob\"); longerJobDoneEvent.Set(); });\n\n                using (var manager = new JobManager(jobs, coordinator.Object))\n                {\n                    manager.Start();\n\n                    Assert.True(longerJobDoneEvent.WaitOne(TimeSpan.FromSeconds(5)));\n                    Assert.True(shorterJobDoneEvent.WaitOne(TimeSpan.Zero));\n                }\n\n                var ordered = completed.ToArray();\n                Assert.Equal(\"shortJob\", ordered[0]);\n                Assert.Equal(\"longJob\", ordered[1]);\n            }\n\n            [Fact]\n            public void DoesNotThrowExceptionWhenThereIsNoWorkToDo()\n            {\n                var jobNoTask = new Mock<IJob>();\n                jobNoTask.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(1));\n                var secondJob = new Mock<IJob>();\n                secondJob.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(2));\n                var jobs = new[] { jobNoTask.Object, secondJob.Object };\n                var firstJobCompleteEvent = new ManualResetEvent(false);\n                var coordinator = new Mock<IJobCoordinator>();\n                coordinator.Setup(c => c.GetWork(jobNoTask.Object)).Returns((Task)null);\n                coordinator.Setup(c => c.GetWork(secondJob.Object)).Returns((Task)null).Callback(() => firstJobCompleteEvent.Set());\n\n                bool failed = false;\n\n                using (var manager = new JobManager(jobs, coordinator.Object))\n                {\n                    manager.Fail(e => failed = true);\n                    manager.Start();\n                    Assert.True(firstJobCompleteEvent.WaitOne(TimeSpan.FromSeconds(1)));\n                }\n\n                Assert.False(failed);\n            }\n\n            [Fact]\n            public void SchedulerRestartsWhenJobFailsAndRestartSchedulerIsTrue()\n            {\n                var jobNoTask = new Mock<IJob>();\n                jobNoTask.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(1));\n                var secondJob = new Mock<IJob>();\n                secondJob.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(2));\n                var jobs = new[] { jobNoTask.Object, secondJob.Object };\n                var firstJobCompleteEvent = new ManualResetEvent(false);\n                var coordinator = new Mock<IJobCoordinator>();\n                coordinator.Setup(c => c.GetWork(jobNoTask.Object)).Throws<Exception>();\n                coordinator.Setup(c => c.GetWork(secondJob.Object)).Returns((Task)null).Callback(() => firstJobCompleteEvent.Set());\n\n                using (var manager = new JobManager(jobs, coordinator.Object))\n                {\n                    manager.RestartSchedulerOnFailure = true;\n                    manager.Start();\n                    Assert.True(firstJobCompleteEvent.WaitOne(TimeSpan.FromSeconds(1)));\n                }\n            }\n\n            [Fact]\n            public void SchedulerDoesNotRestartWhenJobFailsAndRestartSchedulerIsFalse()\n            {\n                var jobNoTask = new Mock<IJob>();\n                jobNoTask.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(1));\n                var secondJob = new Mock<IJob>();\n                secondJob.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(2));\n                var jobs = new[] { jobNoTask.Object, secondJob.Object };\n                var firstJobCompleteEvent = new ManualResetEvent(false);\n                var coordinator = new Mock<IJobCoordinator>();\n                coordinator.Setup(c => c.GetWork(jobNoTask.Object)).Throws<Exception>();\n                coordinator.Setup(c => c.GetWork(secondJob.Object)).Returns((Task)null).Callback(() => firstJobCompleteEvent.Set());\n\n                using (var manager = new JobManager(jobs, coordinator.Object))\n                {\n                    manager.Start();\n                    Assert.False(firstJobCompleteEvent.WaitOne(TimeSpan.FromSeconds(1)));\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"WebBackgrounder.UnitTests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft\")]\n[assembly: AssemblyProduct(\"WebBackgrounder.UnitTests\")]\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"9ada0d62-d85e-4489-bb70-3f91a11b20ef\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/ScheduleFacts.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class ScheduleFacts\n    {\n        public class TheNextRunTimeProperty\n        {\n            [Fact]\n            public void ReturnsIntervalAddedToLastRunTime()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(32));\n                var lastRunTime = DateTime.UtcNow.AddSeconds(-10);\n                var schedule = new Schedule(job.Object) {LastRunTime = lastRunTime};\n\n                var next = schedule.NextRunTime;\n\n                Assert.Equal(lastRunTime.AddSeconds(32), next);\n            }\n        }\n\n        public class TheGetIntervalToNextRunMethod\n        {\n            [Fact]\n            public void ReturnsTheSpanBetweenNowAndNextRunTime()\n            {\n                var now = DateTime.UtcNow;\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(30));\n                var schedule = new Schedule(job.Object, () => now) {LastRunTime = now};\n\n                var interval = schedule.GetIntervalToNextRun();\n\n                Assert.Equal(30, interval.TotalSeconds);\n            }\n\n            [Fact]\n            public void ReturnsTheSpanBetweenNowAndNextRunTimeFiguringInLastRun()\n            {\n                var now = DateTime.UtcNow;\n                \n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(30));\n                var schedule = new Schedule(job.Object, () => now) { LastRunTime = now.AddSeconds(-20)};\n\n                var interval = schedule.GetIntervalToNextRun();\n\n                Assert.Equal(10, interval.TotalSeconds);\n            }\n\n            [Fact]\n            public void ReturnsOneMillisecondTimeSpanWhenNextRunIsInThePast()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(30));\n                var schedule = new Schedule(job.Object) { LastRunTime = DateTime.UtcNow.AddSeconds(-40) };\n\n                var interval = schedule.GetIntervalToNextRun();\n\n                Assert.Equal(1, interval.TotalMilliseconds);\n            }\n\n            [Fact]\n            public void ShrinksOverTimeEvenWhenLastRunIsNull()\n            {\n                var startDate = DateTime.UtcNow;\n                var dates = new Queue<DateTime>(new[]{ startDate, startDate.AddMilliseconds(10) });\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromMilliseconds(30));\n                var schedule = new Schedule(job.Object, dates.Dequeue) { LastRunTime = startDate};\n                \n                var firstInterval = schedule.GetIntervalToNextRun();\n                var secondInterval = schedule.GetIntervalToNextRun();\n\n                Assert.Equal(30, firstInterval.TotalMilliseconds);\n                Assert.Equal(20, secondInterval.TotalMilliseconds);\n            }\n        }\n\n        public class TheConstructor\n        {\n            [Fact]\n            public void SetsTheJob()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(30));\n                \n                var schedule = new Schedule(job.Object);\n                \n                Assert.Equal(job.Object, schedule.Job);\n            }\n\n            [Fact]\n            public void ThrowsArgumentNullExceptionForNullJob()\n            {\n                Assert.Throws<ArgumentNullException>(() => new Schedule(null));\n            }\n        }\n\n        public class TheDisposeMethod\n        {\n            [Fact]\n            public void SetsLastRunTimeToNow()\n            {\n                var now = DateTime.UtcNow;\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(30));\n                var schedule = new Schedule(job.Object, () => now) {LastRunTime = DateTime.UtcNow.AddSeconds(-100)};\n\n                schedule.SetRunComplete();\n\n                Assert.Equal(now, schedule.LastRunTime);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/SchedulerFacts.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class SchedulerFacts\n    {\n        public class TheNextMethod\n        {\n            [Fact]\n            public void ReturnsTheScheduleWithTheLowestRunTime()\n            {\n                var jobOne = new Mock<IJob>();\n                jobOne.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(10));\n                var jobTwo = new Mock<IJob>();\n                jobTwo.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(7));\n                var jobThree = new Mock<IJob>();\n                jobThree.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(27));\n                var jobs = new[] { jobOne.Object, jobTwo.Object, jobThree.Object };\n                var scheduler = new Scheduler(jobs);\n\n                var schedule = scheduler.Next();\n\n                Assert.Equal(jobTwo.Object, schedule.Job);\n            }\n\n            [Fact]\n            public void ReturnsTheCorrectNextScheduleWhenRunComplete()\n            {\n                var startDate = DateTime.UtcNow.AddMilliseconds(-7);\n                var dates = new Queue<DateTime>(new[]\n                {\n                    startDate,\n                    startDate.AddSeconds(7),\n                    startDate.AddSeconds(10),\n                    startDate.AddSeconds(14),\n                    startDate.AddSeconds(17),\n                });\n\n                var jobs = new[] { new WaitJob(10), new WaitJob(7), new WaitJob(17) };\n                var scheduler = new Scheduler(jobs, dates.Dequeue);\n\n                var firstSchedule = scheduler.Next();\n                firstSchedule.Job.Execute();\n                firstSchedule.SetRunComplete();\n                var secondSchedule = scheduler.Next();\n                secondSchedule.SetRunComplete();\n                var thirdSchedule = scheduler.Next();\n                \n                thirdSchedule.SetRunComplete();\n                var fourthSchedule = scheduler.Next();\n                fourthSchedule.SetRunComplete();\n\n                Assert.Equal(7, ((WaitJob)firstSchedule.Job).Id);\n                Assert.Equal(10, ((WaitJob)secondSchedule.Job).Id);\n                Assert.Equal(7, ((WaitJob)thirdSchedule.Job).Id);\n                Assert.Equal(17, ((WaitJob)fourthSchedule.Job).Id);\n            }\n\n            // If a task takes longer than its interval, \n            // we need to make sure it doesn't block other tasks from running.\n            [Fact]\n            public void TasksAreScheduledFairly()\n            {\n                var startDate = DateTime.UtcNow.AddMilliseconds(-7);\n                var dates = new Queue<DateTime>(new[]\n                {\n                    startDate,\n                    startDate.AddSeconds(100),\n                    startDate.AddSeconds(100),\n                    startDate.AddSeconds(140),\n                    startDate.AddSeconds(170),\n                });\n\n                var jobs = new[] { new WaitJob(10), new WaitJob(7), new WaitJob(17) };\n                var scheduler = new Scheduler(jobs, dates.Dequeue);\n\n                var firstSchedule = scheduler.Next();\n                firstSchedule.Job.Execute();\n                firstSchedule.SetRunComplete();\n                var secondSchedule = scheduler.Next();\n                secondSchedule.SetRunComplete();\n                var thirdSchedule = scheduler.Next();\n\n                thirdSchedule.SetRunComplete();\n                var fourthSchedule = scheduler.Next();\n                fourthSchedule.SetRunComplete();\n\n                Assert.Equal(7, ((WaitJob)firstSchedule.Job).Id);\n                Assert.Equal(10, ((WaitJob)secondSchedule.Job).Id);\n                Assert.Equal(17, ((WaitJob)thirdSchedule.Job).Id);\n                Assert.Equal(7, ((WaitJob)fourthSchedule.Job).Id);\n            }\n\n            private class WaitJob : Job\n            {\n                public WaitJob(int intervalSeconds) : base(\"Waits\", TimeSpan.FromSeconds(intervalSeconds))\n                {\n                    Id = intervalSeconds;\n                }\n\n                public int Id { get; private set; }\n\n                public override Task Execute()\n                {\n                    return new Task(() => Thread.Sleep(1));\n                }\n            }\n        }\n\n        public class TheConstructor\n        {\n            [Fact]\n            public void ThrowsExceptionWhenAnyJobHasNegativeInterval()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(1));\n                var negaJob = new Mock<IJob>();\n                negaJob.Setup(j => j.Interval).Returns(TimeSpan.FromSeconds(-1));\n                var jobs = new[]\n                {\n                    job.Object,\n                    negaJob.Object\n                };\n\n                Assert.Throws<ArgumentException>(() => new Scheduler(jobs));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/WebBackgrounder.UnitTests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>WebBackgrounder.UnitTests</RootNamespace>\n    <AssemblyName>WebBackgrounder.UnitTests</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <SolutionDir Condition=\"$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'\">..\\</SolutionDir>\n    <RestorePackages>true</RestorePackages>\n    <BuildPackage>false</BuildPackage>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\EntityFramework.4.1.10715.0\\lib\\EntityFramework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Moq\">\n      <HintPath>..\\packages\\Moq.4.0.10827\\lib\\NET40\\Moq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.Entity\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"xunit\">\n      <HintPath>..\\packages\\xunit.1.8.0.1549\\lib\\xunit.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"JobHostFacts.cs\" />\n    <Compile Include=\"EntityWorkItemRepositoryFacts.cs\" />\n    <Compile Include=\"InMemoryDbSet.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"JobManagerFacts.cs\" />\n    <Compile Include=\"ScheduleFacts.cs\" />\n    <Compile Include=\"SchedulerFacts.cs\" />\n    <Compile Include=\"WebFarmJobCoordinatorFacts.cs\" />\n    <Compile Include=\"WorkItemCleanupJobFacts.cs\" />\n    <Compile Include=\"WorkItemExtensionsFacts.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\WebBackgrounder.EntityFramework\\WebBackgrounder.EntityFramework.csproj\">\n      <Project>{06D8DE5D-F101-4CD5-B406-8A211216FCE1}</Project>\n      <Name>WebBackgrounder.EntityFramework</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\WebBackgrounder\\WebBackgrounder.csproj\">\n      <Project>{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}</Project>\n      <Name>WebBackgrounder</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Import Project=\"$(SolutionDir)\\.nuget\\NuGet.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/WebFarmJobCoordinatorFacts.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class WebFarmJobCoordinatorFacts\n    {\n        public class TheReserveWorkMethod\n        {\n            [Fact]\n            public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut()\n            {\n                var job = new FakeJob { Name = \"jobname\", Timeout = TimeSpan.MaxValue };\n                var repository = new Mock<IWorkItemRepository>();\n                repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock<IWorkItem>().Object);\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var unitOfWork = coordinator.ReserveWork(\"worker-id\", job);\n\n                Assert.Null(unitOfWork);\n            }\n\n            [Fact]\n            public void ReturnsNullWhenActiveWorkersExistWithinTransaction()\n            {\n                var job = new FakeJob { Name = \"jobname\", Timeout = TimeSpan.MaxValue };\n                var complete = new Mock<IWorkItem>();\n                complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow);\n                var active = new Mock<IWorkItem>();\n                active.Setup(wi => wi.Completed).Returns((DateTime?)null);\n\n                var activeWorkerQueue = new Queue<IWorkItem>(new[] { complete.Object, active.Object });\n                var repository = new Mock<IWorkItemRepository>();\n                repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue);\n                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());\n                repository.Setup(r => r.CreateWorkItem(\"worker-id\", job)).Throws(new InvalidOperationException());\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var unitOfWork = coordinator.ReserveWork(\"worker-id\", job);\n\n                Assert.Null(unitOfWork);\n            }\n\n            [Fact]\n            public void ReturnsUnitOfWorkWhenNoActiveWorkers()\n            {\n                var job = new FakeJob { Name = \"jobname\" };\n                var repository = new Mock<IWorkItemRepository>();\n                repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null);\n                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());\n                repository.Setup(r => r.CreateWorkItem(\"worker-id\", job)).Returns(123);\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var unitOfWork = coordinator.ReserveWork(\"worker-id\", job);\n\n                Assert.NotNull(unitOfWork);\n            }\n\n            [Fact]\n            public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut()\n            {\n                var job = new FakeJob { Name = \"jobname\", Timeout = TimeSpan.FromSeconds(10) };\n                var workItem = new Mock<IWorkItem>();\n                workItem.Setup(w => w.Id).Returns(1233);\n                workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11));\n                var repository = new Mock<IWorkItemRepository>();\n                repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object);\n                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());\n                repository.Setup(r => r.CreateWorkItem(\"worker-id\", job)).Returns(123);\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var unitOfWork = coordinator.ReserveWork(\"worker-id\", job);\n\n                Assert.NotNull(unitOfWork);\n                repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny<TimeoutException>()));\n            }\n        }\n\n        public class TheGetWorkMethod\n        {\n            [Fact]\n            public void WithJobThatThrowsExceptionWhenCreatingTaskStillReturnsTask()\n            {\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Name).Returns(\"job-name\");\n                job.Setup(j => j.Execute()).Throws(new InvalidOperationException(\"Test Exception\"));\n                var repository = new Mock<IWorkItemRepository>();\n                repository.Setup(r => r.GetLastWorkItem(job.Object)).Returns((IWorkItem)null);\n                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());\n                repository.Setup(r => r.CreateWorkItem(\"worker-id\", job.Object)).Returns(() => 123);\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var task = coordinator.GetWork(job.Object);\n\n                Assert.NotNull(task);\n            }\n\n            [Fact]\n            public void WithNullJobThrowsArgumentNullException()\n            {\n                var repository = new Mock<IWorkItemRepository>();\n                var coordinator = new WebFarmJobCoordinator(repository.Object);\n\n                var exception = Assert.Throws<ArgumentNullException>(() => coordinator.GetWork(null));\n\n                Assert.Equal(\"job\", exception.ParamName);\n            }\n        }\n\n        public class TheCtor\n        {\n            [Fact]\n            public void WithNullWorkItemRepositoryThrowsArgumentNullException()\n            {\n                var exception = Assert.Throws<ArgumentNullException>(() => new WebFarmJobCoordinator(null));\n\n                Assert.Equal(\"workItemRepository\", exception.ParamName);\n            }\n        }\n\n        class FakeJob : IJob\n        {\n            public string Name\n            {\n                get;\n                set;\n            }\n\n            public Task Execute()\n            {\n                return null;\n            }\n\n            public TimeSpan Interval\n            {\n                get;\n                set;\n            }\n\n            public TimeSpan Timeout\n            {\n                get;\n                set;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/WorkItemCleanupJobFacts.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Moq;\nusing WebBackgrounder.Jobs;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class WorkItemCleanupJobFacts\n    {\n        public class TheExecuteMethod\n        {\n            [Fact]\n            public void DeletesItemsOlderThanSpecifiedTimeSpan()\n            {\n                var context = new Mock<IWorkItemsContext>();\n                context.Setup(c => c.SaveChanges()).Verifiable();\n                context.Setup(c => c.WorkItems).Returns(new InMemoryDbSet<WorkItem>\n                {\n                    new WorkItem {Id = 101, Completed = DateTime.UtcNow.AddDays(-4)}, \n                    new WorkItem {Id = 102, Completed = DateTime.UtcNow.AddDays(-4)}, \n                    new WorkItem {Id = 103, Completed = DateTime.UtcNow.AddDays(-2).AddMilliseconds(-1)}, \n                    new WorkItem {Id = 104, Completed = DateTime.UtcNow}, \n                    new WorkItem {Id = 105 }\n                });\n                var job = new WorkItemCleanupJob(TimeSpan.FromMilliseconds(1), TimeSpan.FromDays(2), context.Object);\n                var task = job.Execute();\n                task.Start();\n                task.Wait();\n\n                Assert.Equal(2, context.Object.WorkItems.Count());\n                Assert.Equal(104, context.Object.WorkItems.First().Id);\n                Assert.Equal(105, context.Object.WorkItems.ElementAt(1).Id);\n                context.Verify();\n            }\n\n            [Fact]\n            public void DoesNothingWhenAllRecordsAreWithinKeepRecordsSpan()\n            {\n                var context = new Mock<IWorkItemsContext>();\n                context.Setup(c => c.SaveChanges()).Throws(\n                    new InvalidOperationException(\"Should not have tried to save changes\"));\n                context.Object.WorkItems = new InMemoryDbSet<WorkItem> { new WorkItem(), new WorkItem() };\n                var job = new WorkItemCleanupJob(TimeSpan.FromSeconds(1), TimeSpan.FromDays(1), context.Object);\n\n                job.Execute();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/WorkItemExtensionsFacts.cs",
    "content": "﻿using System;\nusing Moq;\nusing Xunit;\n\nnamespace WebBackgrounder.UnitTests\n{\n    public class WorkItemExtensionsFacts\n    {\n        public class TheIsActiveMethod\n        {\n            [Fact]\n            public void ReturnsTrueForIncomplete()\n            {\n                var workItem = new Mock<IWorkItem>();\n                workItem.Setup(w => w.Completed).Returns((DateTime?)null);\n\n                bool active = workItem.Object.IsActive();\n\n                Assert.True(active);\n            }\n\n            [Fact]\n            public void ReturnsFalseForComplete()\n            {\n                var workItem = new Mock<IWorkItem>();\n                workItem.Setup(w => w.Completed).Returns(DateTime.UtcNow);\n\n                bool active = workItem.Object.IsActive();\n\n                Assert.False(active);\n            }\n\n            [Fact]\n            public void ReturnsFalseForNullWorkItem()\n            {\n                Assert.False(((IWorkItem)null).IsActive());\n            }\n        }\n\n        public class TheIsTimedOutMethod\n        {\n            [Fact]\n            public void ReturnsTrueWhenWorkItemIsPastJobExpirationTimespan()\n            {\n                var started = DateTime.UtcNow.AddSeconds(-10);\n                var workItem = new Mock<IWorkItem>();\n                workItem.Setup(w => w.Started).Returns(started);\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Timeout).Returns(TimeSpan.FromSeconds(9));\n\n                bool expired = workItem.Object.IsTimedOut(job.Object);\n\n                Assert.True(expired);\n            }\n\n            [Fact]\n            public void ReturnsFalseWhenWorkItemIsWithinJobExpirationTimespan()\n            {\n                var started = DateTime.UtcNow.AddSeconds(-5);\n                var workItem = new Mock<IWorkItem>();\n                workItem.Setup(w => w.Started).Returns(started);\n                var job = new Mock<IJob>();\n                job.Setup(j => j.Timeout).Returns(TimeSpan.FromSeconds(100));\n\n                bool expired = workItem.Object.IsTimedOut(job.Object);\n\n                Assert.False(expired);\n            }\n\n            [Fact]\n            public void ReturnsFalseWhenWorkItemIsNull()\n            {\n                var expired = ((IWorkItem)null).IsTimedOut(new Mock<IJob>().Object);\n\n                Assert.False(expired);\n            }\n\n            [Fact]\n            public void ThrowsArgumentNullExceptionWhenJobIsNull()\n            {\n                Assert.Throws<ArgumentNullException>(() => ((IWorkItem)null).IsTimedOut(null));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/WebBackgrounder.UnitTests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"EntityFramework\" version=\"4.1.10715.0\" />\n  <package id=\"Moq\" version=\"4.0.10827\" />\n  <package id=\"xunit\" version=\"1.8.0.1549\" />\n</packages>"
  },
  {
    "path": "src/WebBackgrounder.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WebBackgrounder.DemoWeb\", \"WebBackgrounder.DemoWeb\\WebBackgrounder.DemoWeb.csproj\", \"{0A004B9F-4440-4C05-9D84-E38726D6162F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WebBackgrounder\", \"WebBackgrounder\\WebBackgrounder.csproj\", \"{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WebBackgrounder.UnitTests\", \"WebBackgrounder.UnitTests\\WebBackgrounder.UnitTests.csproj\", \"{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WebBackgrounder.EntityFramework\", \"WebBackgrounder.EntityFramework\\WebBackgrounder.EntityFramework.csproj\", \"{06D8DE5D-F101-4CD5-B406-8A211216FCE1}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Meta\", \"Meta\", \"{3F870BEB-5F40-4CC3-9226-2FBE7A930E81}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t..\\README.md = ..\\README.md\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0A004B9F-4440-4C05-9D84-E38726D6162F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0A004B9F-4440-4C05-9D84-E38726D6162F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0A004B9F-4440-4C05-9D84-E38726D6162F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0A004B9F-4440-4C05-9D84-E38726D6162F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0AD3BB44-E2FA-4A10-A44F-7CABA7FACF4E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6F6BBD68-74D1-4C32-AA9C-42B8690BA484}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{06D8DE5D-F101-4CD5-B406-8A211216FCE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{06D8DE5D-F101-4CD5-B406-8A211216FCE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{06D8DE5D-F101-4CD5-B406-8A211216FCE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{06D8DE5D-F101-4CD5-B406-8A211216FCE1}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  }
]