Browse Source

Fixed selection of inner classes when running mspec tests based on namespace selection in test pad.

pull/23/head
Tomasz Tretkowski 14 years ago
parent
commit
42e05c8349
  1. 46
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications.Tests/Src/ClassFilterBuilder.cs
  2. 24
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/ClassFilterBuilder.cs
  3. 166
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecApplication.cs

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

@ -22,39 +22,49 @@ namespace ICSharpCode.MachineSpecifications.Tests @@ -22,39 +22,49 @@ namespace ICSharpCode.MachineSpecifications.Tests
public class When_building_class_filter_from_test_selection : Observes<ClassFilterBuilder>
{
const string NAMESPACE_FILTER = "Namespace";
static IClass classAddedExplicitly, classInNamespace, classOutsideNamespace;
static SelectedTests selectedTests;
static DefaultClass classAddedExplicitly, classInNamespace, classOutsideNamespace, classNestedInAddedExplicitly, classNestedInClassInNamespace;
static SelectedTests selectedTests;
static IProjectContent projectContent;
static IList<string> result;
Establish ctx = () => {
classAddedExplicitly = fake.an<IClass>();
classAddedExplicitly.setup(x => x.Namespace).Return("");
classAddedExplicitly.setup(x => x.FullyQualifiedName).Return("ClassAddedExplicitly");
classInNamespace = fake.an<IClass>();
classInNamespace.setup(x => x.Namespace).Return("Namespace.OtherNamespace");
classInNamespace.setup(x => x.FullyQualifiedName).Return("Namespace.OtherNamespace.ClassInNamespace");
classOutsideNamespace = fake.an<IClass>();
classOutsideNamespace.setup(x => x.Namespace).Return("Namespace2");
classOutsideNamespace.setup(x => x.FullyQualifiedName).Return("Namespace2.ClassOutsideNamespac");
var project = fake.an<IProject>();
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);
result = sut.BuildFilterFor(selectedTests, projectContent);
It should_add_fully_qualified_name_of_selected_test_class = () =>
result.ShouldContain(classAddedExplicitly.FullyQualifiedName);
It should_add_dotnet_name_of_selected_test_class = () =>
result.ShouldContain(classAddedExplicitly.DotNetName);
It should_add_class_included_in_selected_namespace = () =>
result.ShouldContain(classInNamespace.FullyQualifiedName);
result.ShouldContain(classInNamespace.DotNetName);
It should_not_include_class_not_included_in_namespace = () =>
result.ShouldNotContain(classOutsideNamespace.FullyQualifiedName);
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);
}
}

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

@ -22,14 +22,22 @@ namespace ICSharpCode.MachineSpecifications @@ -22,14 +22,22 @@ namespace ICSharpCode.MachineSpecifications
var projectContent = @using;
var filter = new List<string>();
if (tests.Class != null)
filter.Add(tests.Class.FullyQualifiedName);
if (tests.NamespaceFilter != null)
foreach (var projectClass in projectContent.Classes)
if (projectClass.FullyQualifiedName.StartsWith(tests.NamespaceFilter + "."))
filter.Add(projectClass.FullyQualifiedName);
return 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);
}
}
}

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

@ -29,12 +29,12 @@ namespace ICSharpCode.MachineSpecifications @@ -29,12 +29,12 @@ namespace ICSharpCode.MachineSpecifications
}
public ProcessStartInfo GetProcessStartInfo() {
var result = new ProcessStartInfo();
result.FileName = ExecutableFileName;
result.Arguments = GetArguments();
result.WorkingDirectory = WorkingDirectory;
var result = new ProcessStartInfo();
result.FileName = ExecutableFileName;
result.Arguments = GetArguments();
result.WorkingDirectory = WorkingDirectory;
return result;
return result;
}
@ -42,97 +42,97 @@ namespace ICSharpCode.MachineSpecifications @@ -42,97 +42,97 @@ namespace ICSharpCode.MachineSpecifications
void InitializeFrom(SelectedTests tests) {
this.tests = tests;
project = tests.Project;
project = tests.Project;
}
SelectedTests tests;
IProject project;
IProject project;
string GetArguments()
{
var builder = new StringBuilder();
string GetArguments()
{
var builder = new StringBuilder();
builder.Append("--xml \"");
builder.Append(FileUtility.GetAbsolutePath(Environment.CurrentDirectory, Results));
builder.Append("\" ");
builder.Append("--xml \"");
builder.Append(FileUtility.GetAbsolutePath(Environment.CurrentDirectory, Results));
builder.Append("\" ");
var filterFileName = CreateFilterFile();
if (filterFileName != null)
{
builder.Append("-f \"");
builder.Append(FileUtility.GetAbsolutePath(Environment.CurrentDirectory, filterFileName));
builder.Append("\" ");
}
var filterFileName = CreateFilterFile();
if (filterFileName != null)
{
builder.Append("-f \"");
builder.Append(FileUtility.GetAbsolutePath(Environment.CurrentDirectory, filterFileName));
builder.Append("\" ");
}
builder.Append("\"");
builder.Append(project.OutputAssemblyFullPath);
builder.Append("\"");
builder.Append("\"");
builder.Append(project.OutputAssemblyFullPath);
builder.Append("\"");
return builder.ToString();
}
return builder.ToString();
}
string CreateFilterFile()
{
var classFilterBuilder = new ClassFilterBuilder();
var projectContent = ParserService.GetProjectContent(project);
var filter = classFilterBuilder.BuildFilterFor(tests, @using: projectContent);
string path = null;
if (filter.Count > 0) {
path = Path.GetTempFileName();
using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write))
using (var writer = new StreamWriter(stream))
foreach (var testClassName in filter) {
writer.WriteLine(testClassName);
}
}
return path;
}
string CreateFilterFile()
{
var classFilterBuilder = new ClassFilterBuilder();
var projectContent = ParserService.GetProjectContent(project);
var filter = classFilterBuilder.BuildFilterFor(tests, @using: projectContent);
string path = null;
if (filter.Count > 0) {
path = Path.GetTempFileName();
using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write))
using (var writer = new StreamWriter(stream))
foreach (var testClassName in filter) {
writer.WriteLine(testClassName);
}
}
return path;
}
string ExecutableFileName {
get {
var assemblyDirectory = Path.GetDirectoryName(new Uri(typeof(MSpecApplication).Assembly.CodeBase).LocalPath);
var runnerDirectory = Path.Combine(assemblyDirectory, "MSpecRunner");
string ExecutableFileName {
get {
var assemblyDirectory = Path.GetDirectoryName(new Uri(typeof(MSpecApplication).Assembly.CodeBase).LocalPath);
var runnerDirectory = Path.Combine(assemblyDirectory, "MSpecRunner");
string executableName = "mspec";
if (TargetPlatformIs32Bit(project))
executableName += "-x86";
if (UsesClr4(project))
executableName += "-clr4";
string executableName = "mspec";
if (TargetPlatformIs32Bit(project))
executableName += "-x86";
if (UsesClr4(project))
executableName += "-clr4";
executableName += ".exe";
return Path.Combine(runnerDirectory, executableName);
}
}
executableName += ".exe";
return Path.Combine(runnerDirectory, executableName);
}
}
private bool UsesClr4(IProject project)
{
MSBuildBasedProject msbuildProject = project as MSBuildBasedProject;
if (msbuildProject != null)
{
string targetFrameworkVersion = msbuildProject.GetEvaluatedProperty("TargetFrameworkVersion");
return String.Equals(targetFrameworkVersion, "v4.0", StringComparison.OrdinalIgnoreCase);
}
return false;
}
private bool UsesClr4(IProject project)
{
MSBuildBasedProject msbuildProject = project as MSBuildBasedProject;
if (msbuildProject != null)
{
string targetFrameworkVersion = msbuildProject.GetEvaluatedProperty("TargetFrameworkVersion");
return String.Equals(targetFrameworkVersion, "v4.0", StringComparison.OrdinalIgnoreCase);
}
return false;
}
private bool TargetPlatformIs32Bit(IProject project)
{
MSBuildBasedProject msbuildProject = project as MSBuildBasedProject;
if (msbuildProject != null)
{
string platformTarget = msbuildProject.GetEvaluatedProperty("PlatformTarget");
return String.Compare(platformTarget, "x86", true) == 0;
}
return false;
}
private bool TargetPlatformIs32Bit(IProject project)
{
MSBuildBasedProject msbuildProject = project as MSBuildBasedProject;
if (msbuildProject != null)
{
string platformTarget = msbuildProject.GetEvaluatedProperty("PlatformTarget");
return String.Compare(platformTarget, "x86", true) == 0;
}
return false;
}
string WorkingDirectory
{
get
{
return Path.GetDirectoryName(project.OutputAssemblyFullPath);
}
}
}
string WorkingDirectory
{
get
{
return Path.GetDirectoryName(project.OutputAssemblyFullPath);
}
}
}
}

Loading…
Cancel
Save