Browse Source

update tests to work with IAssemblyModel

addin-manager-package-subdirectories
Siegfried Pammer 13 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
void CreateClass(string code) void CreateClass(string code)
{ {
AddCodeFile("class.cs", code); AddCodeFile("class.cs", code);
ITypeDefinitionModel typeModel = topLevelTypeModels.Single(); ITypeDefinitionModel typeModel = assemblyModel.TopLevelTypeDefinitions.Single();
codeClass = new CodeClass2(codeModelContext, typeModel); codeClass = new CodeClass2(codeModelContext, typeModel);
} }

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

@ -21,8 +21,7 @@ namespace ICSharpCode.SharpDevelop.Dom
protected IProject project; protected IProject project;
protected IProjectContent projectContent; protected IProjectContent projectContent;
protected IEntityModelContext context; protected IEntityModelContext context;
protected ITypeDefinitionModelCollection topLevelTypeModels; protected IUpdateableAssemblyModel assemblyModel;
protected List<RemovedAndAddedPair<ITypeDefinitionModel>> topLevelChangeEventArgs = new List<RemovedAndAddedPair<ITypeDefinitionModel>>();
protected class RemovedAndAddedPair<T> protected class RemovedAndAddedPair<T>
{ {
@ -45,11 +44,9 @@ namespace ICSharpCode.SharpDevelop.Dom
project = MockRepository.GenerateStrictMock<IProject>(); project = MockRepository.GenerateStrictMock<IProject>();
projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib); projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib);
context = new ProjectEntityModelContext(project, ".cs"); 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()); 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] [TearDown]
@ -64,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNull(oldFile, "Duplicate file name: " + fileName); Assert.IsNull(oldFile, "Duplicate file name: " + fileName);
var newFile = Parse(fileName, code); var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile); projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile); assemblyModel.Update(oldFile, newFile);
} }
IUnresolvedFile Parse(string fileName, string code) IUnresolvedFile Parse(string fileName, string code)
@ -81,7 +78,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNotNull(oldFile, "Could not update file (missing old file): " + fileName); Assert.IsNotNull(oldFile, "Could not update file (missing old file): " + fileName);
var newFile = Parse(fileName, code); var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile); projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile); assemblyModel.Update(oldFile, newFile);
} }
protected void RemoveCodeFile(string fileName) protected void RemoveCodeFile(string fileName)
@ -89,7 +86,14 @@ namespace ICSharpCode.SharpDevelop.Dom
var oldFile = projectContent.GetFile(fileName); var oldFile = projectContent.GetFile(fileName);
Assert.IsNotNull(oldFile, "Could not remove file (missing old file): " + fileName); Assert.IsNotNull(oldFile, "Could not remove file (missing old file): " + fileName);
projectContent = projectContent.RemoveFiles(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 #endregion
} }

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

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

Loading…
Cancel
Save