nunit-core team mailing list archive
-
nunit-core team
-
Mailing list archive
-
Message #00661
[Merge] lp:~u-launchpad-brianlow-com/nunitv2/MultiTestNames into lp:nunitv2
Brian Low has proposed merging lp:~u-launchpad-brianlow-com/nunitv2/MultiTestNames into lp:nunitv2.
Requested reviews:
NUnit Core Developers (nunit-core)
Allow multiple test names to be specified on the nunit-console runner.
Use /run with a comma-separated list of test cases/fixtures/namespaces.
--
https://code.launchpad.net/~u-launchpad-brianlow-com/nunitv2/MultiTestNames/+merge/29639
Your team NUnit Core Developers is requested to review the proposed merge of lp:~u-launchpad-brianlow-com/nunitv2/MultiTestNames into lp:nunitv2.
=== modified file 'doc/consoleCommandLine.html'
--- doc/consoleCommandLine.html 2010-04-23 04:11:21 +0000
+++ doc/consoleCommandLine.html 2010-07-10 19:19:41 +0000
@@ -47,14 +47,20 @@
<p>To run the same tests through an NUnit test project you have defined, use:</p>
<pre class="programtext"> nunit-console nunit.tests.nunit</pre>
-<h4>Specifying an Assembly and a Test to be Run</h4>
-<p>You may specify a test to be run by proviig the full name of the test along
+<h4>Specifying an Assembly and Test(s) to be Run</h4>
+<p>You may specify a test to be run by providing the full name of the test along
with the containing assembly. For example to run NUnit.Tests.AssertionTests
in the nunit.tests assembly use the following command:
<pre class="programtext"> nunit-console /run:NUnit.Tests.AssertionTests nunit.tests.dll</pre>
<p>The name of the test to be run may be that of a test case, test fixture or
-a namespace. Unlike the <b>/fixture</b> option, this option affects the running
+a namespace.
+
+<p>You can specify multiple tests by separating names with commas (without spaces). For example:
+
+<pre class="programtext"> nunit-console /run:NUnit.Tests.AssertionTests,NUnit.Tests.ConstraintTests nunit.tests.dll</pre>
+
+<p>Unlike the <b>/fixture</b> option, this option affects the running
rather than the loading of the tests. Consequently it supports much broader use,
including situations involving SetUpFixtures, which are not run if the class
in question is not loaded. You should use <b>/run</b> in lieu of <b>/fixture</b>
=== modified file 'src/ConsoleRunner/nunit-console/ConsoleOptions.cs'
--- src/ConsoleRunner/nunit-console/ConsoleOptions.cs 2009-07-17 03:55:50 +0000
+++ src/ConsoleRunner/nunit-console/ConsoleOptions.cs 2010-07-10 19:19:41 +0000
@@ -16,7 +16,7 @@
[Option(Short="load", Description = "Test fixture or namespace to be loaded (Deprecated)")]
public string fixture;
- [Option(Description = "Name of the test case, fixture or namespace to run")]
+ [Option(Description = "Name of the test case(s), fixture(s) or namespace(s) to run")]
public string run;
[Option(Description = "Project configuration (e.g.: Debug) to load")]
=== modified file 'src/ConsoleRunner/nunit-console/ConsoleUi.cs'
--- src/ConsoleRunner/nunit-console/ConsoleUi.cs 2010-04-28 17:10:46 +0000
+++ src/ConsoleRunner/nunit-console/ConsoleUi.cs 2010-07-10 19:19:41 +0000
@@ -83,7 +83,7 @@
TestFilter testFilter = TestFilter.Empty;
if ( options.run != null && options.run != string.Empty )
{
- Console.WriteLine( "Selected test: " + options.run );
+ Console.WriteLine( "Selected test(s): " + options.run );
testFilter = new SimpleNameFilter( options.run );
}
=== modified file 'src/NUnitCore/interfaces/Filters/SimpleNameFilter.cs'
--- src/NUnitCore/interfaces/Filters/SimpleNameFilter.cs 2009-04-18 20:57:20 +0000
+++ src/NUnitCore/interfaces/Filters/SimpleNameFilter.cs 2010-07-10 19:19:41 +0000
@@ -21,23 +21,24 @@
/// Construct an empty SimpleNameFilter
/// </summary>
public SimpleNameFilter() { }
-
+
/// <summary>
/// Construct a SimpleNameFilter for a single name
/// </summary>
- /// <param name="name">The name the filter will recognize</param>
- public SimpleNameFilter( string name )
- {
- this.names.Add( name );
+ /// <param name="name">The name the filter will recognize. Separate multiple names with commas.</param>
+ public SimpleNameFilter( string name )
+ {
+ Add( name );
}
/// <summary>
/// Add a name to a SimpleNameFilter
- /// </summary>
- /// <param name="name">The name to be added</param>
- public void Add( string name )
- {
- names.Add( name );
+ /// </summary>
+ /// <param name="name">The name to be added. Separate multiple names with commas.</param>
+ public void Add( string name )
+ {
+ string[] namesToAdd = name.Split( new string[] {","}, StringSplitOptions.RemoveEmptyEntries);
+ names.AddRange( namesToAdd );
}
/// <summary>
=== modified file 'src/NUnitCore/tests/SimpleNameFilterTests.cs'
--- src/NUnitCore/tests/SimpleNameFilterTests.cs 2009-04-18 20:57:20 +0000
+++ src/NUnitCore/tests/SimpleNameFilterTests.cs 2010-07-10 19:19:41 +0000
@@ -9,7 +9,8 @@
using NUnit.Framework;
using NUnit.Tests.Assemblies;
using NUnit.Core.Builders;
-using NUnit.Core.Filters;
+using NUnit.Core.Filters;
+using NUnit.Tests.Singletons;
using NUnit.TestUtilities;
namespace NUnit.Core.Tests
@@ -49,16 +50,49 @@
Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
Assert.IsTrue(filter.Pass(mock1), "Name Filter did not pass test case");
Assert.IsTrue(filter.Pass((TestSuite)testSuite.Tests[0]), "Name Filter did not pass test suite");
- }
-
+ }
+
+ [Test]
+ public void MultipleNameMatchWhenPassedAsCommaSeparatedString()
+ {
+ Test mock1 = TestFinder.Find("MockTest1", testSuite, true);
+ SimpleNameFilter filter = new SimpleNameFilter("NUnit.Tests.Assemblies.MockTestFixture.MockTest3,NUnit.Tests.Assemblies.MockTestFixture.MockTest1");
+ Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
+ Assert.IsTrue(filter.Pass(mock1), "Name Filter did not pass test case");
+ Assert.IsTrue(filter.Pass((TestSuite)testSuite.Tests[0]), "Name Filter did not pass test suite");
+ }
+
+ [Test]
+ public void MultipleNameMatchWithTrailingComma()
+ {
+ Test mock1 = TestFinder.Find("MockTest1", testSuite, true);
+ SimpleNameFilter filter = new SimpleNameFilter("NUnit.Tests.Assemblies.MockTestFixture.MockTest3,NUnit.Tests.Assemblies.MockTestFixture.MockTest1,");
+ Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
+ Assert.IsTrue(filter.Pass(mock1), "Name Filter did not pass test case");
+ Assert.IsTrue(filter.Pass((TestSuite)testSuite.Tests[0]), "Name Filter did not pass test suite");
+ }
+
[Test]
public void SuiteNameMatch()
{
NUnit.Core.TestSuite mockTest = (NUnit.Core.TestSuite)TestFinder.Find("MockTestFixture", testSuite, true);
SimpleNameFilter filter = new SimpleNameFilter("NUnit.Tests.Assemblies.MockTestFixture");
Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
- Assert.IsTrue(filter.Pass(mockTest), "Suite did not pass test case");
+ Assert.IsTrue(filter.Pass(mockTest), "Fixture did not pass test case");
Assert.IsTrue(filter.Pass(testSuite), "Suite did not pass test case");
+ }
+
+ [Test]
+ public void MultipleSuiteNameMatch()
+ {
+ testSuite.Add(TestBuilder.MakeFixture(typeof(OneTestCase)));
+ NUnit.Core.TestSuite mockTestFixture = (NUnit.Core.TestSuite)TestFinder.Find("MockTestFixture", testSuite, true);
+ NUnit.Core.TestSuite oneTestCaseFixture = (NUnit.Core.TestSuite)TestFinder.Find("OneTestCase", testSuite, true);
+ SimpleNameFilter filter = new SimpleNameFilter("NUnit.Tests.Assemblies.MockTestFixture,NUnit.Tests.Singletons.OneTestCase");
+ Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
+ Assert.IsTrue(filter.Pass(mockTestFixture), "Fixture did not pass test case");
+ Assert.IsTrue(filter.Pass(oneTestCaseFixture), "Fixture did not pass test case");
+ Assert.IsTrue(filter.Pass(testSuite), "Suite did not pass test case");
}
[Test]
@@ -75,7 +109,7 @@
NUnit.Core.TestSuite mockTest = (NUnit.Core.TestSuite)TestFinder.Find("MockTestFixture", testSuite, true);
SimpleNameFilter filter = new SimpleNameFilter("NUnit.Tests.Assemblies.MockTestFixture");
Assert.AreEqual(true, filter.Pass(mock3), "test case");
- Assert.AreEqual(true, filter.Pass(mockTest), "middle suite");
+ Assert.AreEqual(true, filter.Pass(mockTest), "fixture");
Assert.AreEqual(true, filter.Pass(testSuite), "test suite");
}