Browse Source

update tests to work with IAssemblyModel

addin-manager-package-subdirectories
Siegfried Pammer 12 years ago
parent
commit
de377d1f39
  1. 2
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  2. 20
      src/Main/Base/Test/Dom/CSharpModelTestBase.cs
  3. 102
      src/Main/Base/Test/Dom/TopLevelTypeModelsTests.cs

2
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -21,7 +21,7 @@ namespace PackageManagement.Tests.EnvDTE @@ -21,7 +21,7 @@ namespace PackageManagement.Tests.EnvDTE
void CreateClass(string code)
{
AddCodeFile("class.cs", code);
ITypeDefinitionModel typeModel = topLevelTypeModels.Single();
ITypeDefinitionModel typeModel = assemblyModel.TopLevelTypeDefinitions.Single();
codeClass = new CodeClass2(codeModelContext, typeModel);
}

20
src/Main/Base/Test/Dom/CSharpModelTestBase.cs

@ -21,8 +21,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -21,8 +21,7 @@ namespace ICSharpCode.SharpDevelop.Dom
protected IProject project;
protected IProjectContent projectContent;
protected IEntityModelContext context;
protected ITypeDefinitionModelCollection topLevelTypeModels;
protected List<RemovedAndAddedPair<ITypeDefinitionModel>> topLevelChangeEventArgs = new List<RemovedAndAddedPair<ITypeDefinitionModel>>();
protected IUpdateableAssemblyModel assemblyModel;
protected class RemovedAndAddedPair<T>
{
@ -45,11 +44,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -45,11 +44,9 @@ namespace ICSharpCode.SharpDevelop.Dom
project = MockRepository.GenerateStrictMock<IProject>();
projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib);
context = new ProjectEntityModelContext(project, ".cs");
topLevelTypeModels = new TopLevelTypeDefinitionModelCollection(context);
assemblyModel = new ProjectAssemblyModel(context);
SD.ParserService.Stub(p => p.GetCompilation(project)).WhenCalled(c => c.ReturnValue = projectContent.CreateCompilation());
topLevelChangeEventArgs.Clear();
topLevelTypeModels.CollectionChanged += (oldItems, newItems) => topLevelChangeEventArgs.Add(new RemovedAndAddedPair<ITypeDefinitionModel>(oldItems, newItems));
}
[TearDown]
@ -64,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -64,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNull(oldFile, "Duplicate file name: " + fileName);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile);
assemblyModel.Update(oldFile, newFile);
}
IUnresolvedFile Parse(string fileName, string code)
@ -81,7 +78,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -81,7 +78,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNotNull(oldFile, "Could not update file (missing old file): " + fileName);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile);
assemblyModel.Update(oldFile, newFile);
}
protected void RemoveCodeFile(string fileName)
@ -89,7 +86,14 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -89,7 +86,14 @@ namespace ICSharpCode.SharpDevelop.Dom
var oldFile = projectContent.GetFile(fileName);
Assert.IsNotNull(oldFile, "Could not remove file (missing old file): " + fileName);
projectContent = projectContent.RemoveFiles(fileName);
topLevelTypeModels.Update(oldFile, null);
assemblyModel.Update(oldFile, null);
}
protected List<RemovedAndAddedPair<T>> ListenForChanges<T>(IModelCollection<T> collection)
{
var list = new List<RemovedAndAddedPair<T>>();
collection.CollectionChanged += (oldItems, newItems) => list.Add(new RemovedAndAddedPair<T>(oldItems, newItems));
return list;
}
#endregion
}

102
src/Main/Base/Test/Dom/TopLevelTypeModelsTests.cs

@ -15,23 +15,35 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -15,23 +15,35 @@ namespace ICSharpCode.SharpDevelop.Dom
{
class TopLevelTypeModelsTests : CSharpModelTestBase
{
protected List<RemovedAndAddedPair<ITypeDefinitionModel>> topLevelChangeEventArgs;
protected List<RemovedAndAddedPair<INamespaceModel>> namespaceChangeEventArgs;
[SetUp]
public override void SetUp()
{
base.SetUp();
topLevelChangeEventArgs = ListenForChanges(assemblyModel.TopLevelTypeDefinitions);
namespaceChangeEventArgs = ListenForChanges(assemblyModel.Namespaces);
}
[Test]
public void EmptyProject()
{
Assert.AreEqual(0, topLevelTypeModels.Count);
Assert.IsNull(topLevelTypeModels[new TopLevelTypeName("MissingClass")]);
Assert.AreEqual(0, assemblyModel.TopLevelTypeDefinitions.Count);
Assert.IsNull(assemblyModel.TopLevelTypeDefinitions[new TopLevelTypeName("MissingClass")]);
}
#region Simple class
[Test]
public void AddSimpleClass()
{
AddCodeFile("test.cs", @"class SimpleClass {}");
Assert.AreEqual(1, topLevelTypeModels.Count);
var simpleClass = topLevelTypeModels.Single();
Assert.AreEqual(1, assemblyModel.TopLevelTypeDefinitions.Count);
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
Assert.IsEmpty(topLevelChangeEventArgs.Single().OldItems);
Assert.AreEqual(new[] {
simpleClass
}, topLevelChangeEventArgs.Single().NewItems);
simpleClass
}, topLevelChangeEventArgs.Single().NewItems);
topLevelChangeEventArgs.Clear();
// clear for follow-up tests
}
@ -39,10 +51,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -39,10 +51,10 @@ namespace ICSharpCode.SharpDevelop.Dom
public void UpdateSimpleClass()
{
AddSimpleClass();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
Assert.AreEqual(0, simpleClass.Members.Count);
UpdateCodeFile("test.cs", "class SimpleClass { void Method() {} }");
Assert.AreSame(simpleClass, topLevelTypeModels.Single());
Assert.AreSame(simpleClass, assemblyModel.TopLevelTypeDefinitions.Single());
Assert.AreEqual(1, simpleClass.Members.Count);
Assert.IsEmpty(topLevelChangeEventArgs);
}
@ -50,33 +62,34 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -50,33 +62,34 @@ namespace ICSharpCode.SharpDevelop.Dom
public void ReplaceSimpleClass()
{
AddSimpleClass();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
UpdateCodeFile("test.cs", "class OtherClass { }");
var otherClass = topLevelTypeModels.Single();
var otherClass = assemblyModel.TopLevelTypeDefinitions.Single();
Assert.AreNotSame(simpleClass, otherClass);
Assert.AreEqual(new[] {
simpleClass
}, topLevelChangeEventArgs.Single().OldItems);
simpleClass
}, topLevelChangeEventArgs.Single().OldItems);
Assert.AreEqual(new[] {
otherClass
}, topLevelChangeEventArgs.Single().NewItems);
otherClass
}, topLevelChangeEventArgs.Single().NewItems);
}
[Test]
public void RemoveSimpleClassCodeFile()
{
AddSimpleClass();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
RemoveCodeFile("test.cs");
Assert.IsEmpty(topLevelTypeModels);
Assert.IsEmpty(assemblyModel.TopLevelTypeDefinitions);
// check removal event
Assert.AreEqual(new[] {
simpleClass
}, topLevelChangeEventArgs.Single().OldItems);
simpleClass
}, topLevelChangeEventArgs.Single().OldItems);
Assert.IsEmpty(topLevelChangeEventArgs.Single().NewItems);
// test that accessing properties of a removed class still works
Assert.AreEqual(new FullTypeName("SimpleClass"), simpleClass.FullTypeName);
}
#endregion
#region TwoPartsInSingleFile
[Test]
public void TwoPartsInSingleFile()
@ -84,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -84,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Dom
AddCodeFile("test.cs", @"
partial class SimpleClass { void Member1() {} }
partial class SimpleClass { void Member2() {} }");
Assert.AreEqual(1, topLevelTypeModels.Count);
Assert.AreEqual(1, assemblyModel.TopLevelTypeDefinitions.Count);
topLevelChangeEventArgs.Clear();
// clear for follow-up tests
}
@ -92,76 +105,77 @@ partial class SimpleClass { void Member2() {} }"); @@ -92,76 +105,77 @@ partial class SimpleClass { void Member2() {} }");
public void UpdateTwoPartsInSingleFile()
{
TwoPartsInSingleFile();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
UpdateCodeFile("test.cs", @"
partial class SimpleClass { void Member1b() {} }
partial class SimpleClass { void Member2b() {} }");
Assert.AreSame(simpleClass, topLevelTypeModels.Single());
Assert.AreSame(simpleClass, assemblyModel.TopLevelTypeDefinitions.Single());
Assert.AreEqual(new[] {
"Member1b",
"Member2b"
}, simpleClass.Members.Select(m => m.Name).ToArray());
"Member1b",
"Member2b"
}, simpleClass.Members.Select(m => m.Name).ToArray());
}
[Test]
public void RemoveOneOfPartsInSingleFile()
{
TwoPartsInSingleFile();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
var member1 = simpleClass.Members.First();
UpdateCodeFile("test.cs", "class SimpleClass { void Member1() {} }");
Assert.AreSame(simpleClass, topLevelTypeModels.Single());
Assert.AreSame(simpleClass, assemblyModel.TopLevelTypeDefinitions.Single());
Assert.AreSame(member1, simpleClass.Members.Single());
}
[Test]
public void RemoveBothPartsInSingleFile()
{
TwoPartsInSingleFile();
var simpleClass = topLevelTypeModels.Single();
var simpleClass = assemblyModel.TopLevelTypeDefinitions.Single();
UpdateCodeFile("test.cs", "class OtherClass {}");
Assert.AreNotSame(simpleClass, topLevelTypeModels.Single());
Assert.AreNotSame(simpleClass, assemblyModel.TopLevelTypeDefinitions.Single());
}
#endregion
#region TestRegionIsFromPrimaryPart
[Test]
public void AddingDesignerPartDoesNotChangeRegion()
{
AddCodeFile("Form.cs", "partial class MyForm {}");
Assert.AreEqual("Form.cs", topLevelTypeModels.Single().Region.FileName);
Assert.AreEqual("Form.cs", assemblyModel.TopLevelTypeDefinitions.Single().Region.FileName);
AddCodeFile("Form.Designer.cs", "partial class MyForm {}");
Assert.AreEqual("Form.cs", topLevelTypeModels.Single().Region.FileName);
Assert.AreEqual("Form.cs", assemblyModel.TopLevelTypeDefinitions.Single().Region.FileName);
}
[Test]
public void AddingPrimaryPartChangesRegion()
{
AddCodeFile("Form.Designer.cs", "partial class MyForm {}");
Assert.AreEqual("Form.Designer.cs", topLevelTypeModels.Single().Region.FileName);
Assert.AreEqual("Form.Designer.cs", assemblyModel.TopLevelTypeDefinitions.Single().Region.FileName);
AddCodeFile("Form.cs", "partial class MyForm {}");
Assert.AreEqual("Form.cs", topLevelTypeModels.Single().Region.FileName);
Assert.AreEqual("Form.cs", assemblyModel.TopLevelTypeDefinitions.Single().Region.FileName);
}
[Test]
public void RemovingPrimaryPartChangesRegionToNextBestPart()
{
AddCodeFile("Form.cs", "partial class MyForm { int primaryMember; }");
AddCodeFile("Form.Designer.Designer.cs", "partial class MyForm { int designer2; }");
var form = topLevelTypeModels.Single();
var form = assemblyModel.TopLevelTypeDefinitions.Single();
Assert.AreEqual(new[] {
"primaryMember",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
"primaryMember",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
AddCodeFile("Form.Designer.cs", "partial class MyForm { int designer; }");
Assert.AreEqual("Form.cs", form.Region.FileName);
Assert.AreEqual(new[] {
"primaryMember",
"designer",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
"primaryMember",
"designer",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
RemoveCodeFile("Form.cs");
Assert.AreSame(form, topLevelTypeModels.Single());
Assert.AreSame(form, assemblyModel.TopLevelTypeDefinitions.Single());
Assert.AreEqual("Form.Designer.cs", form.Region.FileName);
Assert.AreEqual(new[] {
"designer",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
"designer",
"designer2"
}, form.Members.Select(m => m.Name).ToArray());
}
#endregion
}

Loading…
Cancel
Save