Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3608 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
15 changed files with 610 additions and 98 deletions
@ -0,0 +1,56 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
|
||||||
|
namespace ICSharpCode.UnitTesting |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Used to determine which classes have been removed by the user in the project.
|
||||||
|
/// </summary>
|
||||||
|
public class RemovedClasses |
||||||
|
{ |
||||||
|
Dictionary<string, IClass> classDictionary = new Dictionary<string, IClass>(); |
||||||
|
|
||||||
|
public RemovedClasses() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public void Add(IList<IClass> classes) |
||||||
|
{ |
||||||
|
foreach (IClass c in classes) { |
||||||
|
classDictionary[c.DotNetName] = c; |
||||||
|
foreach (IClass innerClass in c.InnerClasses) { |
||||||
|
classDictionary[innerClass.DotNetName] = innerClass; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="c"></param>
|
||||||
|
public void Remove(IClass c) |
||||||
|
{ |
||||||
|
classDictionary.Remove(c.DotNetName); |
||||||
|
foreach (IClass innerClass in c.InnerClasses) { |
||||||
|
classDictionary.Remove(innerClass.DotNetName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public IList<IClass> GetMissingClasses() |
||||||
|
{ |
||||||
|
List<IClass> missingClasses = new List<IClass>(); |
||||||
|
foreach (IClass c in classDictionary.Values) { |
||||||
|
missingClasses.Add(c); |
||||||
|
} |
||||||
|
return missingClasses; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,73 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using NUnit.Framework; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests what happens when a test method is renamed inside an inner class.
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class InnerClassMethodRemovedTestFixture : InnerClassTestFixtureBase |
||||||
|
{ |
||||||
|
TestClass innerTestClass; |
||||||
|
|
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
base.InitBase(); |
||||||
|
|
||||||
|
DefaultCompilationUnit oldUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
oldUnit.Classes.Add(outerClass); |
||||||
|
|
||||||
|
// Create new compilation unit with inner class that has its method renamed.
|
||||||
|
DefaultCompilationUnit newUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
MockClass newOuterClass = new MockClass("MyTests.A"); |
||||||
|
newOuterClass.ProjectContent = projectContent; |
||||||
|
projectContent.Classes.Add(newOuterClass); |
||||||
|
newOuterClass.SetCompoundClass(newOuterClass); |
||||||
|
newUnit.Classes.Add(newOuterClass); |
||||||
|
|
||||||
|
// Create the inner test class.
|
||||||
|
MockClass newInnerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest"); |
||||||
|
newInnerClass.Attributes.Add(new MockAttribute("TestFixture")); |
||||||
|
newInnerClass.ProjectContent = projectContent; |
||||||
|
newInnerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
newInnerClass.SetCompoundClass(newInnerClass); |
||||||
|
newOuterClass.InnerClasses.Add(newInnerClass); |
||||||
|
|
||||||
|
MockMethod method = new MockMethod("FooBarRenamed"); |
||||||
|
method.Attributes.Add(new MockAttribute("Test")); |
||||||
|
method.DeclaringType = newInnerClass; |
||||||
|
newInnerClass.Methods.Add(method); |
||||||
|
outerClass.InnerClasses.Add(newInnerClass); |
||||||
|
|
||||||
|
// Update TestProject's parse info.
|
||||||
|
testProject.UpdateParseInfo(oldUnit, newUnit); |
||||||
|
|
||||||
|
innerTestClass = testProject.TestClasses["MyTests.A+InnerATest"]; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NewTestMethodExists() |
||||||
|
{ |
||||||
|
TestMethod method = innerTestClass.TestMethods[0]; |
||||||
|
Assert.AreEqual("FooBarRenamed", method.Name); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void OldTestMethodRemoved() |
||||||
|
{ |
||||||
|
Assert.AreEqual(1, innerTestClass.TestMethods.Count); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using NUnit.Framework; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests that the TestProject is correctly updated after the inner class name changes.
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class InnerClassNameChangesTestFixture : InnerClassTestFixtureBase |
||||||
|
{ |
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
base.InitBase(); |
||||||
|
|
||||||
|
DefaultCompilationUnit oldUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
oldUnit.Classes.Add(outerClass); |
||||||
|
|
||||||
|
// Create new compilation unit with extra class.
|
||||||
|
DefaultCompilationUnit newUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
MockClass newOuterClass = new MockClass("MyTests.A"); |
||||||
|
newOuterClass.ProjectContent = projectContent; |
||||||
|
projectContent.Classes.Add(newOuterClass); |
||||||
|
newOuterClass.SetCompoundClass(newOuterClass); |
||||||
|
newUnit.Classes.Add(newOuterClass); |
||||||
|
|
||||||
|
// Create the inner test class.
|
||||||
|
// Note the use of the DotNetName "MyTests.A+InnerTest".
|
||||||
|
MockClass newInnerClass = new MockClass("MyTests.A.InnerATestMod", "MyTests.A+InnerATestMod"); |
||||||
|
newInnerClass.Attributes.Add(new MockAttribute("TestFixture")); |
||||||
|
newInnerClass.ProjectContent = projectContent; |
||||||
|
newInnerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
newOuterClass.InnerClasses.Add(newInnerClass); |
||||||
|
|
||||||
|
// Update TestProject's parse info.
|
||||||
|
testProject.UpdateParseInfo(oldUnit, newUnit); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NewInnerClassAdded() |
||||||
|
{ |
||||||
|
Assert.IsTrue(testProject.TestClasses.Contains("MyTests.A+InnerATestMod")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void OldInnerClassRemoved() |
||||||
|
{ |
||||||
|
Assert.IsFalse(testProject.TestClasses.Contains("MyTests.A+InnerATest")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void OneTestClassRemain() |
||||||
|
{ |
||||||
|
Assert.AreEqual(1, testProject.TestClasses.Count); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,79 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using NUnit.Framework; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests that a class with an inner test fixture is recognised, for example:
|
||||||
|
///
|
||||||
|
/// public class A
|
||||||
|
/// {
|
||||||
|
/// [TestFixture]
|
||||||
|
/// public class InnerATest
|
||||||
|
/// {
|
||||||
|
/// [Test]
|
||||||
|
/// public void FooBar()
|
||||||
|
/// {
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// In this case the FooBar test is identified via: "A+InnerATest.FooBar".
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class InnerClassTestFixture : InnerClassTestFixtureBase |
||||||
|
{ |
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
base.InitBase(); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void OneTestClassFound() |
||||||
|
{ |
||||||
|
Assert.AreEqual(1, testProject.TestClasses.Count); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestClassQualifiedName() |
||||||
|
{ |
||||||
|
Assert.AreEqual("MyTests.A+InnerATest", testClass.QualifiedName); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestClassName() |
||||||
|
{ |
||||||
|
Assert.AreEqual("A+InnerATest", testClass.Name); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NoTestClassesForNamespaceMyTestsA() |
||||||
|
{ |
||||||
|
Assert.AreEqual(0, testProject.GetTestClasses("MyTests.A").Length); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void OneTestClassForNamespaceMyTests() |
||||||
|
{ |
||||||
|
Assert.AreEqual(1, testProject.GetTestClasses("MyTests").Length); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NamespaceForInnerClassIsDeclaringTypesNamespace() |
||||||
|
{ |
||||||
|
Assert.AreEqual("MyTests", testClass.Namespace); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,61 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using NUnit.Framework; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests that the inner test class is removed when its TestFixture attribute is removed.
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class InnerClassTestFixtureAttributeRemovedTestFixture : InnerClassTestFixtureBase |
||||||
|
{ |
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
base.InitBase(); |
||||||
|
|
||||||
|
DefaultCompilationUnit oldUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
oldUnit.Classes.Add(outerClass); |
||||||
|
|
||||||
|
// Create new compilation unit with inner class that no longer has the TestFixture attribute.
|
||||||
|
DefaultCompilationUnit newUnit = new DefaultCompilationUnit(projectContent); |
||||||
|
MockClass newOuterClass = new MockClass("MyTests.A"); |
||||||
|
newOuterClass.ProjectContent = projectContent; |
||||||
|
projectContent.Classes.Add(newOuterClass); |
||||||
|
newOuterClass.SetCompoundClass(newOuterClass); |
||||||
|
newUnit.Classes.Add(newOuterClass); |
||||||
|
|
||||||
|
// Create the inner test class.
|
||||||
|
MockClass newInnerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest"); |
||||||
|
newInnerClass.ProjectContent = projectContent; |
||||||
|
newInnerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
newInnerClass.SetCompoundClass(newInnerClass); |
||||||
|
newOuterClass.InnerClasses.Add(newInnerClass); |
||||||
|
|
||||||
|
// Update TestProject's parse info.
|
||||||
|
testProject.UpdateParseInfo(oldUnit, newUnit); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NoTestClasses() |
||||||
|
{ |
||||||
|
Assert.AreEqual(0, testProject.TestClasses.Count); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void InnerTestClassRemoved() |
||||||
|
{ |
||||||
|
Assert.IsFalse(testProject.TestClasses.Contains("MyTests.A+InnerATest")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,70 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Base class for testing inner classes with TestFixture information.
|
||||||
|
/// </summary>
|
||||||
|
public class InnerClassTestFixtureBase |
||||||
|
{ |
||||||
|
protected TestClass testClass; |
||||||
|
protected MockClass innerClass; |
||||||
|
protected TestProject testProject; |
||||||
|
protected MockProjectContent projectContent; |
||||||
|
protected MockClass outerClass; |
||||||
|
|
||||||
|
protected void InitBase() |
||||||
|
{ |
||||||
|
projectContent = new MockProjectContent(); |
||||||
|
projectContent.Language = LanguageProperties.None; |
||||||
|
|
||||||
|
// Create the base test class.
|
||||||
|
outerClass = new MockClass("MyTests.A"); |
||||||
|
outerClass.ProjectContent = projectContent; |
||||||
|
projectContent.Classes.Add(outerClass); |
||||||
|
|
||||||
|
// Create the inner test class.
|
||||||
|
// Note the use of the DotNetName "MyTests.A+InnerTest".
|
||||||
|
innerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest"); |
||||||
|
innerClass.Attributes.Add(new MockAttribute("TestFixture")); |
||||||
|
innerClass.ProjectContent = projectContent; |
||||||
|
innerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
|
||||||
|
MockMethod method = new MockMethod("FooBar"); |
||||||
|
method.Attributes.Add(new MockAttribute("Test")); |
||||||
|
method.DeclaringType = innerClass; |
||||||
|
innerClass.Methods.Add(method); |
||||||
|
outerClass.InnerClasses.Add(innerClass); |
||||||
|
|
||||||
|
// Add another inner class that is not a test class.
|
||||||
|
MockClass nonTestInnerClass = new MockClass("MyTests.A.InnerBClass"); |
||||||
|
nonTestInnerClass.ProjectContent = projectContent; |
||||||
|
nonTestInnerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
outerClass.InnerClasses.Add(nonTestInnerClass); |
||||||
|
|
||||||
|
// Add another inner class with the same name as the InnerATest.
|
||||||
|
// This makes sure duplicate classes are not added.
|
||||||
|
MockClass duplicateInnerClass = new MockClass("MyTests.A.InnerATest", "MyTests.A+InnerATest"); |
||||||
|
duplicateInnerClass.Attributes.Add(new MockAttribute("TestFixture")); |
||||||
|
duplicateInnerClass.ProjectContent = projectContent; |
||||||
|
duplicateInnerClass.DeclaringType = outerClass; // Declaring type is outer class.
|
||||||
|
outerClass.InnerClasses.Add(duplicateInnerClass); |
||||||
|
|
||||||
|
testProject = new TestProject(null, projectContent); |
||||||
|
if (testProject.TestClasses.Count > 0) { |
||||||
|
testClass = testProject.TestClasses[0]; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,111 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Text; |
||||||
|
using ICSharpCode.SharpDevelop.Dom; |
||||||
|
using ICSharpCode.UnitTesting; |
||||||
|
using NUnit.Framework; |
||||||
|
using UnitTesting.Tests.Utils; |
||||||
|
|
||||||
|
namespace UnitTesting.Tests.Project |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class RemovedClassesTestFixture |
||||||
|
{ |
||||||
|
RemovedClasses removedClasses; |
||||||
|
MockClass myClass; |
||||||
|
MockClass anotherClass; |
||||||
|
MockClass innerClass; |
||||||
|
|
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
myClass = new MockClass("MyTests.MyClass"); |
||||||
|
innerClass = new MockClass("MyTests.MyClass.InnerClass", "MyTests.MyClass+InnerClass"); |
||||||
|
myClass.InnerClasses.Add(innerClass); |
||||||
|
|
||||||
|
anotherClass = new MockClass("MyTests.AnotherClass"); |
||||||
|
|
||||||
|
List<IClass> classes = new List<IClass>(); |
||||||
|
classes.Add(myClass); |
||||||
|
classes.Add(anotherClass); |
||||||
|
|
||||||
|
removedClasses = new RemovedClasses(); |
||||||
|
removedClasses.Add(classes); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void InnerClassesIncludedInMissingClasses() |
||||||
|
{ |
||||||
|
List<IClass> expectedClasses = new List<IClass>(); |
||||||
|
expectedClasses.Add(myClass); |
||||||
|
expectedClasses.Add(innerClass); |
||||||
|
expectedClasses.Add(anotherClass); |
||||||
|
|
||||||
|
AssertContains(expectedClasses, removedClasses.GetMissingClasses()); |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should remove inner class too.
|
||||||
|
/// </summary>
|
||||||
|
[Test] |
||||||
|
public void RemoveMyClass() |
||||||
|
{ |
||||||
|
removedClasses.Remove(myClass); |
||||||
|
|
||||||
|
List<IClass> expectedClasses = new List<IClass>(); |
||||||
|
expectedClasses.Add(anotherClass); |
||||||
|
|
||||||
|
AssertContains(expectedClasses, removedClasses.GetMissingClasses()); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void RemoveInnerClass() |
||||||
|
{ |
||||||
|
removedClasses.Remove(innerClass); |
||||||
|
|
||||||
|
List<IClass> expectedClasses = new List<IClass>(); |
||||||
|
expectedClasses.Add(myClass); |
||||||
|
expectedClasses.Add(anotherClass); |
||||||
|
|
||||||
|
AssertContains(expectedClasses, removedClasses.GetMissingClasses()); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void DotNetNameUsedWhenAddingClasses() |
||||||
|
{ |
||||||
|
MockClass c = new MockClass("MyTests.MyClass.InnerClass", "MyTests.MyClass+InnerClass"); |
||||||
|
List<IClass> classes = new List<IClass>(); |
||||||
|
classes.Add(c); |
||||||
|
|
||||||
|
RemovedClasses removedClasses = new RemovedClasses(); |
||||||
|
removedClasses.Add(classes); |
||||||
|
removedClasses.Remove(c); |
||||||
|
|
||||||
|
Assert.AreEqual(0, removedClasses.GetMissingClasses().Count); |
||||||
|
} |
||||||
|
|
||||||
|
void AssertContains(IList<IClass> expectedClasses, IList<IClass> actualClasses) |
||||||
|
{ |
||||||
|
foreach (IClass c in expectedClasses) { |
||||||
|
Assert.IsTrue(actualClasses.Contains(c), "Class missing: " + c.FullyQualifiedName + " Actual:\r\n" + GetClassNames(actualClasses)); |
||||||
|
} |
||||||
|
Assert.AreEqual(expectedClasses.Count, actualClasses.Count, "Actual:\r\n" + GetClassNames(actualClasses)); |
||||||
|
} |
||||||
|
|
||||||
|
string GetClassNames(IList<IClass> classes) |
||||||
|
{ |
||||||
|
StringBuilder names = new StringBuilder(); |
||||||
|
foreach (IClass c in classes) { |
||||||
|
names.AppendLine(c.FullyQualifiedName); |
||||||
|
} |
||||||
|
return names.ToString(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue