private int RunUnitTests(List<string>/*!*/ largs) {
_tests = new Tests(this);
if (_displayList) {
for (int i = 0; i < _tests.TestMethods.Length; i++) {
Console.WriteLine(_tests.TestMethods[i].Method.Name);
}
return -1;
}
// check whether there is a preselected case:
IList<TestCase> selectedCases = new List<TestCase>();
foreach (var m in _tests.TestMethods) {
if (m.Method.IsDefined(typeof(RunAttribute), false)) {
AddTestCases(selectedCases, m);
}
}
if (selectedCases.Count == 0 && largs.Count > 0) {
foreach (var m in _tests.TestMethods) {
bool caseIsSpecified = largs.Contains(m.Method.Name);
if ((caseIsSpecified && !_excludeSelectedCases) || (!caseIsSpecified && _excludeSelectedCases)) {
AddTestCases(selectedCases, m);
}
}
} else if (selectedCases.Count > 0 && largs.Count > 0) {
Console.WriteLine("Arguments overrided by Run attribute.");
} else if (selectedCases.Count == 0 && largs.Count == 0) {
foreach (var m in _tests.TestMethods) {
AddTestCases(selectedCases, m);
}
}
foreach (TestCase testCase in selectedCases) {
RunTestCase(testCase);
}
var failedCases = new List<string>();
if (_failedAssertions.Count > 0) {
for (int i = 0; i < _failedAssertions.Count; i++) {
string test = _failedAssertions[i].Item000;
StackFrame frame = _failedAssertions[i].Item001;
string message = _failedAssertions[i].Item002;
failedCases.Add(test);
Console.Error.WriteLine();
if (_partialTrust) {
ColorWrite(ConsoleColor.Red, "{0}) {1}", failedCases.Count, test);
} else {
ColorWrite(ConsoleColor.Red, "{0}) {1} {2} : {3}", failedCases.Count, test, frame.GetFileName(), frame.GetFileLineNumber());
}
Console.Error.WriteLine(message);
}
}
if (_unexpectedExceptions.Count > 0) {
for (int i = 0; i < _unexpectedExceptions.Count; i++) {
string test = _unexpectedExceptions[i].Item000;
Exception exception = _unexpectedExceptions[i].Item001;
Console.Error.WriteLine();
ColorWrite(ConsoleColor.Red, "{0}) {1} (unexpected exception)", failedCases.Count, test);
Console.Error.WriteLine(exception);
failedCases.Add(test);
}
}
if (failedCases.Count == 0) {
ColorWrite(ConsoleColor.Green, "PASSED");
} else {
Console.WriteLine();
// TODO:
if (!_partialTrust) {
Console.Write("Repro: {0}", Environment.CommandLine);
} else {
Console.Write("Repro: IronRuby.Tests.exe /partial{0}{1}",
_noAdaptiveCompilation ? " /noadaptive" : "",
_isDebug ? " /debug" : "");
}
if (largs.Count == 0) {
Console.Write(" {0}", String.Join(" ", failedCases.ToArray()));
}
Console.WriteLine();
}
return failedCases.Count;
}