You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
7.5 KiB
237 lines
7.5 KiB
// 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.Diagnostics; |
|
using System.IO; |
|
using System.Text; |
|
using ICSharpCode.Core; |
|
using ICSharpCode.CodeCoverage; |
|
using ICSharpCode.CodeCoverage.Tests.Utils; |
|
using ICSharpCode.SharpDevelop; |
|
using ICSharpCode.UnitTesting; |
|
using NUnit.Framework; |
|
using UnitTesting.Tests.Utils; |
|
|
|
namespace ICSharpCode.CodeCoverage.Tests.Testing |
|
{ |
|
[TestFixture] |
|
public class CodeCoverageTestRunnerTests |
|
{ |
|
MockProcessRunner processRunner; |
|
MockTestResultsMonitor testResultsMonitor; |
|
UnitTestingOptions options; |
|
DerivedCodeCoverageTestRunner testRunner; |
|
MockFileSystem fileSystem; |
|
MockMessageService messageService; |
|
|
|
[SetUp] |
|
public void Init() |
|
{ |
|
processRunner = new MockProcessRunner(); |
|
testResultsMonitor = new MockTestResultsMonitor(); |
|
options = new UnitTestingOptions(new Properties()); |
|
fileSystem = new MockFileSystem(); |
|
messageService = new MockMessageService(); |
|
testRunner = new DerivedCodeCoverageTestRunner(processRunner, testResultsMonitor, options, fileSystem, messageService); |
|
} |
|
|
|
[Test] |
|
public void CreateTestResultForTestFrameworkReturnsNUnitTestResult() |
|
{ |
|
TestResult testResult = new TestResult("abc"); |
|
Assert.IsInstanceOf(typeof(NUnitTestResult), testRunner.CallCreateTestResultForTestFramework(testResult)); |
|
} |
|
|
|
[Test] |
|
public void HasCodeCoverageResultsWhenCoverageFileExistsReturnsTrue() |
|
{ |
|
StartTestRunner(); |
|
|
|
fileSystem.FileExistsReturnValue = true; |
|
|
|
Assert.IsTrue(testRunner.HasCodeCoverageResults()); |
|
} |
|
|
|
void StartTestRunner() |
|
{ |
|
FileUtility.ApplicationRootPath = @"d:\sharpdevelop"; |
|
MockCSharpProject project = new MockCSharpProject(); |
|
SelectedTests tests = new SelectedTests(project); |
|
testRunner.Start(tests); |
|
} |
|
|
|
[Test] |
|
public void HasCodeCoverageResultsWhenCoverageFileDoesNotExistsReturnsFalse() |
|
{ |
|
fileSystem.FileExistsReturnValue = false; |
|
StartTestRunner(); |
|
Assert.IsFalse(testRunner.HasCodeCoverageResults()); |
|
} |
|
|
|
[Test] |
|
public void HasCodeCoverageResultsAfterTestRunChecksPassesCodeCoverageFileToFileExistsMethod() |
|
{ |
|
fileSystem.FileExistsReturnValue = false; |
|
fileSystem.FileExistsPathParameter = null; |
|
StartTestRunner(); |
|
testRunner.HasCodeCoverageResults(); |
|
|
|
string expectedFileName = |
|
@"c:\projects\MyTests\PartCover\coverage.xml"; |
|
|
|
Assert.AreEqual(expectedFileName, fileSystem.FileExistsPathParameter); |
|
} |
|
|
|
[Test] |
|
public void ReadCodeCoverageResultsAfterTestRunChecksPassesCodeCoverageFileToCreateTextReaderMethod() |
|
{ |
|
StartTestRunner(); |
|
|
|
fileSystem.FileExistsReturnValue = true; |
|
fileSystem.CreateTextReaderPathParameter = null; |
|
fileSystem.CreateTextReaderReturnValue = new StringReader("<abc/>"); |
|
|
|
testRunner.ReadCodeCoverageResults(); |
|
|
|
string expectedFileName = |
|
@"c:\projects\MyTests\PartCover\coverage.xml"; |
|
|
|
Assert.AreEqual(expectedFileName, fileSystem.CreateTextReaderPathParameter); |
|
} |
|
|
|
[Test] |
|
public void GetProcessStartInfoWhenTestResultsFileNameSetReturnsCommandLineWithTestResultsFileName() |
|
{ |
|
FileUtility.ApplicationRootPath = @"d:\sharpdevelop"; |
|
testResultsMonitor.FileName = @"d:\temp\results.txt"; |
|
|
|
fileSystem.CreateTextReaderReturnValue = CreatePartCoverSettingsTextReader(); |
|
fileSystem.FileExistsReturnValue = true; |
|
|
|
MockCSharpProject project = new MockCSharpProject(); |
|
SelectedTests tests = new SelectedTests(project); |
|
testRunner.Start(tests); |
|
ProcessStartInfo processStartInfo = testRunner.CallGetProcessStartInfo(tests); |
|
|
|
string expectedCommandLine = |
|
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " + |
|
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " + |
|
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml /results=\\\"d:\\temp\\results.txt\\\"\" " + |
|
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " + |
|
"--include [MyTests]*"; |
|
|
|
Assert.AreEqual(expectedCommandLine, processStartInfo.Arguments); |
|
} |
|
|
|
TextReader CreatePartCoverSettingsTextReader() |
|
{ |
|
PartCoverSettings settings = new PartCoverSettings(); |
|
settings.Include.Add("[MyTests]*"); |
|
StringBuilder text = new StringBuilder(); |
|
StringWriter writer = new StringWriter(text); |
|
settings.Save(writer); |
|
|
|
return new StringReader(text.ToString()); |
|
} |
|
|
|
[Test] |
|
public void StartSetsProfilerEnvironmentVariableInProcessRunner() |
|
{ |
|
StartTestRunner(); |
|
string environmentVariableValue = processRunner.EnvironmentVariables["COMPLUS_ProfAPI_ProfilerCompatibilitySetting"]; |
|
Assert.AreEqual("EnableV2Profiler", environmentVariableValue); |
|
} |
|
|
|
[Test] |
|
public void StartWhenCodeCoverageResultsFileExistsDeletesExistingCodeCoverageResultsFile() |
|
{ |
|
fileSystem.FileExistsReturnValue = true; |
|
fileSystem.CreateTextReaderReturnValue = new StringReader("<abc/>"); |
|
StartTestRunner(); |
|
|
|
string expectedFileName = @"c:\projects\MyTests\PartCover\coverage.xml"; |
|
Assert.AreEqual(expectedFileName, fileSystem.DeleteFilePathParameter); |
|
} |
|
|
|
[Test] |
|
public void StartWhenCodeCoverageResultsFileDoesNotExistsCodeCoverageResultsFileIsNotDeleted() |
|
{ |
|
fileSystem.FileExistsReturnValue = false; |
|
StartTestRunner(); |
|
|
|
Assert.IsNull(fileSystem.DeleteFilePathParameter); |
|
} |
|
|
|
[Test] |
|
public void StartCreatesDirectoryCodeCoverageResultsFileIfDoesNotExist() |
|
{ |
|
fileSystem.DirectoryExistsReturnValue = false; |
|
StartTestRunner(); |
|
|
|
string expectedDirectory = @"c:\projects\MyTests\PartCover"; |
|
Assert.AreEqual(expectedDirectory, fileSystem.CreateDirectoryPathParameter); |
|
} |
|
|
|
[Test] |
|
public void StartChecksDirectoryForCodeCoverageResultsExists() |
|
{ |
|
fileSystem.DirectoryExistsReturnValue = true; |
|
StartTestRunner(); |
|
|
|
string expectedDirectory = @"c:\projects\MyTests\PartCover"; |
|
Assert.AreEqual(expectedDirectory, fileSystem.DirectoryExistsPathParameter); |
|
} |
|
|
|
[Test] |
|
public void StartDoesNotCreateDirectoryForCodeCoverageResultsFileIfItExists() |
|
{ |
|
fileSystem.DirectoryExistsReturnValue = true; |
|
StartTestRunner(); |
|
|
|
Assert.IsNull(fileSystem.CreateDirectoryPathParameter); |
|
} |
|
|
|
[Test] |
|
public void StartFiresMessagesReceivedEventTwice() |
|
{ |
|
List<string> messages = new List<string>(); |
|
testRunner.MessageReceived += delegate(object o, MessageReceivedEventArgs e) { |
|
messages.Add(e.Message); |
|
}; |
|
|
|
testRunner.ParseStringReturnValue = "Running code coverage"; |
|
StartTestRunner(); |
|
|
|
string[] expectedMessages = new string[] { |
|
"Running code coverage", |
|
GetCodeCoverageCommandLine() |
|
}; |
|
|
|
Assert.AreEqual(expectedMessages, messages.ToArray()); |
|
} |
|
|
|
string GetCodeCoverageCommandLine() |
|
{ |
|
return |
|
"\"d:\\sharpdevelop\\bin\\Tools\\PartCover\\PartCover.exe\" " + |
|
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " + |
|
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " + |
|
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml\" " + |
|
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " + |
|
"--include [*]*"; |
|
} |
|
|
|
[Test] |
|
public void StartParsesTextForRunningCodeCoverageMessages() |
|
{ |
|
testRunner.ParseStringReturnValue = "Running code coverage"; |
|
StartTestRunner(); |
|
|
|
string expectedStringResource = "${res:ICSharpCode.CodeCoverage.RunningCodeCoverage}"; |
|
|
|
Assert.AreEqual(expectedStringResource, testRunner.ParseStringParameter); |
|
} |
|
} |
|
}
|
|
|