diff --git a/NUnit3TestAdapter.sln b/NUnit3TestAdapter.sln index 3ce71485..0aa7a307 100644 Binary files a/NUnit3TestAdapter.sln and b/NUnit3TestAdapter.sln differ diff --git a/demo/NUnitTestDemo/NUnit3TestDemo.csproj b/demo/NUnitTestDemo/NUnit3TestDemo.csproj index 9d91fc86..b8122160 100644 --- a/demo/NUnitTestDemo/NUnit3TestDemo.csproj +++ b/demo/NUnitTestDemo/NUnit3TestDemo.csproj @@ -36,9 +36,9 @@ false - + False - ..\packages\NUnit.3.0.0-beta-3\lib\net45\nunit.framework.dll + ..\packages\NUnit.3.0.0-rc-2\lib\net45\nunit.framework.dll diff --git a/demo/NUnitTestDemo/packages.config b/demo/NUnitTestDemo/packages.config index 8d167761..f261bd5d 100644 --- a/demo/NUnitTestDemo/packages.config +++ b/demo/NUnitTestDemo/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/nunit3-vs-adapter.build b/nunit3-vs-adapter.build index 82e27523..0d0b9769 100644 --- a/nunit3-vs-adapter.build +++ b/nunit3-vs-adapter.build @@ -7,7 +7,7 @@ - + diff --git a/src/NUnitTestAdapter/NUnit3TestExecutor.cs b/src/NUnitTestAdapter/NUnit3TestExecutor.cs index e4802393..85a56fca 100644 --- a/src/NUnitTestAdapter/NUnit3TestExecutor.cs +++ b/src/NUnitTestAdapter/NUnit3TestExecutor.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Reflection; using System.Text; using System.Xml; using Microsoft.VisualStudio.TestPlatform.ObjectModel; @@ -76,6 +77,8 @@ public void RunTests(IEnumerable sources, IRunContext runContext, IFrame } catch (Exception ex) { + if (ex is TargetInvocationException) + ex = ex.InnerException; TestLog.SendErrorMessage("Exception thrown executing tests", ex); } finally @@ -223,21 +226,31 @@ private void RunAssembly(string assemblyName, IFrameworkHandle frameworkHandle) } catch (Exception ex) { + if (ex is TargetInvocationException) + ex = ex.InnerException; TestLog.SendErrorMessage("Exception thrown executing tests in " + assemblyName, ex); } _testRunner.Dispose(); } - private static TestFilter MakeTestFilter(IEnumerable testCases) + private TestFilter MakeTestFilter(IEnumerable testCases) { - var testFilter = new StringBuilder(""); + ITestFilterService filterService = TestEngine.Services.GetService(); + if (filterService == null) + throw new NUnitEngineException("TestFilterService is not available. Engine in use is incorrect version."); - foreach (TestCase testCase in testCases) - testFilter.AppendFormat("{0}", testCase.FullyQualifiedName.Replace("<", "<").Replace(">", ">")); + ITestFilterBuilder filterBuilder = filterService.GetTestFilterBuilder(); - testFilter.Append(""); + foreach (TestCase testCase in testCases) + { + string testName = testCase.FullyQualifiedName + .Replace("<", "<") + .Replace(">", ">") + .Replace("&", "&"); + filterBuilder.AddTest(testName); + } - return new TestFilter(testFilter.ToString()); + return filterBuilder.GetFilter(); } #endregion diff --git a/src/NUnitTestAdapter/NUnitTestAdapter.cs b/src/NUnitTestAdapter/NUnitTestAdapter.cs index 849380af..44bf6e11 100644 --- a/src/NUnitTestAdapter/NUnitTestAdapter.cs +++ b/src/NUnitTestAdapter/NUnitTestAdapter.cs @@ -2,6 +2,8 @@ // Copyright (c) 2011-2015 NUnit Software. All rights reserved. // **************************************************************** +//#define VERBOSE + using System; using System.Diagnostics; using System.IO; @@ -18,16 +20,16 @@ namespace NUnit.VisualStudio.TestAdapter /// public abstract class NUnitTestAdapter { + #region Properties + // The adapter version - private string _adapterVersion; + private string AdapterVersion { get; set; } // Verbosity in effect for message logging - private int _verbosity; + private int Verbosity { get; set; } // True if files should be shadow-copied - private bool _shadowCopy; - - #region Properties + private bool ShadowCopy { get; set; } protected ITestEngine TestEngine { get; private set; } @@ -66,15 +68,19 @@ public static bool IsRunningUnderIDE // each Discover or Execute method must call this method. protected virtual void Initialize(IMessageLogger messageLogger) { - _verbosity = 0; // In case we throw below - _adapterVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + Verbosity = 0; // In case we throw below + AdapterVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); try { var registry = RegistryCurrentUser.OpenRegistryCurrentUser(@"Software\nunit.org\VSAdapter"); UseVsKeepEngineRunning = registry.Exist("UseVsKeepEngineRunning") && (registry.Read("UseVsKeepEngineRunning") == 1); - _shadowCopy = registry.Exist("ShadowCopy") && (registry.Read("ShadowCopy") == 1); - _verbosity = (registry.Exist("Verbosity")) ? registry.Read("Verbosity") : 0; + ShadowCopy = registry.Exist("ShadowCopy") && (registry.Read("ShadowCopy") == 1); +#if DEBUG && VERBOSE + Verbosity = 1; +#else + Verbosity = (registry.Exist("Verbosity")) ? registry.Read("Verbosity") : 0; +#endif } catch (Exception e) { @@ -83,14 +89,14 @@ protected virtual void Initialize(IMessageLogger messageLogger) } TestEngine = new TestEngine(); - TestLog = new TestLogger(messageLogger, _verbosity); + TestLog = new TestLogger(messageLogger, Verbosity); } protected ITestRunner GetRunnerFor(string assemblyName) { var package = new TestPackage(assemblyName); - if (_shadowCopy) + if (ShadowCopy) { package.Settings["ShadowCopyFiles"] = "true"; TestLog.SendDebugMessage(" Setting ShadowCopyFiles to true"); @@ -111,14 +117,14 @@ protected ITestRunner GetRunnerFor(string assemblyName) protected void Info(string method, string function) { - var msg = string.Format("NUnit Adapter {0} {1} is {2}", _adapterVersion, method, function); + var msg = string.Format("NUnit Adapter {0} {1} is {2}", AdapterVersion, method, function); TestLog.SendInformationalMessage(msg); } protected void Debug(string method, string function) { #if DEBUG - var msg = string.Format("NUnit Adapter {0} {1} is {2}", _adapterVersion, method, function); + var msg = string.Format("NUnit Adapter {0} {1} is {2}", AdapterVersion, method, function); TestLog.SendDebugMessage(msg); #endif } diff --git a/src/NUnitTestAdapter/Properties/AssemblyInfo.cs b/src/NUnitTestAdapter/Properties/AssemblyInfo.cs index 3359d9a9..2ab8fb98 100644 --- a/src/NUnitTestAdapter/Properties/AssemblyInfo.cs +++ b/src/NUnitTestAdapter/Properties/AssemblyInfo.cs @@ -21,5 +21,5 @@ [assembly: ComVisible(false)] [assembly: Guid("c0aad5e4-b486-49bc-b3e8-31e01be6fefe")] -[assembly: AssemblyVersion("3.0.5.0")] -[assembly: AssemblyFileVersion("3.0.5.0")] +[assembly: AssemblyVersion("3.0.6.0")] +[assembly: AssemblyFileVersion("3.0.6.0")] diff --git a/src/NUnitTestAdapter/TestLogger.cs b/src/NUnitTestAdapter/TestLogger.cs index 1e2255e8..df07222f 100644 --- a/src/NUnitTestAdapter/TestLogger.cs +++ b/src/NUnitTestAdapter/TestLogger.cs @@ -19,14 +19,16 @@ namespace NUnit.VisualStudio.TestAdapter /// public class TestLogger : IMessageLogger { - private IMessageLogger _messageLogger; + private const string EXCEPTION_FORMAT = "Exception {0}, {1}"; - private int _verbosity; + private IMessageLogger MessageLogger { get; set; } + + private int Verbosity { get; set; } public TestLogger(IMessageLogger messageLogger, int verbosity) { - _messageLogger = messageLogger; - _verbosity = verbosity; + MessageLogger = messageLogger; + Verbosity = verbosity; } public void AssemblyNotSupportedWarning(string sourceAssembly) @@ -56,15 +58,15 @@ public void SendErrorMessage(string message) public void SendErrorMessage(string message, Exception ex) { - - switch (_verbosity) + switch (Verbosity) { case 0: - var type = ex.GetType(); - SendErrorMessage(string.Format("Exception {0}, {1}",type, message)); + Type type = ex.GetType(); + SendErrorMessage(string.Format(EXCEPTION_FORMAT, type, message)); + SendErrorMessage(ex.Message); break; default: - SendMessage(TestMessageLevel.Error, message); + SendErrorMessage(message); SendErrorMessage(ex.ToString()); break; } @@ -77,17 +79,17 @@ public void SendWarningMessage(string message) public void SendWarningMessage(string message,Exception ex) { - string fmt = "Exception {0}, {1}"; - var type = ex.GetType(); - - switch (_verbosity) + switch (Verbosity) { case 0: - SendMessage(TestMessageLevel.Warning, string.Format(fmt, type, ex.Message)); + var type = ex.GetType(); + SendWarningMessage(string.Format(EXCEPTION_FORMAT, type, message)); + SendWarningMessage(ex.Message); break; default: - SendMessage(TestMessageLevel.Warning, string.Format(fmt, type, ex.ToString())); + SendWarningMessage(message); + SendWarningMessage(ex.ToString()); break; } @@ -108,8 +110,8 @@ public void SendDebugMessage(string message) public void SendMessage(TestMessageLevel testMessageLevel, string message) { - if (_messageLogger != null) - _messageLogger.SendMessage(testMessageLevel, message); + if (MessageLogger != null) + MessageLogger.SendMessage(testMessageLevel, message); } } } diff --git a/src/NUnitTestAdapterInstall/source.extension.vsixmanifest b/src/NUnitTestAdapterInstall/source.extension.vsixmanifest index 9af0606f..e3c338a5 100644 --- a/src/NUnitTestAdapterInstall/source.extension.vsixmanifest +++ b/src/NUnitTestAdapterInstall/source.extension.vsixmanifest @@ -3,7 +3,7 @@ NUnit3 Test Adapter Charlie Poole - 3.0.5.0 + 3.0.6.0 NUnit 3.0 adapter for integrated test execution under Visual Studio 2012 (all updates), Visual Studio 2013 (all updates), and the Visual Studio 2015 Preview and CTPs. Compatible with NUnit 3.0. 1033 http://nunit.org/index.php?p=vsTestAdapter&r=3.0 diff --git a/src/NUnitTestAdapterTests/NUnit3TestAdapterTests.csproj b/src/NUnitTestAdapterTests/NUnit3TestAdapterTests.csproj index 2e5989a7..a7c13712 100644 --- a/src/NUnitTestAdapterTests/NUnit3TestAdapterTests.csproj +++ b/src/NUnitTestAdapterTests/NUnit3TestAdapterTests.csproj @@ -40,18 +40,15 @@ False $(MSBuildProgramFiles32)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll - - ..\mock-assembly\bin\Release\mock-assembly.dll - ..\..\lib\nunit.engine.dll ..\..\lib\nunit.engine.api.dll - + False - ..\..\packages\NUnit.3.0.0-beta-3\lib\net45\nunit.framework.dll + ..\..\packages\NUnit.3.0.0-rc-2\lib\net45\nunit.framework.dll @@ -98,6 +95,10 @@ + + {2e368281-3ba8-4050-b05e-0e0e43f8f446} + mock-assembly + {8a85e26a-c706-48b1-bc36-06ebde3efd25} NUnit3TestAdapter diff --git a/src/NUnitTestAdapterTests/TestDiscoveryTests.cs b/src/NUnitTestAdapterTests/TestDiscoveryTests.cs index 3b6c8467..a94b8120 100644 --- a/src/NUnitTestAdapterTests/TestDiscoveryTests.cs +++ b/src/NUnitTestAdapterTests/TestDiscoveryTests.cs @@ -25,7 +25,7 @@ public class TestDiscoveryTests : IMessageLogger, ITestCaseDiscoverySink public void LoadMockassembly() { // Sanity check to be sure we have the correct version of mock-assembly.dll - Assert.That(NUnit.Tests.Assemblies.MockAssembly.Tests, Is.EqualTo(35), + Assert.That(NUnit.Tests.Assemblies.MockAssembly.Tests, Is.EqualTo(31), "The reference to mock-assembly.dll appears to be the wrong version"); // Load the NUnit mock-assembly.dll once for this test, saving diff --git a/src/NUnitTestAdapterTests/TestExecutionTests.cs b/src/NUnitTestAdapterTests/TestExecutionTests.cs index 1e62e2d4..f23b2522 100644 --- a/src/NUnitTestAdapterTests/TestExecutionTests.cs +++ b/src/NUnitTestAdapterTests/TestExecutionTests.cs @@ -19,10 +19,6 @@ namespace NUnit.VisualStudio.TestAdapter.Tests [Category("TestExecution")] public class TestExecutionTests { - // This constant compensates for the fact that that no - // events are sent for such tests. - private static readonly int TestsUnderBadOrIgnoredFixtures = BadFixture.Tests + IgnoredFixture.Tests; - private string MockAssemblyPath; static readonly IRunContext Context = new FakeRunContext(); @@ -38,7 +34,7 @@ public void LoadMockassembly() MockAssemblyPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "mock-assembly.dll"); // Sanity check to be sure we have the correct version of mock-assembly.dll - Assert.That(MockAssembly.Tests, Is.EqualTo(35), + Assert.That(MockAssembly.Tests, Is.EqualTo(31), "The reference to mock-assembly.dll appears to be the wrong version"); new List(); testResults = new List(); @@ -72,9 +68,11 @@ public void DumpEvents() public void CorrectNumberOfTestCasesWereStarted() { const FakeFrameworkHandle.EventType eventType = FakeFrameworkHandle.EventType.RecordStart; + foreach (var ev in testLog.Events.FindAll(e => e.EventType == eventType)) + Console.WriteLine(ev.TestCase.DisplayName); Assert.That( testLog.Events.FindAll(e => e.EventType == eventType).Count, - Is.EqualTo(MockAssembly.ResultCount - TestsUnderBadOrIgnoredFixtures)); + Is.EqualTo(MockAssembly.ResultCount - BadFixture.Tests - IgnoredFixture.Tests - ExplicitFixture.Tests)); } [Test] @@ -83,7 +81,7 @@ public void CorrectNumberOfTestCasesWereEnded() const FakeFrameworkHandle.EventType eventType = FakeFrameworkHandle.EventType.RecordEnd; Assert.That( testLog.Events.FindAll(e => e.EventType == eventType).Count, - Is.EqualTo(MockAssembly.ResultCount - TestsUnderBadOrIgnoredFixtures)); + Is.EqualTo(MockAssembly.ResultCount)); } [Test] @@ -92,15 +90,15 @@ public void CorrectNumberOfResultsWereReceived() const FakeFrameworkHandle.EventType eventType = FakeFrameworkHandle.EventType.RecordResult; Assert.That( testLog.Events.FindAll(e => e.EventType == eventType).Count, - Is.EqualTo(MockAssembly.ResultCount - BadFixture.Tests)); + Is.EqualTo(MockAssembly.ResultCount)); } static readonly TestCaseData[] outcomes = { // NOTE: One inconclusive test is reported as None new TestCaseData(TestOutcome.Passed).Returns(MockAssembly.Success), - new TestCaseData(TestOutcome.Failed).Returns(MockAssembly.ErrorsAndFailures - BadFixture.Tests), - new TestCaseData(TestOutcome.Skipped).Returns(MockAssembly.Ignored), + new TestCaseData(TestOutcome.Failed).Returns(MockAssembly.ErrorsAndFailures), + new TestCaseData(TestOutcome.Skipped).Returns(MockAssembly.Ignored + MockAssembly.Explicit), new TestCaseData(TestOutcome.None).Returns(1), new TestCaseData(TestOutcome.NotFound).Returns(0) }; diff --git a/src/NUnitTestAdapterTests/app.config b/src/NUnitTestAdapterTests/app.config index 31aaa4f6..4a37ac1b 100644 --- a/src/NUnitTestAdapterTests/app.config +++ b/src/NUnitTestAdapterTests/app.config @@ -4,7 +4,7 @@ - + diff --git a/src/NUnitTestAdapterTests/packages.config b/src/NUnitTestAdapterTests/packages.config index 8d167761..f261bd5d 100644 --- a/src/NUnitTestAdapterTests/packages.config +++ b/src/NUnitTestAdapterTests/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/src/mock-assembly/MockAssembly.cs b/src/mock-assembly/MockAssembly.cs index 9a75036d..08ecf265 100644 --- a/src/mock-assembly/MockAssembly.cs +++ b/src/mock-assembly/MockAssembly.cs @@ -46,8 +46,7 @@ public class MockAssembly + BadFixture.Tests + FixtureWithTestCases.Tests + ParameterizedFixture.Tests - + GenericFixtureConstants.Tests - + CDataTestFixure.Tests; + + GenericFixtureConstants.Tests; public const int Suites = MockTestFixture.Suites + Singletons.OneTestCase.Suites @@ -58,7 +57,6 @@ public class MockAssembly + FixtureWithTestCases.Suites + ParameterizedFixture.Suites + GenericFixtureConstants.Suites - + CDataTestFixure.Suites + NamespaceSuites; public const int Nodes = Tests + Suites; @@ -70,10 +68,10 @@ public class MockAssembly public const int Explicit = MockTestFixture.Explicit + ExplicitFixture.Tests; public const int NotRun = Ignored + Explicit + NotRunnable; public const int TestsRun = Tests - NotRun; - public const int ResultCount = Tests - Explicit; + public const int ResultCount = Tests; public const int Errors = MockTestFixture.Errors; - public const int Failures = MockTestFixture.Failures + CDataTestFixure.Failures; + public const int Failures = MockTestFixture.Failures; public const int NotRunnable = MockTestFixture.NotRunnable + BadFixture.Tests; public const int ErrorsAndFailures = Errors + Failures + NotRunnable; public const int Inconclusive = MockTestFixture.Inconclusive; @@ -297,36 +295,4 @@ public class GenericFixture [Test] public void Test2() { } } - - [TestFixture] - public class CDataTestFixure - { - public const int Tests = 4; - public const int Suites = 1; - public const int Failures = 2; - - [Test] - public void DemonstrateIllegalSequenceInSuccessMessage() - { - Assert.Pass("Deliberate failure to illustrate ]]> in message "); - } - - [Test] - public void DemonstrateIllegalSequenceAtEndOfSuccessMessage() - { - Assert.Pass("The CDATA was: ]]>"); - } - - [Test] - public void DemonstrateIllegalSequenceInFailureMessage() - { - Assert.Fail("Deliberate failure to illustrate ]]> in message "); - } - - [Test] - public void DemonstrateIllegalSequenceAtEndOfFailureMessage() - { - Assert.Fail("The CDATA was: ]]>"); - } - } } diff --git a/src/mock-assembly/mock-assembly.csproj b/src/mock-assembly/mock-assembly.csproj index 55803325..592a9c99 100644 --- a/src/mock-assembly/mock-assembly.csproj +++ b/src/mock-assembly/mock-assembly.csproj @@ -79,9 +79,9 @@ false - + False - packages\NUnit.3.0.0-beta-3\lib\net45\nunit.framework.dll + ..\..\packages\NUnit.3.0.0-rc-2\lib\net45\nunit.framework.dll System diff --git a/src/mock-assembly/packages.config b/src/mock-assembly/packages.config index 8d167761..f261bd5d 100644 --- a/src/mock-assembly/packages.config +++ b/src/mock-assembly/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file