Browse Source

Showing any classes nested in test fixtures as test classes (as NUnit Gui does).

pull/23/head
Tomasz Tretkowski 14 years ago
parent
commit
d3acf59322
  1. 47
      src/AddIns/Analysis/UnitTesting/Src/InnerClassEnumerator.cs
  2. 2
      src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs
  3. 2
      src/AddIns/Analysis/UnitTesting/Src/TestProject.cs
  4. 81
      src/AddIns/Analysis/UnitTesting/Test/Project/InnerClassInTestFixtureTests.cs
  5. 3
      src/AddIns/Analysis/UnitTesting/Test/Project/InnerClassTestFixtureBase.cs
  6. 18
      src/AddIns/Analysis/UnitTesting/Test/UnitTesting.Tests.csproj
  7. 11
      src/AddIns/Analysis/UnitTesting/UnitTesting.csproj

47
src/AddIns/Analysis/UnitTesting/Src/InnerClassEnumerator.cs

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.UnitTesting
{
public class InnerClassEnumerator : IEnumerable<IClass>
{
readonly IClass _c;
public InnerClassEnumerator(IClass c)
{
_c = c;
}
#region IEnumerable<IClass> Members
public IEnumerator<IClass> GetEnumerator()
{
var result = new List<IClass>();
Visit(_c, result);
return result.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
private void Visit(IClass c, List<IClass> resultList)
{
foreach (var innerClass in c.InnerClasses)
{
resultList.Add(innerClass);
Visit(innerClass, resultList);
}
}
}
}

2
src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs

@ -50,6 +50,8 @@ namespace ICSharpCode.UnitTesting @@ -50,6 +50,8 @@ namespace ICSharpCode.UnitTesting
return true;
}
}
if (c.DeclaringType != null)
return IsTestClass(c.DeclaringType);
}
return false;
}

2
src/AddIns/Analysis/UnitTesting/Src/TestProject.cs

@ -215,7 +215,7 @@ namespace ICSharpCode.UnitTesting @@ -215,7 +215,7 @@ namespace ICSharpCode.UnitTesting
testClasses.Add(CreateTestClass(c));
}
}
foreach (IClass innerClass in c.InnerClasses) {
foreach (IClass innerClass in new InnerClassEnumerator(c)) {
if (IsTestClass(innerClass)) {
if (!testClasses.Contains(innerClass.DotNetName)) {
testClasses.Add(CreateTestClass(innerClass));

81
src/AddIns/Analysis/UnitTesting/Test/Project/InnerClassInTestFixtureTests.cs

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.UnitTesting;
using NUnit.Framework;
using UnitTesting.Tests.Utils;
using System.Linq;
namespace UnitTesting.Tests.Project
{
/// <summary>
/// Tests that a class nested inside test fixture is recognized, e.g.
///
/// [TestFixture]
/// public class A
/// {
/// public class InnerATest
/// {
/// [Test]
/// public void FooBar()
/// {
/// }
/// }
/// }
///
/// In this case the FooBar test is identified via: "A+InnerATest.FooBar".
/// </summary>
[TestFixture]
public class InnerClassInTestFixtureTests : InnerClassTestFixtureBase
{
MockClass classNestedInInnerClass;
[SetUp]
public void Init()
{
base.InitBase();
//Add TestFixture attribute to outer class
outerClass.Attributes.Add(new MockAttribute("TestFixture"));
testProject = new TestProject(null, projectContent, testFrameworks);
//Add inner class nested in test class
classNestedInInnerClass = new MockClass(projectContent, "MyTests.A.InnerATest.InnerTestLevel2", "MyTests.A+InnerATest+InnerTestLevel2", innerClass);
innerClass.InnerClasses.Add(classNestedInInnerClass);
}
[Test]
public void OuterTestClassFound()
{
AssertTestResultContainsClass(outerClass);
}
[Test]
public void InnerTestClassWithTestFixtureAttributeFound()
{
AssertTestResultContainsClass(innerClass);
}
[Test]
public void InnerTestClassWithoutTestFixtureAttributeFound()
{
AssertTestResultContainsClass(nonTestInnerClass);
}
[Test]
public void InnerClassInInnerClassFound()
{
AssertTestResultContainsClass(classNestedInInnerClass);
}
void AssertTestResultContainsClass(IClass clazz)
{
var count = testProject.TestClasses.Count(c => c.Class == clazz);
if (count != 1)
throw new AssertionException(string.Format("Test result should contain class {0}.", clazz.FullyQualifiedName));
}
}
}

3
src/AddIns/Analysis/UnitTesting/Test/Project/InnerClassTestFixtureBase.cs

@ -16,6 +16,7 @@ namespace UnitTesting.Tests.Project @@ -16,6 +16,7 @@ namespace UnitTesting.Tests.Project
{
protected TestClass testClass;
protected MockClass innerClass;
protected MockClass nonTestInnerClass;
protected TestProject testProject;
protected MockProjectContent projectContent;
protected MockClass outerClass;
@ -41,7 +42,7 @@ namespace UnitTesting.Tests.Project @@ -41,7 +42,7 @@ namespace UnitTesting.Tests.Project
outerClass.InnerClasses.Add(innerClass);
// Add another inner class that is not a test class.
MockClass nonTestInnerClass = new MockClass(projectContent, "MyTests.A.InnerBClass", outerClass);
nonTestInnerClass = new MockClass(projectContent, "MyTests.A.InnerBClass", outerClass);
outerClass.InnerClasses.Add(nonTestInnerClass);
// Add another inner class with the same name as the InnerATest.

18
src/AddIns/Analysis/UnitTesting/Test/UnitTesting.Tests.csproj

@ -84,6 +84,7 @@ @@ -84,6 +84,7 @@
<Compile Include="Frameworks\UnitTestingOptionsTestFixture.cs" />
<Compile Include="Project\AbstractBaseClassWithTestMethodsTestFixture.cs" />
<Compile Include="Project\BaseTestMethodTestFixture.cs" />
<Compile Include="Project\InnerClassInTestFixtureTests.cs" />
<Compile Include="Project\DuplicateClassNameChangedTestFixture.cs" />
<Compile Include="Project\InnerClassMethodRenamedTestFixture.cs" />
<Compile Include="Project\InnerClassNameChangesTestFixture.cs" />
@ -144,8 +145,12 @@ @@ -144,8 +145,12 @@
<Compile Include="Utils\DerivedRunTestInPadCommand.cs" />
<Compile Include="Utils\DerivedRunTestWithDebuggerCommand.cs" />
<Compile Include="Utils\DerivedTestProjectTreeNode.cs" />
<Compile Include="Utils\DerivedTestTreeView.cs" />
<Compile Include="Utils\DerivedUnitTestingOptionsPanel.cs" />
<Compile Include="Utils\DerivedTestTreeView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Utils\DerivedUnitTestingOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Utils\DerivedUnitTestsPad.cs" />
<Compile Include="Utils\JumpedToFile.cs" />
<Compile Include="Utils\MockAddInTree.cs" />
@ -225,7 +230,9 @@ @@ -225,7 +230,9 @@
<Compile Include="Utils\MockProjectContent.cs" />
<Compile Include="Utils\MockAttribute.cs" />
<Compile Include="Tree\OneTestClassTestFixture.cs" />
<Compile Include="Utils\DummyParserServiceTestTreeView.cs" />
<Compile Include="Utils\DummyParserServiceTestTreeView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Project\TestProjectWithOneClassTestFixture.cs" />
<Compile Include="Project\ClassRootNamespaceTests.cs" />
<Compile Include="Project\TwoProjectRootNamespacesTestFixture.cs" />
@ -250,7 +257,6 @@ @@ -250,7 +257,6 @@
<Compile Include="Utils\MockCSharpProject.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Utils\Tests" />
<ProjectReference Include="..\UnitTesting.csproj">
<Project>{1F261725-6318-4434-A1B1-6C70CE4CD324}</Project>
<Name>UnitTesting</Name>
@ -267,14 +273,10 @@ @@ -267,14 +273,10 @@
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
</ProjectReference>
<Folder Include="Frameworks" />
<Folder Include="Utils" />
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
</ProjectReference>
<Folder Include="Tree" />
<Folder Include="Project" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

11
src/AddIns/Analysis/UnitTesting/UnitTesting.csproj

@ -60,6 +60,7 @@ @@ -60,6 +60,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Src\IFileSystem.cs" />
<Compile Include="Src\InnerClassEnumerator.cs" />
<Compile Include="Src\IUnitTestMessageService.cs" />
<Compile Include="Src\MultipleProjectBuildable.cs" />
<Compile Include="Src\TestProcessRunnerBaseContext.cs" />
@ -121,7 +122,9 @@ @@ -121,7 +122,9 @@
<Compile Include="Src\UnitTestCommands.cs" />
<Compile Include="Src\TestableCondition.cs" />
<Compile Include="Src\RunningTestsCondition.cs" />
<Compile Include="Src\TestTreeView.cs" />
<Compile Include="Src\TestTreeView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Src\NUnitConsoleCommandLine.cs" />
<Compile Include="Src\AbstractRunTestCommand.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
@ -140,7 +143,9 @@ @@ -140,7 +143,9 @@
<Compile Include="Src\TestClassTreeNode.cs" />
<Compile Include="Src\TestMethodTreeNode.cs" />
<Compile Include="Src\UnitTestingOptions.cs" />
<Compile Include="Src\UnitTestingOptionsPanel.cs" />
<Compile Include="Src\UnitTestingOptionsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\UnitTestsPad.cs" />
<EmbeddedResource Include="Resources\Red.png" />
<EmbeddedResource Include="Resources\Green.png" />
@ -171,7 +176,6 @@ @@ -171,7 +176,6 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Configuration" />
<ProjectReference Include="..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>
@ -182,7 +186,6 @@ @@ -182,7 +186,6 @@
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Resources" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
<Import Project="PostBuildEvent.proj" />

Loading…
Cancel
Save