7 changed files with 150 additions and 14 deletions
@ -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); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -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)); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue