39 changed files with 355 additions and 824 deletions
@ -1,47 +0,0 @@ |
|||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Linq; |
|
||||||
using System.Text; |
|
||||||
|
|
||||||
|
|
||||||
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); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,214 +0,0 @@ |
|||||||
// 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 System.Collections.Generic; |
|
||||||
using System.Collections.ObjectModel; |
|
||||||
using ICSharpCode.Core; |
|
||||||
|
|
||||||
namespace ICSharpCode.UnitTesting |
|
||||||
{ |
|
||||||
public class TestClassCollection : KeyedCollection<string, TestClass> |
|
||||||
{ |
|
||||||
TestResultType testResult = TestResultType.None; |
|
||||||
|
|
||||||
Dictionary<string, TestClass> passedTestClasses = new Dictionary<string, TestClass>(); |
|
||||||
Dictionary<string, TestClass> failedTestClasses = new Dictionary<string, TestClass>(); |
|
||||||
Dictionary<string, TestClass> ignoredTestClasses = new Dictionary<string, TestClass>(); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when the test result for this collection of
|
|
||||||
/// classes has changed.
|
|
||||||
/// </summary>
|
|
||||||
public event EventHandler ResultChanged; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when a class is added to this collection.
|
|
||||||
/// </summary>
|
|
||||||
public event TestClassEventHandler TestClassAdded; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when a class is removed from this collection.
|
|
||||||
/// </summary>
|
|
||||||
public event TestClassEventHandler TestClassRemoved; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the overall test results for the collection of
|
|
||||||
/// test classes.
|
|
||||||
/// </summary>
|
|
||||||
public TestResultType Result { |
|
||||||
get { |
|
||||||
return testResult; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets all the test class test results back to none.
|
|
||||||
/// </summary>
|
|
||||||
public void ResetTestResults() |
|
||||||
{ |
|
||||||
passedTestClasses.Clear(); |
|
||||||
failedTestClasses.Clear(); |
|
||||||
ignoredTestClasses.Clear(); |
|
||||||
|
|
||||||
foreach (TestClass c in this) { |
|
||||||
c.ResetTestResults(); |
|
||||||
} |
|
||||||
|
|
||||||
SetTestResult(TestResultType.None); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Updates the test method with the specified test result.
|
|
||||||
/// </summary>
|
|
||||||
public void UpdateTestResult(TestResult testResult) |
|
||||||
{ |
|
||||||
TestClass testClass = GetTestClassFromTestMemberName(testResult.Name); |
|
||||||
if (testClass != null) { |
|
||||||
testClass.UpdateTestResult(testResult); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the matching test member from this set of classes.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fullyQualifiedName">The fully qualified
|
|
||||||
/// method name (e.g. Namespace.ClassName.MethodName).</param>
|
|
||||||
/// <returns>Null if the method cannot be found.</returns>
|
|
||||||
public TestMember GetTestMember(string fullyQualifiedName) |
|
||||||
{ |
|
||||||
string className = TestMember.GetQualifiedClassName(fullyQualifiedName); |
|
||||||
if (className != null) { |
|
||||||
if (Contains(className)) { |
|
||||||
TestClass testClass = this[className]; |
|
||||||
string memberName = TestMember.GetMemberName(fullyQualifiedName); |
|
||||||
if (memberName != null) { |
|
||||||
return testClass.GetTestMember(memberName); |
|
||||||
} |
|
||||||
} else { |
|
||||||
LoggingService.Debug("TestClass not found: " + className); |
|
||||||
} |
|
||||||
} else { |
|
||||||
LoggingService.Debug("Invalid test member name: " + fullyQualifiedName); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
protected override string GetKeyForItem(TestClass item) |
|
||||||
{ |
|
||||||
return item.QualifiedName; |
|
||||||
} |
|
||||||
|
|
||||||
protected override void InsertItem(int index, TestClass item) |
|
||||||
{ |
|
||||||
item.ResultChanged += TestClassResultChanged; |
|
||||||
base.InsertItem(index, item); |
|
||||||
TestClassResultChanged(item, new EventArgs()); |
|
||||||
OnTestClassAdded(item); |
|
||||||
} |
|
||||||
|
|
||||||
protected override void RemoveItem(int index) |
|
||||||
{ |
|
||||||
TestClass c = this[index]; |
|
||||||
c.ResultChanged -= TestClassResultChanged; |
|
||||||
base.RemoveItem(index); |
|
||||||
OnTestResultNone(c.Name); |
|
||||||
OnTestClassRemoved(c); |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnTestClassAdded(TestClass testClass) |
|
||||||
{ |
|
||||||
if (TestClassAdded != null) { |
|
||||||
TestClassAdded(this, new TestClassEventArgs(testClass)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnTestClassRemoved(TestClass testClass) |
|
||||||
{ |
|
||||||
if (TestClassRemoved != null) { |
|
||||||
TestClassRemoved(this, new TestClassEventArgs(testClass)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void TestClassResultChanged(object source, EventArgs e) |
|
||||||
{ |
|
||||||
TestClass c = (TestClass)source; |
|
||||||
switch (c.Result) { |
|
||||||
case TestResultType.None: |
|
||||||
OnTestResultNone(c.QualifiedName); |
|
||||||
break; |
|
||||||
case TestResultType.Failure: |
|
||||||
SetTestResult(TestResultType.Failure); |
|
||||||
failedTestClasses.Add(c.QualifiedName, c); |
|
||||||
break; |
|
||||||
case TestResultType.Success: |
|
||||||
passedTestClasses.Add(c.QualifiedName, c); |
|
||||||
if (passedTestClasses.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Success); |
|
||||||
} else if (passedTestClasses.Count + ignoredTestClasses.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Ignored); |
|
||||||
} |
|
||||||
break; |
|
||||||
case TestResultType.Ignored: |
|
||||||
ignoredTestClasses.Add(c.QualifiedName, c); |
|
||||||
if (ignoredTestClasses.Count == Count || |
|
||||||
ignoredTestClasses.Count + passedTestClasses.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Ignored); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void SetTestResult(TestResultType value) |
|
||||||
{ |
|
||||||
TestResultType previousTestResult = testResult; |
|
||||||
testResult = value; |
|
||||||
if (testResult != previousTestResult) { |
|
||||||
OnResultChanged(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void OnResultChanged() |
|
||||||
{ |
|
||||||
if (ResultChanged != null) { |
|
||||||
ResultChanged(this, new EventArgs()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Removes the specified test class from the list of
|
|
||||||
/// failed, passed and ignored tests and updates the
|
|
||||||
/// test result state of the test class collection.
|
|
||||||
/// </summary>
|
|
||||||
void OnTestResultNone(string qualifiedName) |
|
||||||
{ |
|
||||||
passedTestClasses.Remove(qualifiedName); |
|
||||||
failedTestClasses.Remove(qualifiedName); |
|
||||||
ignoredTestClasses.Remove(qualifiedName); |
|
||||||
if (ignoredTestClasses.Count + failedTestClasses.Count == 0) { |
|
||||||
SetTestResult(TestResultType.None); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the test class from the specified test result.
|
|
||||||
/// </summary>
|
|
||||||
TestClass GetTestClassFromTestMemberName(string memberName) |
|
||||||
{ |
|
||||||
if (memberName != null) { |
|
||||||
string className = TestMember.GetQualifiedClassName(memberName); |
|
||||||
if (className != null) { |
|
||||||
if (Contains(className)) { |
|
||||||
return this[className]; |
|
||||||
} else { |
|
||||||
LoggingService.Debug("TestClass not found: " + className); |
|
||||||
return GetTestClassFromTestMemberName(className); |
|
||||||
} |
|
||||||
} else { |
|
||||||
LoggingService.Debug("Invalid TestMember.Name: " + memberName); |
|
||||||
} |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,30 +0,0 @@ |
|||||||
// 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; |
|
||||||
|
|
||||||
namespace ICSharpCode.UnitTesting |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the class that will handle the TestCollection's
|
|
||||||
/// TestClassAdded or TestClassRemoved events.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void TestClassEventHandler(object source, TestClassEventArgs e); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Provides data for the TestCollection's TestClassAdded and TestClassRemoved events.
|
|
||||||
/// </summary>
|
|
||||||
public class TestClassEventArgs |
|
||||||
{ |
|
||||||
TestClass testClass; |
|
||||||
|
|
||||||
public TestClassEventArgs(TestClass testClass) |
|
||||||
{ |
|
||||||
this.testClass = testClass; |
|
||||||
} |
|
||||||
|
|
||||||
public TestClass TestClass { |
|
||||||
get { return testClass; } |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,153 +0,0 @@ |
|||||||
// 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 System.Collections.Generic; |
|
||||||
using System.Collections.ObjectModel; |
|
||||||
|
|
||||||
namespace ICSharpCode.UnitTesting |
|
||||||
{ |
|
||||||
public class TestMemberCollection : KeyedCollection<string, TestMember> |
|
||||||
{ |
|
||||||
TestResultType testResult = TestResultType.None; |
|
||||||
Dictionary<string, TestMember> passedTestMembers = new Dictionary<string, TestMember>(); |
|
||||||
Dictionary<string, TestMember> failedTestMembers = new Dictionary<string, TestMember>(); |
|
||||||
Dictionary<string, TestMember> ignoredTestMembers = new Dictionary<string, TestMember>(); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when the test result for this collection of
|
|
||||||
/// members has changed.
|
|
||||||
/// </summary>
|
|
||||||
public event EventHandler ResultChanged; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when a member is added to this collection.
|
|
||||||
/// </summary>
|
|
||||||
public event TestMemberEventHandler TestMemberAdded; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Raised when a member is removed from this collection.
|
|
||||||
/// </summary>
|
|
||||||
public event TestMemberEventHandler TestMemberRemoved; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the overall test results for the collection of
|
|
||||||
/// test members.
|
|
||||||
/// </summary>
|
|
||||||
public TestResultType Result { |
|
||||||
get { return testResult; } |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets all the test members test results back to none.
|
|
||||||
/// </summary>
|
|
||||||
public void ResetTestResults() |
|
||||||
{ |
|
||||||
passedTestMembers.Clear(); |
|
||||||
failedTestMembers.Clear(); |
|
||||||
ignoredTestMembers.Clear(); |
|
||||||
|
|
||||||
foreach (TestMember member in this) { |
|
||||||
member.Result = TestResultType.None; |
|
||||||
} |
|
||||||
|
|
||||||
SetTestResult(TestResultType.None); |
|
||||||
} |
|
||||||
|
|
||||||
protected override void InsertItem(int index, TestMember item) |
|
||||||
{ |
|
||||||
item.ResultChanged += TestMemberResultChanged; |
|
||||||
base.InsertItem(index, item); |
|
||||||
TestMemberResultChanged(item, new EventArgs()); |
|
||||||
OnTestMemberAdded(item); |
|
||||||
} |
|
||||||
|
|
||||||
protected override string GetKeyForItem(TestMember item) |
|
||||||
{ |
|
||||||
return item.Name; |
|
||||||
} |
|
||||||
|
|
||||||
protected override void RemoveItem(int index) |
|
||||||
{ |
|
||||||
TestMember member = this[index]; |
|
||||||
member.ResultChanged -= TestMemberResultChanged; |
|
||||||
base.RemoveItem(index); |
|
||||||
OnTestResultNone(member.Name); |
|
||||||
OnTestMemberRemoved(member); |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnTestMemberAdded(TestMember testMember) |
|
||||||
{ |
|
||||||
if (TestMemberAdded != null) { |
|
||||||
TestMemberAdded(this, new TestMemberEventArgs(testMember)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void OnTestMemberRemoved(TestMember testMember) |
|
||||||
{ |
|
||||||
if (TestMemberRemoved != null) { |
|
||||||
TestMemberRemoved(this, new TestMemberEventArgs(testMember)); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void TestMemberResultChanged(object source, EventArgs e) |
|
||||||
{ |
|
||||||
TestMember member = (TestMember)source; |
|
||||||
switch (member.Result) { |
|
||||||
case TestResultType.None: |
|
||||||
OnTestResultNone(member.Name); |
|
||||||
break; |
|
||||||
case TestResultType.Failure: |
|
||||||
SetTestResult(TestResultType.Failure); |
|
||||||
failedTestMembers.Add(member.Name, member); |
|
||||||
break; |
|
||||||
case TestResultType.Success: |
|
||||||
passedTestMembers.Add(member.Name, member); |
|
||||||
if (passedTestMembers.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Success); |
|
||||||
} else if (passedTestMembers.Count + ignoredTestMembers.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Ignored); |
|
||||||
} |
|
||||||
break; |
|
||||||
case TestResultType.Ignored: |
|
||||||
ignoredTestMembers.Add(member.Name, member); |
|
||||||
if (ignoredTestMembers.Count == Count || |
|
||||||
ignoredTestMembers.Count + passedTestMembers.Count == Count) { |
|
||||||
SetTestResult(TestResultType.Ignored); |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void SetTestResult(TestResultType value) |
|
||||||
{ |
|
||||||
TestResultType previousTestResult = testResult; |
|
||||||
testResult = value; |
|
||||||
if (testResult != previousTestResult) { |
|
||||||
OnResultChanged(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void OnResultChanged() |
|
||||||
{ |
|
||||||
if (ResultChanged != null) { |
|
||||||
ResultChanged(this, new EventArgs()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Removes the specified test member from the list of
|
|
||||||
/// failed, passed and ignored tests and updates the
|
|
||||||
/// test result state of the test members collection.
|
|
||||||
/// </summary>
|
|
||||||
void OnTestResultNone(string name) |
|
||||||
{ |
|
||||||
passedTestMembers.Remove(name); |
|
||||||
failedTestMembers.Remove(name); |
|
||||||
ignoredTestMembers.Remove(name); |
|
||||||
if (ignoredTestMembers.Count + failedTestMembers.Count == 0) { |
|
||||||
SetTestResult(TestResultType.None); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,30 +0,0 @@ |
|||||||
// 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; |
|
||||||
|
|
||||||
namespace ICSharpCode.UnitTesting |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents the member that will handle the TestCollection's
|
|
||||||
/// TestMemberAdded or TestMemberRemoved events.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void TestMemberEventHandler(object source, TestMemberEventArgs e); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Provides data for the TestCollection's TestMemberAdded and TestMemberRemoved events.
|
|
||||||
/// </summary>
|
|
||||||
public class TestMemberEventArgs |
|
||||||
{ |
|
||||||
TestMember testMember; |
|
||||||
|
|
||||||
public TestMemberEventArgs(TestMember testMember) |
|
||||||
{ |
|
||||||
this.testMember = testMember; |
|
||||||
} |
|
||||||
|
|
||||||
public TestMember TestMember { |
|
||||||
get { return testMember; } |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue