Browse Source

Add MSpec addin.

pull/32/merge
Matt Ward 13 years ago
parent
commit
29e267f154
  1. 22
      SharpDevelop.Tests.sln
  2. 15
      SharpDevelop.sln
  3. 20
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/MachineSpecifications.Tests.csproj
  4. 140
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/ClassFilterBuilder.cs
  5. 386
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/MSpecTestFrameworkTests.cs
  6. 4
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/MSpecUnitTestMonitorTests.cs
  7. 42
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.sln
  8. 16
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/MachineSpecifications.csproj
  9. 19
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/BehaviorImportedTestMember.cs
  10. 32
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/ClassFilterBuilder.cs
  11. 46
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecApplication.cs
  12. 94
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestClass.cs
  13. 22
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestDebugger.cs
  14. 98
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestFramework.cs
  15. 41
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs
  16. 22
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProcessRunnerContext.cs
  17. 139
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs
  18. 16
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecUnitTestMonitor.cs
  19. 41
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MspecTestRunner.cs

22
SharpDevelop.Tests.sln

@ -213,6 +213,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\A @@ -213,6 +213,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\A
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Analysis\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications.Tests", "src\AddIns\Analysis\MachineSpecifications\MachineSpecifications.Tests\MachineSpecifications.Tests.csproj", "{172AE35D-2051-4977-AC13-0BF1B76374D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications", "src\AddIns\Analysis\MachineSpecifications\MachineSpecifications\MachineSpecifications.csproj", "{D1DA3B8F-7313-4BDA-8880-461C5F007751}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortSD4AddInToSD5", "samples\PortSD4AddInToSD5\PortSD4AddInToSD5.csproj", "{E2FD63DA-8478-4066-934C-DA82A852C83A}"
EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "src\Tools\Tools.build", "{3DF4060F-5EE0-41CF-8096-F27355FD5511}"
@ -857,6 +861,22 @@ Global @@ -857,6 +861,22 @@ Global
{85226AFB-CE71-4851-9A75-7EEC663A8E8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{85226AFB-CE71-4851-9A75-7EEC663A8E8A}.Release|x86.Build.0 = Release|Any CPU
{85226AFB-CE71-4851-9A75-7EEC663A8E8A}.Release|x86.ActiveCfg = Release|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Debug|x86.Build.0 = Debug|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Release|Any CPU.Build.0 = Release|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Release|x86.Build.0 = Release|Any CPU
{172AE35D-2051-4977-AC13-0BF1B76374D5}.Release|x86.ActiveCfg = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|x86.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|x86.ActiveCfg = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|x86.Build.0 = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -951,5 +971,7 @@ Global @@ -951,5 +971,7 @@ Global
DC88D67C-E6B5-4994-9FA9-D4AB0E162FB3 = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{172AE35D-2051-4977-AC13-0BF1B76374D5} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{D1DA3B8F-7313-4BDA-8880-461C5F007751} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
EndGlobalSection
EndGlobal

15
SharpDevelop.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 5.0
# SharpDevelop 4.3
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -117,7 +117,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "src\Ad @@ -117,7 +117,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "src\Ad
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.PowerShell", "src\AddIns\Misc\PackageManagement\PowerShell\Project\PackageManagement.PowerShell.csproj", "{A406803B-C584-43A3-BCEE-A0BB3132CB5F}"
EndProject
Project("") = "SharpDevelop.EnvDTE", "src\AddIns\Misc\PackageManagement\SharpDevelop.EnvDTE\SharpDevelop.EnvDTE.vbproj", "752BD058-5517-48A1-BB27-5ED186FA052B"
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharpDevelop.EnvDTE", "src\AddIns\Misc\PackageManagement\SharpDevelop.EnvDTE\SharpDevelop.EnvDTE.vbproj", "752BD058-5517-48A1-BB27-5ED186FA052B"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
ProjectSection(SolutionItems) = postProject
@ -175,6 +175,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIn @@ -175,6 +175,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIn
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Analysis\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications", "src\AddIns\Analysis\MachineSpecifications\MachineSpecifications\MachineSpecifications.csproj", "{D1DA3B8F-7313-4BDA-8880-461C5F007751}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -697,6 +699,14 @@ Global @@ -697,6 +699,14 @@ Global
752BD058-5517-48A1-BB27-5ED186FA052B.Release|Any CPU.ActiveCfg = Release|Any CPU
752BD058-5517-48A1-BB27-5ED186FA052B.Release|x86.Build.0 = Release|Any CPU
752BD058-5517-48A1-BB27-5ED186FA052B.Release|x86.ActiveCfg = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|x86.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|x86.ActiveCfg = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|x86.Build.0 = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -773,6 +783,7 @@ Global @@ -773,6 +783,7 @@ Global
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
44FA68C9-DAD1-4C3C-90BB-3435F0D1D128 = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{D1DA3B8F-7313-4BDA-8880-461C5F007751} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}
EndGlobalSection

20
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/MachineSpecifications.Tests.csproj

@ -7,12 +7,18 @@ @@ -7,12 +7,18 @@
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.MachineSpecifications.Tests</RootNamespace>
<AssemblyName>MachineSpecifications.Tests</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<AppDesignerFolder>Properties</AppDesignerFolder>
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>..\..\..\..\..\bin\UnitTests\</OutputPath>
<NoWin32Manifest>False</NoWin32Manifest>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>True</DebugSymbols>
@ -20,6 +26,7 @@ @@ -20,6 +26,7 @@
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>False</DebugSymbols>
@ -28,6 +35,13 @@ @@ -28,6 +35,13 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<BaseAddress>4194304</BaseAddress>
<Prefer32Bit>False</Prefer32Bit>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<ItemGroup>
<Reference Include="developwithpassion.specifications">
<HintPath>..\Libraries\developwithpassion.specifications.rhinomocks.0.4.13.0\developwithpassion.specifications.dll</HintPath>
@ -79,10 +93,6 @@ @@ -79,10 +93,6 @@
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
</ProjectReference>
<ProjectReference Include="..\..\UnitTesting\UnitTesting.csproj">
<Project>{1F261725-6318-4434-A1B1-6C70CE4CD324}</Project>
<Name>UnitTesting</Name>

140
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/ClassFilterBuilder.cs

@ -1,70 +1,70 @@ @@ -1,70 +1,70 @@
/*
* Created by SharpDevelop.
* User: trecio
* Date: 2011-09-23
* Time: 19:53
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using developwithpassion.specifications.extensions;
using developwithpassion.specifications.rhinomocks;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.UnitTesting;
using Machine.Specifications;
using Machine.Fakes.Adapters.Rhinomocks;
namespace ICSharpCode.MachineSpecifications.Tests
{
[Subject(typeof(ClassFilterBuilder))]
public class When_building_class_filter_from_test_selection : Observes<ClassFilterBuilder>
{
const string NAMESPACE_FILTER = "Namespace";
static DefaultClass classAddedExplicitly, classInNamespace, classOutsideNamespace, classNestedInAddedExplicitly, classNestedInClassInNamespace;
static SelectedTests selectedTests;
static IProjectContent projectContent;
static IList<string> result;
Establish ctx = () => {
projectContent = fake.an<IProjectContent>();
projectContent.setup(x => x.SystemTypes).Return(new SystemTypes(projectContent));
var compilationUnit = new DefaultCompilationUnit(projectContent);
classAddedExplicitly = new DefaultClass(compilationUnit, "ClassAddedExplicitly");
classNestedInAddedExplicitly = new DefaultClass(compilationUnit, classAddedExplicitly);
classNestedInAddedExplicitly.FullyQualifiedName = "ClassAddedExplicitly.InnerClass";
classAddedExplicitly.InnerClasses.Add(classNestedInAddedExplicitly);
classInNamespace = new DefaultClass(compilationUnit, "Namespace.OtherNamespace.ClassInNamespace");
classNestedInClassInNamespace = new DefaultClass(compilationUnit, classInNamespace);
classNestedInClassInNamespace.FullyQualifiedName = "Namespace.OtherNamespace.ClassInNamespace.InnerClass";
classInNamespace.InnerClasses.Add(classNestedInClassInNamespace);
classOutsideNamespace = new DefaultClass(compilationUnit, "Namespace2.ClassOutsideNamespac");
var project = fake.an<IProject>();
projectContent.setup(x => x.Classes).Return(new[]{classInNamespace, classOutsideNamespace});
selectedTests = new SelectedTests(project, NAMESPACE_FILTER, classAddedExplicitly, null);
};
Because of = () =>
result = sut.BuildFilterFor(selectedTests, projectContent);
It should_add_dotnet_name_of_selected_test_class = () =>
result.ShouldContain(classAddedExplicitly.DotNetName);
It should_add_class_included_in_selected_namespace = () =>
result.ShouldContain(classInNamespace.DotNetName);
It should_not_include_class_not_included_in_namespace = () =>
result.ShouldNotContain(classOutsideNamespace.DotNetName);
It should_not_include_class_nested_in_selected_test_class = () =>
result.ShouldNotContain(classNestedInAddedExplicitly.DotNetName);
It should_include_class_nested_in_class_from_selected_namespace = () =>
result.ShouldContain(classNestedInClassInNamespace.DotNetName);
}
}
///*
// * Created by SharpDevelop.
// * User: trecio
// * Date: 2011-09-23
// * Time: 19:53
// *
// * To change this template use Tools | Options | Coding | Edit Standard Headers.
// */
//using System;
//using System.Collections.Generic;
//using developwithpassion.specifications.extensions;
//using developwithpassion.specifications.rhinomocks;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Project;
//using ICSharpCode.UnitTesting;
//using Machine.Specifications;
//using Machine.Fakes.Adapters.Rhinomocks;
//
//namespace ICSharpCode.MachineSpecifications.Tests
//{
// [Subject(typeof(ClassFilterBuilder))]
// public class When_building_class_filter_from_test_selection : Observes<ClassFilterBuilder>
// {
// const string NAMESPACE_FILTER = "Namespace";
// static DefaultClass classAddedExplicitly, classInNamespace, classOutsideNamespace, classNestedInAddedExplicitly, classNestedInClassInNamespace;
// static SelectedTests selectedTests;
// static IProjectContent projectContent;
// static IList<string> result;
//
// Establish ctx = () => {
// projectContent = fake.an<IProjectContent>();
// projectContent.setup(x => x.SystemTypes).Return(new SystemTypes(projectContent));
// var compilationUnit = new DefaultCompilationUnit(projectContent);
//
// classAddedExplicitly = new DefaultClass(compilationUnit, "ClassAddedExplicitly");
// classNestedInAddedExplicitly = new DefaultClass(compilationUnit, classAddedExplicitly);
// classNestedInAddedExplicitly.FullyQualifiedName = "ClassAddedExplicitly.InnerClass";
// classAddedExplicitly.InnerClasses.Add(classNestedInAddedExplicitly);
//
// classInNamespace = new DefaultClass(compilationUnit, "Namespace.OtherNamespace.ClassInNamespace");
// classNestedInClassInNamespace = new DefaultClass(compilationUnit, classInNamespace);
// classNestedInClassInNamespace.FullyQualifiedName = "Namespace.OtherNamespace.ClassInNamespace.InnerClass";
// classInNamespace.InnerClasses.Add(classNestedInClassInNamespace);
// classOutsideNamespace = new DefaultClass(compilationUnit, "Namespace2.ClassOutsideNamespac");
//
// var project = fake.an<IProject>();
// projectContent.setup(x => x.Classes).Return(new[]{classInNamespace, classOutsideNamespace});
//
// selectedTests = new SelectedTests(project, NAMESPACE_FILTER, classAddedExplicitly, null);
// };
//
// Because of = () =>
// result = sut.BuildFilterFor(selectedTests, projectContent);
//
// It should_add_dotnet_name_of_selected_test_class = () =>
// result.ShouldContain(classAddedExplicitly.DotNetName);
//
// It should_add_class_included_in_selected_namespace = () =>
// result.ShouldContain(classInNamespace.DotNetName);
//
// It should_not_include_class_not_included_in_namespace = () =>
// result.ShouldNotContain(classOutsideNamespace.DotNetName);
//
// It should_not_include_class_nested_in_selected_test_class = () =>
// result.ShouldNotContain(classNestedInAddedExplicitly.DotNetName);
//
// It should_include_class_nested_in_class_from_selected_namespace = () =>
// result.ShouldContain(classNestedInClassInNamespace.DotNetName);
// }
//}

386
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/MSpecTestFrameworkTests.cs

@ -1,193 +1,193 @@ @@ -1,193 +1,193 @@
/*
* Created by SharpDevelop.
* User: trecio
* Date: 2011-06-18
* Time: 15:12
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using developwithpassion.specifications.extensions;
using developwithpassion.specifications.dsl;
using developwithpassion.specifications.rhinomocks;
using ICSharpCode.SharpDevelop.Project;
using Machine.Specifications;
using ICSharpCode.UnitTesting;
using ICSharpCode.SharpDevelop.Dom;
using Rhino.Mocks;
namespace ICSharpCode.MachineSpecifications.Tests
{
[Subject(typeof(MSpecTestFramework))]
public class When_checking_if_is_a_test_project : Observes<MSpecTestFramework>
{
static IProject testProject;
static IProject nonTestProject;
static bool resultForTestProject;
static bool resultForNonTestProject;
const string MSpecAssemblyName = "Machine.Specifications";
Establish ctx = () =>
{
testProject = fake.an<IProject>();
var mspecReference = MockRepository.GenerateStub<ReferenceProjectItem>(testProject);
mspecReference.setup(x => x.ShortName).Return(MSpecAssemblyName);
testProject.setup(x => x.Items).Return(new ReadOnlyCollection<ProjectItem>(new[] { mspecReference }));
nonTestProject = fake.an<IProject>();
var otherReference = MockRepository.GenerateStub<ReferenceProjectItem>(nonTestProject);
mspecReference.setup(x => x.ShortName).Return("System.Configuration");
nonTestProject.setup(x => x.Items).Return(new ReadOnlyCollection<ProjectItem>(new[] { otherReference }));
};
Because of = () =>
{
resultForTestProject = sut.IsTestProject(testProject);
resultForNonTestProject = sut.IsTestProject(nonTestProject);
};
It should_return_true_for_project_which_has_reference_to_test_framework = () =>
resultForTestProject.ShouldBeTrue();
It should_return_false_for_project_which_has_no_reference_to_test_framework = () =>
resultForNonTestProject.ShouldBeFalse();
}
public abstract class MSpecTestFrameworkFieldsConcern : Observes<MSpecTestFramework>
{
protected static ICompilationUnit CompilationUnit;
Establish ctx = () =>
{
var ProjectContent = fake.an<IProjectContent>();
ProjectContent.setup(x => x.SystemTypes).Return(new SystemTypes(ProjectContent));
CompilationUnit = new DefaultCompilationUnit(ProjectContent);
};
protected const string MSpecItTypeName = "Machine.Specifications.It";
protected const string MSpecBehavesTypeName = "Machine.Specifications.Behaves_like";
protected const string MSpecBehaviorTypeName = "Machine.Specifications.BehaviorsAttribute";
protected static IClass SetupClass(bool isAbstract, IList<IField> fields, IList<IAttribute> attributes)
{
var c = fake.an<IClass>();
c.setup(x => x.IsAbstract).Return(isAbstract);
c.setup(x => x.Fields).Return(fields);
c.setup(x => x.Attributes).Return(attributes);
return c;
}
protected static IField SetupField(string returnTypeName)
{
var field = fake.an<IField>();
field.ReturnType = SetupReturnType(returnTypeName);
return field;
}
protected static IAttribute SetupBehaviorAttribute()
{
var attribute = fake.an<IAttribute>();
attribute.setup(x => x.AttributeType).Return(SetupReturnType(MSpecBehaviorTypeName));
return attribute;
}
protected static IReturnType SetupReturnType(string typeName)
{
var returnType = fake.an<IReturnType>();
returnType.Stub(x => x.FullyQualifiedName).Return(typeName);
return returnType;
}
}
[Subject(typeof(MSpecTestFramework))]
public class When_checking_if_is_a_test_class : MSpecTestFrameworkFieldsConcern
{
static IClass classWithoutSpecificationMembers;
static IClass classWithSpecificationMembers;
static IClass classWithBehavior;
static IClass classWithSpecificationMembersAndBehaviorAttribute;
static bool resultForClassWithBehaviorAttribute;
static bool resultForClassWithSpecifications;
static bool resultForClassWithBehavior;
static bool resultForClassWithoutSpecifications;
Establish ctx = () =>
{
classWithoutSpecificationMembers = SetupClass(false, new IField[0], new IAttribute[0]);
classWithSpecificationMembers = SetupClass(false, new IField[] { SetupField(MSpecItTypeName) }, new IAttribute[0]);
classWithBehavior = SetupClass(false, new IField[] { SetupField(MSpecBehavesTypeName) }, new IAttribute[0]);
classWithSpecificationMembersAndBehaviorAttribute = SetupClass(false, new IField[] { SetupField(MSpecItTypeName) }, new IAttribute[] { SetupBehaviorAttribute() });
};
Because of = () =>
{
resultForClassWithoutSpecifications = sut.IsTestClass(classWithoutSpecificationMembers);
resultForClassWithSpecifications = sut.IsTestClass(classWithSpecificationMembers);
resultForClassWithBehavior = sut.IsTestClass(classWithBehavior);
resultForClassWithBehaviorAttribute = sut.IsTestClass(classWithSpecificationMembersAndBehaviorAttribute);
};
It should_return_false_for_class_without_specification_members = () =>
resultForClassWithoutSpecifications.ShouldBeFalse();
It should_return_true_for_class_with_specification_members = () =>
resultForClassWithSpecifications.ShouldBeTrue();
It should_return_true_for_class_with_behavior = () =>
resultForClassWithBehavior.ShouldBeTrue();
It should_return_false_for_class_with_behavior_attribute = () =>
resultForClassWithBehaviorAttribute.ShouldBeFalse();
}
public class When_enumerating_test_members : MSpecTestFrameworkFieldsConcern
{
static IClass behaviorClass;
static IField testSpecificationInBehavior;
static IClass testClass;
static IField testSpecification;
static IField otherField;
static IField behavesLikeField;
static IEnumerable<TestMember> result;
const string BehaviorClassName = "Test.Behavior";
Establish ctx = () =>
{
var itReturnType = SetupReturnType(MSpecItTypeName);
behaviorClass = new DefaultClass(CompilationUnit, "BehaviorClass");
testSpecificationInBehavior = new DefaultField(itReturnType, "testSpecificationInBehavior", ModifierEnum.None, DomRegion.Empty, behaviorClass);
behaviorClass.Fields.Add(testSpecificationInBehavior);
testClass = new DefaultClass(CompilationUnit, "TestClass");
testSpecification = new DefaultField(itReturnType, "testSpecification", ModifierEnum.None, DomRegion.Empty, testClass);
testClass.Fields.Add(testSpecification);
otherField = new DefaultField(fake.an<IReturnType>(), "OtherField", ModifierEnum.None, DomRegion.Empty, testClass);
testClass.Fields.Add(otherField);
var behavesLikeReturnType = new ConstructedReturnType(SetupReturnType(MSpecBehavesTypeName), new List<IReturnType>{new DefaultReturnType(behaviorClass)});
behavesLikeField = new DefaultField(behavesLikeReturnType, "behavesLikeField", ModifierEnum.None, new DomRegion(), testClass);
testClass.Fields.Add(behavesLikeField);
};
Because of = () => result = sut.GetTestMembersFor(testClass);
It should_contain_field_with_it_return_type = () =>
result.Select(m => m.Member).ShouldContain(testSpecification);
It should_not_contain_field_with_arbitrary_return_type = () =>
result.Select(m => m.Member).ShouldNotContain(otherField);
It should_contain_imported_field_from_behavior = () =>
result.Select(m => m.Member).ShouldContain(member => member.FullyQualifiedName == "TestClass.testSpecificationInBehavior");
}
}
///*
// * Created by SharpDevelop.
// * User: trecio
// * Date: 2011-06-18
// * Time: 15:12
// *
// * To change this template use Tools | Options | Coding | Edit Standard Headers.
// */
//using System;
//using System.Collections.Generic;
//using System.Collections.ObjectModel;
//using System.Linq;
//using developwithpassion.specifications.extensions;
//using developwithpassion.specifications.dsl;
//using developwithpassion.specifications.rhinomocks;
//using ICSharpCode.SharpDevelop.Project;
//using Machine.Specifications;
//using ICSharpCode.UnitTesting;
//using ICSharpCode.SharpDevelop.Dom;
//using Rhino.Mocks;
//
//namespace ICSharpCode.MachineSpecifications.Tests
//{
// [Subject(typeof(MSpecTestFramework))]
// public class When_checking_if_is_a_test_project : Observes<MSpecTestFramework>
// {
// static IProject testProject;
// static IProject nonTestProject;
//
// static bool resultForTestProject;
// static bool resultForNonTestProject;
//
// const string MSpecAssemblyName = "Machine.Specifications";
//
// Establish ctx = () =>
// {
// testProject = fake.an<IProject>();
// var mspecReference = MockRepository.GenerateStub<ReferenceProjectItem>(testProject);
// mspecReference.setup(x => x.ShortName).Return(MSpecAssemblyName);
// testProject.setup(x => x.Items).Return(new ReadOnlyCollection<ProjectItem>(new[] { mspecReference }));
//
// nonTestProject = fake.an<IProject>();
// var otherReference = MockRepository.GenerateStub<ReferenceProjectItem>(nonTestProject);
// mspecReference.setup(x => x.ShortName).Return("System.Configuration");
// nonTestProject.setup(x => x.Items).Return(new ReadOnlyCollection<ProjectItem>(new[] { otherReference }));
// };
//
// Because of = () =>
// {
// resultForTestProject = sut.IsTestProject(testProject);
// resultForNonTestProject = sut.IsTestProject(nonTestProject);
// };
//
// It should_return_true_for_project_which_has_reference_to_test_framework = () =>
// resultForTestProject.ShouldBeTrue();
//
// It should_return_false_for_project_which_has_no_reference_to_test_framework = () =>
// resultForNonTestProject.ShouldBeFalse();
// }
//
// public abstract class MSpecTestFrameworkFieldsConcern : Observes<MSpecTestFramework>
// {
// protected static ICompilationUnit CompilationUnit;
//
// Establish ctx = () =>
// {
// var ProjectContent = fake.an<IProjectContent>();
// ProjectContent.setup(x => x.SystemTypes).Return(new SystemTypes(ProjectContent));
// CompilationUnit = new DefaultCompilationUnit(ProjectContent);
// };
//
// protected const string MSpecItTypeName = "Machine.Specifications.It";
// protected const string MSpecBehavesTypeName = "Machine.Specifications.Behaves_like";
// protected const string MSpecBehaviorTypeName = "Machine.Specifications.BehaviorsAttribute";
//
// protected static IClass SetupClass(bool isAbstract, IList<IField> fields, IList<IAttribute> attributes)
// {
// var c = fake.an<IClass>();
// c.setup(x => x.IsAbstract).Return(isAbstract);
// c.setup(x => x.Fields).Return(fields);
// c.setup(x => x.Attributes).Return(attributes);
// return c;
// }
//
// protected static IField SetupField(string returnTypeName)
// {
// var field = fake.an<IField>();
// field.ReturnType = SetupReturnType(returnTypeName);
// return field;
// }
//
// protected static IAttribute SetupBehaviorAttribute()
// {
// var attribute = fake.an<IAttribute>();
// attribute.setup(x => x.AttributeType).Return(SetupReturnType(MSpecBehaviorTypeName));
// return attribute;
// }
//
// protected static IReturnType SetupReturnType(string typeName)
// {
// var returnType = fake.an<IReturnType>();
// returnType.Stub(x => x.FullyQualifiedName).Return(typeName);
// return returnType;
// }
// }
//
// [Subject(typeof(MSpecTestFramework))]
// public class When_checking_if_is_a_test_class : MSpecTestFrameworkFieldsConcern
// {
// static IClass classWithoutSpecificationMembers;
// static IClass classWithSpecificationMembers;
// static IClass classWithBehavior;
// static IClass classWithSpecificationMembersAndBehaviorAttribute;
//
// static bool resultForClassWithBehaviorAttribute;
// static bool resultForClassWithSpecifications;
// static bool resultForClassWithBehavior;
// static bool resultForClassWithoutSpecifications;
//
// Establish ctx = () =>
// {
// classWithoutSpecificationMembers = SetupClass(false, new IField[0], new IAttribute[0]);
// classWithSpecificationMembers = SetupClass(false, new IField[] { SetupField(MSpecItTypeName) }, new IAttribute[0]);
// classWithBehavior = SetupClass(false, new IField[] { SetupField(MSpecBehavesTypeName) }, new IAttribute[0]);
// classWithSpecificationMembersAndBehaviorAttribute = SetupClass(false, new IField[] { SetupField(MSpecItTypeName) }, new IAttribute[] { SetupBehaviorAttribute() });
// };
//
// Because of = () =>
// {
// resultForClassWithoutSpecifications = sut.IsTestClass(classWithoutSpecificationMembers);
// resultForClassWithSpecifications = sut.IsTestClass(classWithSpecificationMembers);
// resultForClassWithBehavior = sut.IsTestClass(classWithBehavior);
// resultForClassWithBehaviorAttribute = sut.IsTestClass(classWithSpecificationMembersAndBehaviorAttribute);
// };
//
// It should_return_false_for_class_without_specification_members = () =>
// resultForClassWithoutSpecifications.ShouldBeFalse();
//
// It should_return_true_for_class_with_specification_members = () =>
// resultForClassWithSpecifications.ShouldBeTrue();
//
// It should_return_true_for_class_with_behavior = () =>
// resultForClassWithBehavior.ShouldBeTrue();
//
// It should_return_false_for_class_with_behavior_attribute = () =>
// resultForClassWithBehaviorAttribute.ShouldBeFalse();
// }
//
// public class When_enumerating_test_members : MSpecTestFrameworkFieldsConcern
// {
// static IClass behaviorClass;
// static IField testSpecificationInBehavior;
//
// static IClass testClass;
// static IField testSpecification;
// static IField otherField;
// static IField behavesLikeField;
//
// static IEnumerable<TestMember> result;
//
// const string BehaviorClassName = "Test.Behavior";
//
// Establish ctx = () =>
// {
// var itReturnType = SetupReturnType(MSpecItTypeName);
//
// behaviorClass = new DefaultClass(CompilationUnit, "BehaviorClass");
// testSpecificationInBehavior = new DefaultField(itReturnType, "testSpecificationInBehavior", ModifierEnum.None, DomRegion.Empty, behaviorClass);
// behaviorClass.Fields.Add(testSpecificationInBehavior);
//
// testClass = new DefaultClass(CompilationUnit, "TestClass");
// testSpecification = new DefaultField(itReturnType, "testSpecification", ModifierEnum.None, DomRegion.Empty, testClass);
// testClass.Fields.Add(testSpecification);
// otherField = new DefaultField(fake.an<IReturnType>(), "OtherField", ModifierEnum.None, DomRegion.Empty, testClass);
// testClass.Fields.Add(otherField);
//
// var behavesLikeReturnType = new ConstructedReturnType(SetupReturnType(MSpecBehavesTypeName), new List<IReturnType>{new DefaultReturnType(behaviorClass)});
// behavesLikeField = new DefaultField(behavesLikeReturnType, "behavesLikeField", ModifierEnum.None, new DomRegion(), testClass);
// testClass.Fields.Add(behavesLikeField);
// };
//
// Because of = () => result = sut.GetTestMembersFor(testClass);
//
// It should_contain_field_with_it_return_type = () =>
// result.Select(m => m.Member).ShouldContain(testSpecification);
//
// It should_not_contain_field_with_arbitrary_return_type = () =>
// result.Select(m => m.Member).ShouldNotContain(otherField);
//
// It should_contain_imported_field_from_behavior = () =>
// result.Select(m => m.Member).ShouldContain(member => member.FullyQualifiedName == "TestClass.testSpecificationInBehavior");
// }
//}

4
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/MSpecUnitTestMonitorTests.cs

@ -14,10 +14,10 @@ namespace ICSharpCode.MachineSpecifications.Tests.Src @@ -14,10 +14,10 @@ namespace ICSharpCode.MachineSpecifications.Tests.Src
private Because of = () =>
{
sut.Start();
sut.TestFinished += (source, e) => FinishedTests.Add(e.Result);;
sut.TestFinished += (source, e) => FinishedTests.Add(e.Result);
sut.FileName = FILE_NAME;
sut.Read();
sut.Stop();
sut.Join();
};
private It should_create_test_result_for_passed_test_with_status_set_to_success = () =>

42
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.2.0.8235-alpha
# SharpDevelop 4.3
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications", "MachineSpecifications\MachineSpecifications.csproj", "{D1DA3B8F-7313-4BDA-8880-461C5F007751}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications.Tests", "MachineSpecifications.Tests\MachineSpecifications.Tests.csproj", "{172AE35D-2051-4977-AC13-0BF1B76374D5}"
@ -10,10 +10,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\. @@ -10,10 +10,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "..\..\.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "..\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory", "..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj", "{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -52,14 +56,6 @@ Global @@ -52,14 +56,6 @@ Global
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Any CPU.Build.0 = Release|Any CPU
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.ActiveCfg = Release|Any CPU
{2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.Build.0 = Release|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.ActiveCfg = Debug|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.Build.0 = Debug|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Any CPU.Build.0 = Release|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.ActiveCfg = Release|Any CPU
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.Build.0 = Release|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -70,6 +66,30 @@ Global @@ -70,6 +66,30 @@ Global
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.Build.0 = Release|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DA3B8F-7313-4BDA-8880-461C5F007751}.Release|Any CPU.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Any CPU.ActiveCfg = net_4_5_Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|x86.Build.0 = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|x86.ActiveCfg = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Any CPU.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.ActiveCfg = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.Build.0 = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.ActiveCfg = Debug|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.Build.0 = Release|Any CPU
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.ActiveCfg = Release|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.Build.0 = Debug|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.ActiveCfg = Debug|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Any CPU.Build.0 = Release|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.Build.0 = Release|Any CPU
{8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

16
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/MachineSpecifications.csproj

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<FileAlignment>4096</FileAlignment>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<Optimize>False</Optimize>
@ -99,12 +100,21 @@ @@ -99,12 +100,21 @@
<Compile Include="src\BehaviorImportedTestMember.cs" />
<Compile Include="src\ClassFilterBuilder.cs" />
<Compile Include="src\MSpecApplication.cs" />
<Compile Include="src\MSpecTestClass.cs" />
<Compile Include="src\MSpecTestDebugger.cs" />
<Compile Include="src\MSpecTestMember.cs" />
<Compile Include="src\MSpecTestFramework.cs" />
<Compile Include="src\MSpecTestProcessRunnerContext.cs" />
<Compile Include="src\MSpecTestProject.cs" />
<Compile Include="src\MspecTestRunner.cs" />
<Compile Include="src\MSpecUnitTestMonitor.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
@ -115,9 +125,9 @@ @@ -115,9 +125,9 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\UnitTesting\UnitTesting.csproj">

19
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/BehaviorImportedTestMember.cs

@ -7,19 +7,26 @@ @@ -7,19 +7,26 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
/// <summary>
/// Description of BehaviorImportedClass.
/// </summary>
public class BehaviorImportedTestMember : BaseTestMember
public class BehaviorImportedTestMember : MSpecTestMember
{
public BehaviorImportedTestMember(IClass testClass, IMember behaviorMember)
: base(testClass, behaviorMember, behaviorMember.Name)
IMember behavior;
public BehaviorImportedTestMember(
MSpecTestProject parentProject,
IMember behavior)
: base(parentProject, behavior)
{
this.behavior = behavior;
}
public override string DisplayName {
get { return behavior.DeclaringType.Name + "." + behavior.Name; }
}
}
}

32
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/ClassFilterBuilder.cs

@ -18,26 +18,26 @@ namespace ICSharpCode.MachineSpecifications @@ -18,26 +18,26 @@ namespace ICSharpCode.MachineSpecifications
/// </summary>
public class ClassFilterBuilder
{
public IList<string> BuildFilterFor(SelectedTests tests, IProjectContent @using) {
var projectContent = @using;
public IList<string> BuildFilterFor(IEnumerable<ITest> tests) {
//var projectContent = @using;
var filter = new List<string>();
if (tests.Class != null)
filter.Add(tests.Class.DotNetName);
if (tests.NamespaceFilter != null)
foreach (var projectClass in projectContent.Classes)
if (projectClass.FullyQualifiedName.StartsWith(tests.NamespaceFilter + "."))
Add(projectClass, to: filter);
// if (tests.Class != null)
// filter.Add(tests.Class.DotNetName);
// if (tests.NamespaceFilter != null)
// foreach (var projectClass in projectContent.Classes)
// if (projectClass.FullyQualifiedName.StartsWith(tests.NamespaceFilter + "."))
// Add(projectClass, to: filter);
return filter;
}
static void Add(IClass @class, IList<string> to)
{
var list = to;
to.Add(@class.DotNetName);
foreach (var innerClass in @class.InnerClasses)
Add(innerClass, to: list);
}
//
// static void Add(IClass @class, IList<string> to)
// {
// var list = to;
// to.Add(@class.DotNetName);
// foreach (var innerClass in @class.InnerClasses)
// Add(innerClass, to: list);
// }
}
}

46
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecApplication.cs

@ -9,13 +9,15 @@ @@ -9,13 +9,15 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.UnitTesting;
using System.IO;
using System.Linq;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using System.Text;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
@ -24,28 +26,30 @@ namespace ICSharpCode.MachineSpecifications @@ -24,28 +26,30 @@ namespace ICSharpCode.MachineSpecifications
/// </summary>
public class MSpecApplication
{
public MSpecApplication(SelectedTests tests) {
public MSpecApplication(IEnumerable<ITest> tests)
{
InitializeFrom(tests);
}
public ProcessStartInfo GetProcessStartInfo() {
var result = new ProcessStartInfo();
result.FileName = ExecutableFileName;
result.Arguments = GetArguments();
result.WorkingDirectory = WorkingDirectory;
return result;
public ProcessStartInfo GetProcessStartInfo()
{
return new ProcessStartInfo {
FileName = ExecutableFileName,
Arguments = GetArguments()
};
}
public string Results {get;set;}
public string Results { get;set; }
void InitializeFrom(SelectedTests tests) {
void InitializeFrom(IEnumerable<ITest> tests)
{
this.tests = tests;
project = tests.Project;
ITest test = tests.FirstOrDefault();
if (test != null)
project = test.ParentProject.Project;
}
SelectedTests tests;
IEnumerable<ITest> tests;
IProject project;
string GetArguments()
@ -66,7 +70,7 @@ namespace ICSharpCode.MachineSpecifications @@ -66,7 +70,7 @@ namespace ICSharpCode.MachineSpecifications
builder.Append("\"");
builder.Append(project.OutputAssemblyFullPath);
builder.Append("\"");
builder.Append("\"");
return builder.ToString();
}
@ -74,8 +78,8 @@ namespace ICSharpCode.MachineSpecifications @@ -74,8 +78,8 @@ namespace ICSharpCode.MachineSpecifications
string CreateFilterFile()
{
var classFilterBuilder = new ClassFilterBuilder();
var projectContent = ParserService.GetProjectContent(project);
var filter = classFilterBuilder.BuildFilterFor(tests, @using: projectContent);
//var projectContent = SD.ParserService.GetProjectContent(project);
var filter = classFilterBuilder.BuildFilterFor(tests);
string path = null;
if (filter.Count > 0) {
@ -83,7 +87,7 @@ namespace ICSharpCode.MachineSpecifications @@ -83,7 +87,7 @@ namespace ICSharpCode.MachineSpecifications
using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write))
using (var writer = new StreamWriter(stream))
foreach (var testClassName in filter) {
writer.WriteLine(testClassName);
writer.WriteLine(testClassName);
}
}
return path;

94
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestClass.cs

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
// 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.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
public class MSpecTestClass : TestBase
{
MSpecTestProject parentProject;
FullTypeName fullTypeName;
public MSpecTestClass(MSpecTestProject parentProject, FullTypeName fullTypeName)
{
this.parentProject = parentProject;
this.fullTypeName = fullTypeName;
BindResultToCompositeResultOfNestedTests();
}
public override ITestProject ParentProject {
get { return parentProject; }
}
public override string DisplayName {
get { return fullTypeName.Name; }
}
protected override void OnNestedTestsInitialized()
{
ITypeDefinition typeDefinition = Resolve();
if (typeDefinition != null) {
Update(typeDefinition);
}
base.OnNestedTestsInitialized();
}
public void Update(ITypeDefinition typeDefinition)
{
if (!NestedTestsInitialized)
return;
var newOrUpdatedTests = new HashSet<ITest>();
foreach (ITest test in parentProject.GetTestMembersFor(typeDefinition)) {
MSpecTestMember existingTest = FindTestMember(test);
if (existingTest == null) {
NestedTestCollection.Add(test);
newOrUpdatedTests.Add(test);
} else {
newOrUpdatedTests.Add(existingTest);
}
}
NestedTestCollection.RemoveAll(t => !newOrUpdatedTests.Contains(t));
}
MSpecTestMember FindTestMember(ITest test)
{
var testMember = test as MSpecTestMember;
return FindTestMember(testMember.DisplayName);
}
public MSpecTestMember FindTestMember(string name)
{
return NestedTestCollection
.OfType<MSpecTestMember>()
.LastOrDefault(member => member.DisplayName == name);
}
public override System.Windows.Input.ICommand GoToDefinition {
get {
return new RelayCommand(
delegate {
ITypeDefinition typeDefinition = Resolve();
if (typeDefinition != null)
NavigationService.NavigateTo(typeDefinition);
});
}
}
public ITypeDefinition Resolve()
{
ICompilation compilation = SD.ParserService.GetCompilation(parentProject.Project);
IType type = compilation.MainAssembly.GetTypeDefinition(fullTypeName);
return type.GetDefinition();
}
}
}

22
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestDebugger.cs

@ -7,7 +7,10 @@ @@ -7,7 +7,10 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using ICSharpCode.SharpDevelop;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
@ -17,20 +20,27 @@ namespace ICSharpCode.MachineSpecifications @@ -17,20 +20,27 @@ namespace ICSharpCode.MachineSpecifications
/// </summary>
public class MSpecTestDebugger : TestDebuggerBase
{
public MSpecTestDebugger()
: base(new UnitTestDebuggerService(), new UnitTestMessageService(), new MSpecUnitTestMonitor())
{ }
public MSpecTestDebugger()
: base(new UnitTestDebuggerService(), SD.MessageService, new MSpecUnitTestMonitor())
{
}
protected override ProcessStartInfo GetProcessStartInfo(SelectedTests selectedTests)
protected override ProcessStartInfo GetProcessStartInfo(IEnumerable<ITest> selectedTests)
{
var app = new MSpecApplication(selectedTests);
app.Results = TestResultsMonitor.FileName;
var monitor = TestResultsReader as MSpecUnitTestMonitor;
app.Results = monitor.FileName;
return app.GetProcessStartInfo();
}
protected override TestResult CreateTestResultForTestFramework(TestResult testResult)
{
return testResult;
return testResult;
}
public override int GetExpectedNumberOfTestResults(IEnumerable<ITest> selectedTests)
{
return 0;
}
}
}

98
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestFramework.cs

@ -1,11 +1,6 @@ @@ -1,11 +1,6 @@
/*
* Created by SharpDevelop.
* User: trecio
* Date: 2011-06-18
* Time: 13:31
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// 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.Linq;
@ -16,102 +11,31 @@ using ICSharpCode.UnitTesting; @@ -16,102 +11,31 @@ using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
/// <summary>
/// Description of MSpecTestFramework.
/// </summary>
public class MSpecTestFramework : ITestFramework
{
public bool IsTestMember(IMember member) {
return member is IField
&& HasItReturnType(member as IField);
}
public bool IsTestClass(IClass c) {
return HasSpecificationMembers(c) && !HasBehaviorAttribute(c);
}
public IEnumerable<TestMember> GetTestMembersFor(IClass @class) {
return GetTestMembers(@class, @class.Fields);
}
private IEnumerable<TestMember> GetTestMembers(IClass testClass, IList<IField> fields)
public bool IsTestProject(IProject project)
{
var result = fields.Where(HasItReturnType).Select(field => new TestMember(field)).ToList();
foreach (var field in fields)
if (HasBehavesLikeReturnType(field))
{
var behaviorFields = ResolveBehaviorFieldsOf(field);
var behaviorMembers = behaviorFields.Where(HasItReturnType);
var testMembersFromBehavior = behaviorMembers.Select(testField =>
new TestMember(testField.DeclaringType, new BehaviorImportedTestMember(testClass, testField)));
result.AddRange(testMembersFromBehavior);
}
return result;
}
public bool IsTestProject(IProject project) {
if (project != null) {
foreach (ProjectItem item in project.Items)
foreach (ProjectItem item in project.Items)
if (IsMSpecAssemblyReference(item))
return true;
}
return false;
}
public ITestRunner CreateTestRunner() {
return new MSpecTestRunner();
}
public ITestRunner CreateTestDebugger() {
return new MSpecTestDebugger();
}
public bool IsBuildNeededBeforeTestRun {
get {return true;}
}
private IList<IField> ResolveBehaviorFieldsOf(IField field)
public ITestProject CreateTestProject(ITestSolution parentSolution, IProject project)
{
var fieldReturnType = field.ReturnType.CastToConstructedReturnType();
if (fieldReturnType == null) return new List<IField>();
if (fieldReturnType.TypeArguments.Count != 1)
LoggingService.Error(string.Format("Expected behavior specification {0} to have one type argument but {1} found.", field.FullyQualifiedName, fieldReturnType.TypeArgumentCount));
var behaviorClassType = fieldReturnType.TypeArguments.FirstOrDefault();
return behaviorClassType != null ? behaviorClassType.GetFields() : new List<IField>();
}
private bool HasSpecificationMembers(IClass c) {
return !c.IsAbstract
&& c.Fields.Any(f => HasItReturnType(f) || HasBehavesLikeReturnType(f));
}
private bool HasBehavesLikeReturnType(IField field) {
return MSpecBehavesLikeFQName.Equals(field.ReturnType.FullyQualifiedName);
return new MSpecTestProject(parentSolution, project);
}
private bool HasItReturnType(IField field) {
return MSpecItFQName.Equals(field.ReturnType.FullyQualifiedName);
}
private bool HasBehaviorAttribute(IClass c) {
return c.Attributes.Any(
attribute => MSpecBehaviorsAttributeFQName.Equals(attribute.AttributeType.FullyQualifiedName));
}
private bool IsMSpecAssemblyReference(ProjectItem projectItem) {
private bool IsMSpecAssemblyReference(ProjectItem projectItem)
{
if (projectItem is ReferenceProjectItem) {
ReferenceProjectItem refProjectItem = projectItem as ReferenceProjectItem;
var refProjectItem = projectItem as ReferenceProjectItem;
string name = refProjectItem.ShortName;
return MSpecAssemblyName.Equals(name, StringComparison.OrdinalIgnoreCase);
return MSpecTestProject.MSpecAssemblyName.Equals(name, StringComparison.OrdinalIgnoreCase);
}
return false;
}
const string MSpecAssemblyName = "Machine.Specifications";
const string MSpecItFQName = MSpecAssemblyName + ".It";
const string MSpecBehavesLikeFQName = MSpecAssemblyName + ".Behaves_like";
const string MSpecBehaviorsAttributeFQName = MSpecAssemblyName + ".BehaviorsAttribute";
}
}

41
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
// 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.NRefactory.TypeSystem;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
public class MSpecTestMember : TestBase
{
MSpecTestProject parentProject;
string displayName;
public MSpecTestMember(MSpecTestProject parentProject, string displayName)
{
this.parentProject = parentProject;
this.displayName = displayName;
}
public MSpecTestMember(
MSpecTestProject parentProject,
IMember member)
: this(parentProject, member.DeclaringType.Name + "." + member.Name)
{
}
public override ITestProject ParentProject {
get { return parentProject; }
}
public override string DisplayName {
get { return displayName; }
}
public void UpdateTestResult(TestResult result)
{
this.Result = result.ResultType;
}
}
}

22
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProcessRunnerContext.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// 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;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
public class MSpecTestProcessRunnerContext : TestProcessRunnerBaseContext
{
public MSpecTestProcessRunnerContext(TestExecutionOptions options)
: base(
options,
new UnitTestProcessRunner(),
new MSpecUnitTestMonitor(),
new UnitTestFileService(),
SD.MessageService)
{
}
}
}

139
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs

@ -0,0 +1,139 @@ @@ -0,0 +1,139 @@
// 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.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
public class MSpecTestProject : TestProjectBase
{
public const string MSpecAssemblyName = "Machine.Specifications";
const string MSpecItFQName = MSpecAssemblyName + ".It";
const string MSpecBehavesLikeFQName = MSpecAssemblyName + ".Behaves_like";
const string MSpecBehaviorsAttributeFQName = MSpecAssemblyName + ".BehaviorsAttribute";
public MSpecTestProject(ITestSolution parentSolution, IProject project)
: base(project)
{
}
public override void UpdateTestResult(TestResult result)
{
// Code duplication - taken from NUnitTestProject
int lastDot = result.Name.LastIndexOf('.');
if (lastDot < 0)
return;
string fixtureName = result.Name.Substring(0, lastDot);
string memberName = result.Name.Substring(lastDot + 1);
var testClass = GetMSpecTestClass(new FullTypeName(fixtureName)) as MSpecTestClass;
MSpecTestMember test = testClass.FindTestMember(memberName);
if (test != null)
test.UpdateTestResult(result);
}
MSpecTestClass GetMSpecTestClass(FullTypeName fullTypeName)
{
return GetTestClass(fullTypeName.TopLevelTypeName) as MSpecTestClass;
}
protected override void UpdateTestClass(ITest test, ITypeDefinition typeDefinition)
{
var mspecTest = test as MSpecTestClass;
mspecTest.Update(typeDefinition);
}
protected override bool IsTestClass(ITypeDefinition typeDefinition)
{
return HasSpecificationMembers(typeDefinition) && !HasBehaviorAttribute(typeDefinition);
}
public override IEnumerable<ITest> GetTestsForEntity(IEntity entity)
{
return new ITest[0];
}
public override ITestRunner CreateTestRunner(TestExecutionOptions options)
{
if (options.UseDebugger)
return new MSpecTestDebugger();
return new MSpecTestRunner(options);
}
protected override ITest CreateTestClass(ITypeDefinition typeDefinition)
{
if (IsTestClass(typeDefinition))
return new MSpecTestClass(this, typeDefinition.FullTypeName);
return null;
}
public bool IsTestMember(IMember member)
{
return member is IField && HasItReturnType(member as IField);
}
public IEnumerable<ITest> GetTestMembersFor(ITypeDefinition typeDefinition)
{
return GetTestMembers(typeDefinition, typeDefinition.Fields);
}
IEnumerable<ITest> GetTestMembers(ITypeDefinition testClass, IEnumerable<IField> fields)
{
var result = fields.Where(HasItReturnType).Select(field => new MSpecTestMember(this, field.Name)).ToList();
foreach (var field in fields) {
if (HasBehavesLikeReturnType(field)) {
var behaviorFields = ResolveBehaviorFieldsOf(field);
var behaviorMembers = behaviorFields.Where(HasItReturnType);
var testMembersFromBehavior = behaviorMembers.Select(testField =>
new BehaviorImportedTestMember(this, testField));
result.AddRange(testMembersFromBehavior);
}
}
return result;
}
IEnumerable<IField> ResolveBehaviorFieldsOf(IField field)
{
var fieldReturnType = field.ReturnType;
if (fieldReturnType == null) return new List<IField>();
if (fieldReturnType.TypeArguments.Count != 1)
LoggingService.Error(string.Format("Expected behavior specification {0} to have one type argument but {1} found.", field.FullName, fieldReturnType.TypeArguments.Count));
var behaviorClassType = fieldReturnType.TypeArguments.FirstOrDefault();
return behaviorClassType != null ? behaviorClassType.GetFields() : new List<IField>();
}
private bool HasSpecificationMembers(ITypeDefinition typeDefinition)
{
return !typeDefinition.IsAbstract
&& typeDefinition.Fields.Any(f => HasItReturnType(f) || HasBehavesLikeReturnType(f));
}
private bool HasBehavesLikeReturnType(IField field)
{
return MSpecBehavesLikeFQName.Equals(field.ReturnType.FullName);
}
private bool HasItReturnType(IField field)
{
return MSpecItFQName.Equals(field.ReturnType.FullName);
}
private bool HasBehaviorAttribute(ITypeDefinition typeDefinition)
{
return typeDefinition.Attributes.Any(
attribute => MSpecBehaviorsAttributeFQName.Equals(attribute.AttributeType.FullName));
}
}
}

16
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecUnitTestMonitor.cs

@ -9,9 +9,9 @@ using System.Xml; @@ -9,9 +9,9 @@ using System.Xml;
namespace ICSharpCode.MachineSpecifications
{
public class MSpecUnitTestMonitor : ITestResultsMonitor
public class MSpecUnitTestMonitor : ITestResultsReader
{
public event TestFinishedEventHandler TestFinished;
public event EventHandler<TestFinishedEventArgs> TestFinished;
private FileSystemWatcher fileSystemWatcher;
private ISet<string> reportedResults;
@ -22,13 +22,13 @@ namespace ICSharpCode.MachineSpecifications @@ -22,13 +22,13 @@ namespace ICSharpCode.MachineSpecifications
public string FileName { get; set; }
public void Stop()
public void Join()
{
if (fileSystemWatcher != null)
{
fileSystemWatcher.Dispose();
fileSystemWatcher = null;
}
}
}
public void Start()
@ -119,11 +119,9 @@ namespace ICSharpCode.MachineSpecifications @@ -119,11 +119,9 @@ namespace ICSharpCode.MachineSpecifications
}
}
public long InitialFilePosition { get; set; }
public void Dispose()
{
Stop();
Join();
try
{
File.Delete(FileName);
@ -133,5 +131,9 @@ namespace ICSharpCode.MachineSpecifications @@ -133,5 +131,9 @@ namespace ICSharpCode.MachineSpecifications
LoggingService.Warn("Could delete temporary file.", e);
}
}
public string PipeName {
get { return String.Empty; }
}
}
}

41
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MspecTestRunner.cs

@ -7,9 +7,11 @@ @@ -7,9 +7,11 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using ICSharpCode.UnitTesting;
using System.Collections.Generic;
using System.Diagnostics;
using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications
{
/// <summary>
@ -17,20 +19,27 @@ namespace ICSharpCode.MachineSpecifications @@ -17,20 +19,27 @@ namespace ICSharpCode.MachineSpecifications
/// </summary>
public class MSpecTestRunner : TestProcessRunnerBase
{
public MSpecTestRunner()
: base(new UnitTestProcessRunner(), new MSpecUnitTestMonitor(), new UnitTestFileService(), new UnitTestMessageService())
{ }
protected override ProcessStartInfo GetProcessStartInfo(SelectedTests selectedTests)
{
var app = new MSpecApplication(selectedTests);
app.Results = TestResultsMonitor.FileName;
return app.GetProcessStartInfo();
}
protected override TestResult CreateTestResultForTestFramework(TestResult testResult)
{
return testResult;
}
public MSpecTestRunner(TestExecutionOptions options)
: base(new MSpecTestProcessRunnerContext(options))
{
}
protected override ProcessStartInfo GetProcessStartInfo(IEnumerable<ITest> selectedTests)
{
var app = new MSpecApplication(selectedTests);
var monitor = TestResultsReader as MSpecUnitTestMonitor;
app.Results = monitor.FileName;
return app.GetProcessStartInfo();
}
protected override TestResult CreateTestResultForTestFramework(TestResult testResult)
{
return testResult;
}
public override int GetExpectedNumberOfTestResults(IEnumerable<ITest> selectedTests)
{
return 0;
}
}
}

Loading…
Cancel
Save