From 30a5d66bb3241f29bc4298ed2790270ea1e7c574 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 4 Jan 2014 14:05:40 +0000 Subject: [PATCH] Update tests for EnvDTE.CodeNamespace. --- .../Project/Src/EnvDTE/CodeElement.cs | 21 +- .../Src/EnvDTE/CodeElementsInNamespace.cs | 20 +- .../Project/Src/EnvDTE/CodeNamespace.cs | 23 +- .../Test/PackageManagement.Tests.csproj | 1 - .../EnvDTE/CodeElementsInNamespaceTests.cs | 147 ------- .../Test/Src/EnvDTE/CodeModelTestBase.cs | 41 +- .../Test/Src/EnvDTE/CodeModelTests.cs | 41 -- .../Test/Src/EnvDTE/CodeNamespaceTests.cs | 359 ++++++++++-------- .../Test/Src/EnvDTE/ProjectItemTests.cs | 25 +- .../Test/Src/EnvDTE/ProjectTests.cs | 15 +- 10 files changed, 254 insertions(+), 439 deletions(-) delete mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs index d5388e32c6..aac7801d0e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs @@ -4,7 +4,6 @@ using System; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { @@ -12,7 +11,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE { DTE dte; protected CodeModelContext context; - readonly ISymbolModel symbolModel; IEntity entity; public CodeElement() @@ -24,22 +22,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE this.context = context; } - public CodeElement(CodeModelContext context, ISymbolModel symbolModel) - { - this.context = context; - this.symbolModel = symbolModel; - if (symbolModel.ParentProject != null) { - this.Language = symbolModel.ParentProject.GetCodeModelLanguage(); - } - } - public CodeElement(CodeModelContext context, IEntity entity) { this.context = context; this.entity = entity; - if (context.CurrentProject != null) { - this.Language = context.CurrentProject.GetCodeModelLanguage(); - } + this.Language = context.CurrentProject.GetCodeModelLanguage(); } internal static CodeElement CreateMember(CodeModelContext context, IMember member) @@ -63,11 +50,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public virtual string Name { - get { - if (symbolModel != null) - return symbolModel.Name; - return entity.Name; - } + get { return entity.Name; } } public virtual string Language { get; protected set; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs index 4e68885e56..dc1017a3e6 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs @@ -15,7 +15,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE public class CodeElementsInNamespace : CodeElementsList { CodeModelContext context; - NamespaceName namespaceName; INamespace ns; public CodeElementsInNamespace(CodeModelContext context) @@ -30,18 +29,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE GetCodeElements(); } -// public CodeElementsInNamespace(CodeModelContext context, string qualifiedNamespaceName) -// : this(context, new NamespaceName(qualifiedNamespaceName)) -// { -// } -// -// public CodeElementsInNamespace(CodeModelContext context, NamespaceName namespaceName) -// { -// this.context = context; -// this.namespaceName = namespaceName; -// GetCodeElements(); -// } - void GetCodeElements() { foreach (INamespace childNamespace in ns.ChildNamespaces) { @@ -60,12 +47,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE void AddType(IType type) { - ITypeDefinition typeDefinition = type.GetDefinition(); - if (typeDefinition.Kind == TypeKind.Interface) { - - } else { - Add(new CodeClass2(context, typeDefinition)); - } + Add(CodeType.Create(context, type)); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs index d89f4da14b..2d1ea1df11 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs @@ -16,18 +16,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE : base(context) { this.ns = ns; - //this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; - //this.Language = context.CurrentProject.GetCodeModelLanguage(); + this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; + this.Language = context.CurrentProject.GetCodeModelLanguage(); } public override global::EnvDTE.vsCMElement Kind { get { return global::EnvDTE.vsCMElement.vsCMElementNamespace; } } -// internal NamespaceName NamespaceName { -// get { return namespaceName; } -// } - public string FullName { get { return ns.FullName; } } @@ -39,21 +35,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE public virtual global::EnvDTE.CodeElements Members { get { return new CodeElementsInNamespace(context, ns); } } - -// CodeElementsList members; - -// public virtual global::EnvDTE.CodeElements Members { -// get { -// if (members == null) { -// if (model == null) -// throw new NotSupportedException(); -// IModelCollection namespaceMembers = model.ChildNamespaces.Select(ns => new CodeNamespace(context, ns)); -// IModelCollection typeMembers = model.Types.Select(td => CodeType.Create(context, td)); -// members = namespaceMembers.Concat(typeMembers).AsCodeElements(); -// } -// return members; -// } -// } } // Move code below into FileCodeModelNamespace diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 36a689b94c..04e440fcf7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -87,7 +87,6 @@ - diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs deleted file mode 100644 index 20b94951ef..0000000000 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs +++ /dev/null @@ -1,147 +0,0 @@ -//// 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.PackageManagement.EnvDTE; -//using NUnit.Framework; -//using PackageManagement.Tests.Helpers; -// -//namespace PackageManagement.Tests.EnvDTE -//{ -// [TestFixture] -// public class CodeElementsInNamespaceTests -// { -// CodeElementsInNamespace codeElements; -// ProjectContentHelper helper; -// -// [SetUp] -// public void Init() -// { -// helper = new ProjectContentHelper(); -// } -// -// void CreateCodeElements(string namespaceName) -// { -// codeElements = new CodeElementsInNamespace(helper.ProjectContent, namespaceName); -// } -// -// [Test] -// public void Count_NoItemsInNamespace_ReturnsZero() -// { -// helper.NoCompletionItemsInNamespace("Test"); -// CreateCodeElements("Test"); -// -// int count = codeElements.Count; -// -// Assert.AreEqual(0, count); -// } -// -// [Test] -// public void GetEnumerator_NoItemsInNamespace_ReturnsNoItems() -// { -// helper.NoCompletionItemsInNamespace("Test"); -// CreateCodeElements("Test"); -// -// List codeElementsList = codeElements.ToList(); -// -// Assert.AreEqual(0, codeElementsList.Count); -// } -// -// [Test] -// public void GetEnumerator_OneNamespaceCompletionEntryInNamespace_ReturnsOneCodeNamespace() -// { -// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child"); -// CreateCodeElements("Parent"); -// -// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); -// -// Assert.AreEqual(1, codeElements.Count); -// Assert.AreEqual("Child", codeNamespace.Name); -// Assert.AreEqual("Parent.Child", codeNamespace.FullName); -// } -// -// [Test] -// public void GetEnumerator_OneClassCompletionEntryInNamespace_ReturnsOneCodeClass() -// { -// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass"); -// CreateCodeElements("Test"); -// -// CodeClass2 codeClass = codeElements.ToList().FirstOrDefault() as CodeClass2; -// -// Assert.AreEqual(1, codeElements.Count); -// Assert.AreEqual("MyClass", codeClass.Name); -// Assert.AreEqual("Test.MyClass", codeClass.FullName); -// } -// -// [Test] -// public void GetEnumerator_UnknownCompletionEntryInNamespace_ReturnsNoItems() -// { -// helper.AddUnknownCompletionEntryTypeToNamespace("Test"); -// CreateCodeElements("Test"); -// -// List codeElementsList = codeElements.ToList(); -// -// Assert.AreEqual(0, codeElementsList.Count); -// } -// -// [Test] -// public void GetEnumerator_EmptyNamespaceEntry_ReturnsNoItems() -// { -// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, String.Empty); -// CreateCodeElements(String.Empty); -// -// List codeElementsList = codeElements.ToList(); -// -// Assert.AreEqual(0, codeElementsList.Count); -// } -// -// [Test] -// public void GetEnumerator_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace() -// { -// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child"); -// helper.AddNamespaceCompletionEntryInNamespace("Parent.Child", "GrandChild"); -// helper.NoCompletionItemsInNamespace("Parent.Child.GrandChild"); -// CreateCodeElements("Parent"); -// -// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); -// CodeNamespace grandChildNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault(); -// -// Assert.AreEqual("GrandChild", grandChildNamespace.Name); -// } -// -// [Test] -// public void Item_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass() -// { -// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass"); -// CreateCodeElements("Test"); -// -// CodeClass2 codeClass = codeElements.Item(1) as CodeClass2; -// -// Assert.AreEqual("Test.MyClass", codeClass.FullName); -// } -// -// [Test] -// public void Item_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass() -// { -// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass"); -// CreateCodeElements("Test"); -// -// CodeClass2 codeClass = codeElements.Item("MyClass") as CodeClass2; -// -// Assert.AreEqual("Test.MyClass", codeClass.FullName); -// } -// -// [Test] -// public void Item_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface() -// { -// helper.AddInterfaceToProjectContentAndCompletionEntries("Test", "Test.IClass"); -// CreateCodeElements("Test"); -// -// CodeInterface codeInterface = codeElements.Item("IClass") as CodeInterface; -// -// Assert.AreEqual("Test.IClass", codeInterface.FullName); -// } -// } -//} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs index f1c0318e9f..798c4771ea 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs @@ -2,14 +2,13 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; -using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; +using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.EnvDTE; -using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Refactoring; -using NUnit.Framework; +using PackageManagement.Tests.Helpers; using Rhino.Mocks; namespace PackageManagement.Tests.EnvDTE @@ -30,5 +29,39 @@ namespace PackageManagement.Tests.EnvDTE CurrentProject = project }; } + + protected CodeModel codeModel; + protected Project dteProject; + protected IPackageManagementProjectService projectService; + protected IPackageManagementFileService fileService; + protected TestableProject msbuildProject; + + protected void CreateCodeModel() + { + msbuildProject = ProjectHelper.CreateTestProject(); + + projectService = MockRepository.GenerateStub(); + fileService = MockRepository.GenerateStub(); + dteProject = new Project(msbuildProject, projectService, fileService); + codeModelContext.DteProject = dteProject; + + codeModel = new CodeModel(codeModelContext, dteProject); + + msbuildProject.SetAssemblyModel(assemblyModel); + project.Stub(p => p.AssemblyModel).Return(assemblyModel); + + fileService + .Stub(fs => fs.GetCompilationUnit(msbuildProject)) + .WhenCalled(compilation => compilation.ReturnValue = CreateCompilation()); + } + + ICompilation CreateCompilation() + { + var solutionSnapshot = new TestableSolutionSnapshot(msbuildProject); + msbuildProject.SetProjectContent(projectContent); + ICompilation compilation = new SimpleCompilation(solutionSnapshot, projectContent, projectContent.AssemblyReferences); + solutionSnapshot.AddCompilation(projectContent, compilation); + return compilation; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs index 055ed3d63d..f683821c2b 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs @@ -2,58 +2,17 @@ // 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.NRefactory.TypeSystem.Implementation; -using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.EnvDTE; -using ICSharpCode.SharpDevelop.Dom; using NUnit.Framework; using PackageManagement.Tests.Helpers; -using Rhino.Mocks; namespace PackageManagement.Tests.EnvDTE { [TestFixture] public class CodeModelTests : CodeModelTestBase { - CodeModel codeModel; - Project dteProject; - IPackageManagementProjectService fakeProjectService; - IPackageManagementFileService fakeFileService; - TestableProject msbuildProject; - - void CreateCodeModel() - { - msbuildProject = ProjectHelper.CreateTestProject(); - - fakeProjectService = MockRepository.GenerateStub(); - fakeFileService = MockRepository.GenerateStub(); - dteProject = new Project(msbuildProject, fakeProjectService, fakeFileService); - codeModelContext.DteProject = dteProject; - - codeModel = new CodeModel(codeModelContext, dteProject); - - msbuildProject.SetAssemblyModel(assemblyModel); - project.Stub(p => p.AssemblyModel).Return(assemblyModel); - - fakeFileService - .Stub(fileService => fileService.GetCompilationUnit(msbuildProject)) - .WhenCalled(compilation => compilation.ReturnValue = CreateCompilation()); - } - - ICompilation CreateCompilation() - { - var solutionSnapshot = new TestableSolutionSnapshot(msbuildProject); - msbuildProject.SetProjectContent(projectContent); - ICompilation compilation = new SimpleCompilation(solutionSnapshot, projectContent, projectContent.AssemblyReferences); - solutionSnapshot.AddCompilation(projectContent, compilation); - return compilation; - } - void CreateCodeModelWithCSharpProject() { CreateCodeModel(); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs index 442d74ca79..57fd6a3804 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs @@ -1,164 +1,195 @@ -//// 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.PackageManagement.EnvDTE; -//using ICSharpCode.SharpDevelop.Dom; -//using NUnit.Framework; -//using PackageManagement.Tests.Helpers; -// -//namespace PackageManagement.Tests.EnvDTE -//{ -// [TestFixture] -// public class CodeNamespaceTests -// { -// CodeNamespace codeNamespace; -// ProjectContentHelper helper; -// -// void CreateCodeNamespace(string namespaceName) -// { -// codeNamespace = new CodeNamespace(helper.ProjectContent, namespaceName); -// } -// -// void CreateProjectContent() -// { -// helper = new ProjectContentHelper(); -// } -// -// void AddClassToProjectContent(string namespaceName, string className) -// { -// helper.AddClassToProjectContentAndCompletionEntries(namespaceName, className); -// } -// -// void AddUnknownCompletionEntryToNamespace(string namespaceName) -// { -// helper.AddUnknownCompletionEntryTypeToNamespace(namespaceName); -// } -// -// [Test] -// public void Members_NamespaceHasOneClass_ReturnsOneClass() -// { -// CreateProjectContent(); -// AddClassToProjectContent("Tests", "Tests.MyClass"); -// CreateCodeNamespace("Tests"); -// -// global::EnvDTE.CodeElements members = codeNamespace.Members; -// CodeClass2 codeClass = members.FirstCodeClass2OrDefault(); -// -// Assert.AreEqual(1, members.Count); -// Assert.AreEqual("Tests.MyClass", codeClass.FullName); -// } -// -// [Test] -// public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace() -// { -// CreateProjectContent(); -// helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); -// CreateCodeNamespace("First"); -// -// global::EnvDTE.CodeElements members = codeNamespace.Members; -// CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault(); -// -// Assert.AreEqual("First", codeNamespace.Name); -// Assert.AreEqual(1, members.Count); -// Assert.AreEqual("Second", childNamespace.Name); -// Assert.AreEqual("First.Second", childNamespace.FullName); -// } -// -// [Test] -// public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal() -// { -// CreateProjectContent(); -// CreateCodeNamespace("Test"); -// -// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation); -// } -// -// [Test] -// public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace() -// { -// CreateProjectContent(); -// helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); -// helper.AddNamespaceCompletionEntryInNamespace("First.Second", "Third"); -// helper.NoCompletionItemsInNamespace("First.Second.Third"); -// CreateCodeNamespace("First"); -// -// global::EnvDTE.CodeElements members = codeNamespace.Members; -// CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault(); -// CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault(); -// -// Assert.AreEqual("First", codeNamespace.Name); -// Assert.AreEqual(1, members.Count); -// Assert.AreEqual("Second", secondNamespace.Name); -// Assert.AreEqual("First.Second", secondNamespace.FullName); -// Assert.AreEqual(1, secondNamespace.Members.Count); -// Assert.AreEqual("First.Second.Third", thirdNamespace.FullName); -// Assert.AreEqual(0, thirdNamespace.Members.Count); -// } -// -// [Test] -// public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace() -// { -// CreateProjectContent(); -// helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); -// helper.AddNamespaceCompletionEntriesInNamespace("First.Second", "Third", "Different"); -// CreateCodeNamespace("First"); -// -// global::EnvDTE.CodeElements members = codeNamespace.Members; -// CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace; -// -// Assert.AreEqual("First", codeNamespace.Name); -// Assert.AreEqual(1, members.Count); -// Assert.AreEqual("Second", secondNamespace.Name); -// Assert.AreEqual("First.Second", secondNamespace.FullName); -// Assert.AreEqual(2, secondNamespace.Members.Count); -// } -// -// [Test] -// public void Members_NamespaceHasUnknownNamespaceEntryType_ReturnsNoItems() -// { -// CreateProjectContent(); -// AddUnknownCompletionEntryToNamespace("Tests"); -// CreateCodeNamespace("Tests"); -// -// global::EnvDTE.CodeElements members = codeNamespace.Members; -// -// Assert.AreEqual(0, members.Count); -// } -// -// [Test] -// public void Language_CSharpProject_ReturnsCSharpModelLanguage() -// { -// CreateProjectContent(); -// helper.ProjectContentIsForCSharpProject(); -// CreateCodeNamespace(String.Empty); -// -// string language = codeNamespace.Language; -// -// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); -// } -// -// [Test] -// public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage() -// { -// CreateProjectContent(); -// helper.ProjectContentIsForVisualBasicProject(); -// CreateCodeNamespace(String.Empty); -// -// string language = codeNamespace.Language; -// -// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); -// } -// -// [Test] -// public void Kind_EmptyStringNamespace_ReturnsNamespace() -// { -// CreateProjectContent(); -// CreateCodeNamespace(String.Empty); -// -// global::EnvDTE.vsCMElement kind = codeNamespace.Kind; -// -// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind); -// } -// } -//} +// 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.PackageManagement.EnvDTE; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class CodeNamespaceTests : CodeModelTestBase + { + CodeNamespace codeNamespace; + + void CreateCodeNamespace(string code, string rootNamespace) + { + CreateCodeModel(); + AddCodeFile("class.cs", code); + + codeNamespace = codeModel + .CodeElements + .FindFirstCodeNamespaceOrDefault(n => n.Name == rootNamespace); + } + + [Test] + public void Members_NamespaceHasOneClass_ReturnsOneClass() + { + string code = + "namespace Tests {\r\n" + + " public class MyClass {}\r\n" + + "}"; + CreateCodeNamespace(code, "Tests"); + + global::EnvDTE.CodeElements members = codeNamespace.Members; + CodeClass2 codeClass = members.FirstCodeClass2OrDefault(); + + Assert.AreEqual(1, members.Count); + Assert.AreEqual("Tests.MyClass", codeClass.FullName); + } + + [Test] + public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace() + { + string code = "namespace First.Second {}"; + CreateCodeNamespace(code, "First"); + + global::EnvDTE.CodeElements members = codeNamespace.Members; + CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault(); + + Assert.AreEqual("First", codeNamespace.Name); + Assert.AreEqual(1, members.Count); + Assert.AreEqual("Second", childNamespace.Name); + Assert.AreEqual("First.Second", childNamespace.FullName); + } + + [Test] + public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal() + { + string code = "namespace Test {}"; + CreateCodeNamespace(code, "Test"); + + Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation); + } + + [Test] + public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace() + { + string code = "namespace First.Second.Third {}"; + CreateCodeNamespace(code, "First"); + + global::EnvDTE.CodeElements members = codeNamespace.Members; + CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault(); + CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault(); + + Assert.AreEqual("First", codeNamespace.Name); + Assert.AreEqual(1, members.Count); + Assert.AreEqual("Second", secondNamespace.Name); + Assert.AreEqual("First.Second", secondNamespace.FullName); + Assert.AreEqual(1, secondNamespace.Members.Count); + Assert.AreEqual("First.Second.Third", thirdNamespace.FullName); + Assert.AreEqual(0, thirdNamespace.Members.Count); + } + + [Test] + public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace() + { + string code = + "namespace First.Second {\r\n" + + " namespace Third {}\r\n" + + " namespace Different {}\r\n" + + "}"; + CreateCodeNamespace(code, "First"); + + global::EnvDTE.CodeElements members = codeNamespace.Members; + CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace; + + Assert.AreEqual("First", codeNamespace.Name); + Assert.AreEqual(1, members.Count); + Assert.AreEqual("Second", secondNamespace.Name); + Assert.AreEqual("First.Second", secondNamespace.FullName); + Assert.AreEqual(2, secondNamespace.Members.Count); + } + + [Test] + public void Language_CSharpProject_ReturnsCSharpModelLanguage() + { + string code = "namespace Test {}"; + CreateCodeNamespace(code, "Test"); + + string language = codeNamespace.Language; + + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); + } + + [Test] + [Ignore("VB.NET not supported")] + public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage() + { + string code = + "Namespace Test\r\n" + + "End Namespace"; + CreateCodeNamespace(code, "Test"); + + string language = codeNamespace.Language; + + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); + } + + [Test] + public void Kind_NamespaceHasNoClasses_ReturnsNamespace() + { + string code = "namespace Test {}"; + CreateCodeNamespace(code, "Test"); + + global::EnvDTE.vsCMElement kind = codeNamespace.Kind; + + Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind); + } + + [Test] + public void Members_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace() + { + string code = "namespace Parent.Child.GrandChild {}"; + CreateCodeNamespace(code, "Parent"); + + CodeNamespace childNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault(); + CodeNamespace grandChildNamespace = childNamespace.Members.FirstCodeNamespaceOrDefault(); + + Assert.AreEqual("GrandChild", grandChildNamespace.Name); + } + + [Test] + public void Members_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface() + { + string code = + "namespace Test {\r\n" + + " public interface IClass {}\r\n" + + "}"; + CreateCodeNamespace(code, "Test"); + + var codeInterface = codeNamespace.Members.Item("IClass") as CodeInterface; + + Assert.AreEqual("Test.IClass", codeInterface.FullName); + } + + [Test] + public void Members_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass() + { + string code = + "namespace Test {\r\n" + + " public class MyClass {}\r\n" + + "}"; + CreateCodeNamespace(code, "Test"); + + var codeClass = codeNamespace.Members.Item(1) as CodeClass2; + + Assert.AreEqual("Test.MyClass", codeClass.FullName); + } + + [Test] + public void Members_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass() + { + string code = + "namespace Test {\r\n" + + " public class MyClass {}\r\n" + + "}"; + CreateCodeNamespace(code, "Test"); + + var codeClass = codeNamespace.Members.Item("MyClass") as CodeClass2; + + Assert.AreEqual("Test.MyClass", codeClass.FullName); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs index 7f0d1a946b..f1b4c8a90e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs @@ -21,18 +21,17 @@ namespace PackageManagement.Tests.EnvDTE [TestFixture] public class ProjectItemTests : CodeModelTestBase { - TestableDTEProject dteProject; + TestableDTEProject testableDteProject; ProjectItems projectItems; - TestableProject msbuildProject; FakeFileService fakeFileService; void CreateProjectItems(string fileName = @"d:\projects\MyProject\MyProject.csproj") { - dteProject = new TestableDTEProject(); - msbuildProject = dteProject.TestableProject; + testableDteProject = new TestableDTEProject(); + msbuildProject = testableDteProject.TestableProject; msbuildProject.FileName = new FileName(fileName); - projectItems = (ProjectItems)dteProject.ProjectItems; - fakeFileService = dteProject.FakeFileService; + projectItems = (ProjectItems)testableDteProject.ProjectItems; + fakeFileService = testableDteProject.FakeFileService; } void OpenSavedFileInSharpDevelop(string fileName) @@ -164,7 +163,7 @@ namespace PackageManagement.Tests.EnvDTE fileItem.Delete(); - Assert.AreEqual(@"d:\projects\myproject\src\program.cs", dteProject.FakeFileService.PathPassedToRemoveFile); + Assert.AreEqual(@"d:\projects\myproject\src\program.cs", testableDteProject.FakeFileService.PathPassedToRemoveFile); } [Test] @@ -220,7 +219,7 @@ namespace PackageManagement.Tests.EnvDTE global::EnvDTE.CodeElements codeElements = fileItem.FileCodeModel.CodeElements; CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault(); - Assert.AreEqual(dteProject.TestableProject, fakeFileService.ProjectPassedToGetCompilationUnit); + Assert.AreEqual(testableDteProject.TestableProject, fakeFileService.ProjectPassedToGetCompilationUnit); Assert.AreEqual(0, codeElements.Count); } @@ -336,7 +335,7 @@ namespace PackageManagement.Tests.EnvDTE msbuildProject.AddFile("MainForm.cs"); msbuildProject.AddDependentFile("MainForm.Designer.cs", "MainForm.cs"); - global::EnvDTE.ProjectItems projectItems = dteProject.ProjectItems; + global::EnvDTE.ProjectItems projectItems = testableDteProject.ProjectItems; string[] expectedFiles = new string[] { "MainForm.cs" @@ -351,7 +350,7 @@ namespace PackageManagement.Tests.EnvDTE msbuildProject.AddFile("MainForm.cs"); msbuildProject.AddDependentFile("MainForm.Designer.cs", "MainForm.cs"); - Assert.Throws(() => dteProject.ProjectItems.Item("MainForm.Designer.cs")); + Assert.Throws(() => testableDteProject.ProjectItems.Item("MainForm.Designer.cs")); } [Test] @@ -360,7 +359,7 @@ namespace PackageManagement.Tests.EnvDTE CreateProjectItems(); msbuildProject.AddFile("MainForm.cs"); msbuildProject.AddDependentFile("MainForm.Designer.cs", "MainForm.cs"); - global::EnvDTE.ProjectItem mainFormItem = dteProject.ProjectItems.Item("MainForm.cs"); + global::EnvDTE.ProjectItem mainFormItem = testableDteProject.ProjectItems.Item("MainForm.cs"); global::EnvDTE.ProjectItems mainFormProjectItems = mainFormItem.ProjectItems; @@ -393,7 +392,7 @@ namespace PackageManagement.Tests.EnvDTE global::EnvDTE.ProjectItems collection = projectItem.Collection; - Assert.AreEqual(dteProject.ProjectItems, collection); + Assert.AreEqual(testableDteProject.ProjectItems, collection); } [Test] @@ -402,7 +401,7 @@ namespace PackageManagement.Tests.EnvDTE CreateProjectItems(); msbuildProject.FileName = new FileName(@"d:\projects\MyProject\MyProject.csproj"); msbuildProject.AddFile(@"src\program.cs"); - global::EnvDTE.ProjectItem srcDirectoryItem = dteProject.ProjectItems.Item("src"); + global::EnvDTE.ProjectItem srcDirectoryItem = testableDteProject.ProjectItems.Item("src"); global::EnvDTE.ProjectItem fileProjectItem = srcDirectoryItem.ProjectItems.Item("program.cs"); global::EnvDTE.ProjectItems collection = fileProjectItem.Collection; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs index 842f67d24e..b4da1e2080 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs @@ -17,25 +17,20 @@ namespace PackageManagement.Tests.EnvDTE [TestFixture] public class ProjectTests : CodeModelTestBase { - Project dteProject; - TestableProject msbuildProject; - IPackageManagementProjectService fakeProjectService; - IPackageManagementFileService fakeFileService; - void CreateProject(string fileName = @"d:\projects\MyProject\MyProject.csproj", string language = "C#") { msbuildProject = ProjectHelper.CreateTestProject(); msbuildProject.FileName = new FileName(fileName); - fakeProjectService = MockRepository.GenerateStub(); + projectService = MockRepository.GenerateStub(); - fakeFileService = MockRepository.GenerateStub(); - dteProject = new Project(msbuildProject, fakeProjectService, fakeFileService); + fileService = MockRepository.GenerateStub(); + dteProject = new Project(msbuildProject, projectService, fileService); msbuildProject.SetAssemblyModel(assemblyModel); - fakeFileService - .Stub(fileService => fileService.GetCompilationUnit(msbuildProject)) + fileService + .Stub(fs => fs.GetCompilationUnit(msbuildProject)) .WhenCalled(compilation => compilation.ReturnValue = projectContent.CreateCompilation()); }