Browse Source

Support making class partial with EnvDTE.

pull/375/head
Matt Ward 12 years ago
parent
commit
4b2450f325
  1. 4
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 81
      src/AddIns/Misc/PackageManagement/Project/Src/ClassKindUpdater.cs
  3. 20
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  4. 14
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
  5. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  6. 11
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  7. 7
      src/AddIns/Misc/PackageManagement/Project/Src/ICodeGenerator.cs
  8. 53
      src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafeCodeGenerator.cs
  9. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  10. 180
      src/AddIns/Misc/PackageManagement/Test/Src/ClassKindUpdaterTests.cs
  11. 28
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  12. 10
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs
  13. 8
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/FileCodeModel2Tests.cs
  14. 18
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs
  15. 11
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs

4
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -82,7 +82,6 @@ @@ -82,7 +82,6 @@
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AcceptLicensesEventArgs.cs" />
<Compile Include="Src\ClassCodeGenerator.cs" />
<Compile Include="Src\ClassKindUpdater.cs" />
<Compile Include="Src\ConfigSettingsFileSystem.cs" />
<Compile Include="Src\DependentFile.cs" />
<Compile Include="Src\Design\DesignTimeSelectProjectsViewModel.cs" />
@ -151,7 +150,7 @@ @@ -151,7 +150,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\FileConflictViewModel.cs" />
<Compile Include="Src\IClassKindUpdater.cs" />
<Compile Include="Src\ICodeGenerator.cs" />
<Compile Include="Src\IPackageRepositoryFactoryEvents.cs" />
<Compile Include="Src\IPackageViewModelParent.cs" />
<Compile Include="Src\IUpdatePackagesAction.cs" />
@ -257,6 +256,7 @@ @@ -257,6 +256,7 @@
<Compile Include="Src\ServiceWithWorkbenchOwner.cs" />
<Compile Include="Src\SharpDevelopCredentialProvider.cs" />
<Compile Include="Src\SharpDevelopHttpUserAgent.cs" />
<Compile Include="Src\ThreadSafeCodeGenerator.cs" />
<Compile Include="Src\UpdatePackagesAction.cs" />
<Compile Include="Src\UpdatePackagesActionFactory.cs" />
<Compile Include="Src\UpdateSolutionPackagesAction.cs" />

81
src/AddIns/Misc/PackageManagement/Project/Src/ClassKindUpdater.cs

@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//
//namespace ICSharpCode.PackageManagement
//{
// public class ClassKindUpdater : IClassKindUpdater
// {
// public ClassKindUpdater(IClass c)
// : this(c, new DocumentLoader())
// {
// }
//
// public ClassKindUpdater(IClass c, IDocumentLoader documentLoader)
// {
// this.Class = c;
// this.DocumentLoader = documentLoader;
// }
//
// IClass Class { get; set; }
// IDocumentLoader DocumentLoader { get; set; }
// IRefactoringDocument Document { get; set; }
//
// public void MakeClassPartial()
// {
// if (Class.IsPartial)
// return;
//
// OpenFileContainingClass();
// int offset = GetPartialKeywordInsertOffset();
// InsertPartialKeyword(offset);
// }
//
// void OpenFileContainingClass()
// {
// Document = DocumentLoader.LoadRefactoringDocument(Class.CompilationUnit.FileName);
// }
//
// int GetPartialKeywordInsertOffset()
// {
// IRefactoringDocumentLine line = Document.GetLine(Class.Region.BeginLine);
// int offset = line.Text.IndexOf(" class", StringComparison.OrdinalIgnoreCase);
// if (offset >= 0) {
// return offset + line.Offset + 1;
// }
// throw new ApplicationException("Unable to find 'class' declaration.");
// }
//
// void InsertPartialKeyword(int offset)
// {
// string partialKeyword = GetLanguageSpecificPartialKeyword();
// Document.Insert(offset, partialKeyword + " ");
// }
//
// string GetLanguageSpecificPartialKeyword()
// {
// if (Class.ProjectContent.Language == LanguageProperties.VBNet) {
// return "Partial";
// }
// return "partial";
// }
// }
//}

20
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs

@ -49,19 +49,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -49,19 +49,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
}
set {
// if (value == this.ClassKind) {
// return;
// }
//
// if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
// ITypeDefinition typeDefinition = typeModel.Resolve();
// if (typeDefinition == null) {
// throw new NotSupportedException();
// }
// context.CodeGenerator.MakePartial(typeDefinition);
// } else {
if (value == ClassKind) {
return;
}
if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
context.CodeGenerator.MakePartial(typeDefinition);
} else {
throw new NotImplementedException();
// }
}
}
}

14
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs

@ -24,10 +24,20 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -24,10 +24,20 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeModelContext
{
public EnvDTE.Project DteProject { get; set; }
ICodeGenerator codeGenerator;
public Project DteProject { get; set; }
public IProject CurrentProject { get; set; }
public IDocumentLoader DocumentLoader { get; set; }
public CodeGenerator CodeGenerator { get; set; }
public ICodeGenerator CodeGenerator {
get {
if (codeGenerator == null) {
codeGenerator = new ThreadSafeCodeGenerator(CurrentProject.LanguageBinding.CodeGenerator);
}
return codeGenerator;
}
}
/// <summary>
/// Specifies the file name if this code model context refers to

6
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -84,11 +84,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -84,11 +84,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.vsCMAccess Access {
get { return typeDefinition.Accessibility.ToAccess(); }
set {
if (typeDefinition != null) {
context.CodeGenerator.ChangeAccessibility(typeDefinition, value.ToAccessibility());
}
}
set { }
}
public virtual string FullName {

11
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -71,16 +71,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -71,16 +71,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return null;
}
// internal ProjectItem(MSBuildBasedProject project, IClass c)
// : this(new Project(project), project.FindFile(c.CompilationUnit.FileName))
// {
// }
//
// internal ProjectItem(IProjectContent projectContent, IClass c)
// : this((MSBuildBasedProject)projectContent.Project, c)
// {
// }
string GetKindFromFileProjectItemType()
{
if (IsDirectory) {
@ -191,6 +181,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -191,6 +181,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
CodeModelContext CreateModelContext()
{
return new CodeModelContext {
CurrentProject = containingProject.MSBuildProject,
FilteredFileName = projectItem.FileName
};
}

7
src/AddIns/Misc/PackageManagement/Project/Src/IClassKindUpdater.cs → src/AddIns/Misc/PackageManagement/Project/Src/ICodeGenerator.cs

@ -17,11 +17,14 @@ @@ -17,11 +17,14 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement
{
public interface IClassKindUpdater
public interface ICodeGenerator
{
void MakeClassPartial();
void AddImport(FileName fileName, string name);
void MakePartial(ITypeDefinition typeDefinition);
}
}

53
src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafeCodeGenerator.cs

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.PackageManagement
{
public class ThreadSafeCodeGenerator : ICodeGenerator
{
readonly CodeGenerator codeGenerator;
readonly IMessageLoop mainThread;
public ThreadSafeCodeGenerator(CodeGenerator codeGenerator)
{
this.codeGenerator = codeGenerator;
this.mainThread = SD.MainThread;
}
public void AddImport(FileName fileName, string name)
{
InvokeIfRequired(() => codeGenerator.AddImport(fileName, name));
}
public void MakePartial(ITypeDefinition typeDefinition)
{
InvokeIfRequired(() => codeGenerator.MakePartial(typeDefinition));
}
void InvokeIfRequired(Action action)
{
mainThread.InvokeIfRequired(action);
}
}
}

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -81,7 +81,6 @@ @@ -81,7 +81,6 @@
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Src\ClassCodeGeneratorTests.cs" />
<Compile Include="Src\ClassKindUpdaterTests.cs" />
<Compile Include="Src\CodeGeneratorTests.cs" />
<Compile Include="Src\DependentFileNameTests.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute2Tests.cs" />

180
src/AddIns/Misc/PackageManagement/Test/Src/ClassKindUpdaterTests.cs

@ -1,180 +0,0 @@ @@ -1,180 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests
//{
// [TestFixture]
// public class ClassKindUpdaterTests
// {
// ClassKindUpdater updater;
// ClassHelper classHelper;
// IRefactoringDocument document;
// IDocumentLoader documentLoader;
//
// [SetUp]
// public void Init()
// {
// classHelper = new ClassHelper();
// document = MockRepository.GenerateStub<IRefactoringDocument>();
// documentLoader = MockRepository.GenerateStub<IDocumentLoader>();
// }
//
// void CreatePublicCSharpClass()
// {
// classHelper.CreatePublicClass("MyClass");
// classHelper.ProjectContentHelper.ProjectContentIsForCSharpProject();
// }
//
// void CreatePublicVisualBasicClass()
// {
// classHelper.CreatePublicClass("MyClass");
// classHelper.ProjectContentHelper.ProjectContentIsForVisualBasicProject();
// }
//
// void SetDocumentFileName(string fileName)
// {
// documentLoader.Stub(loader => loader.LoadRefactoringDocument(fileName)).Return(document);
// }
//
// void CreateClassKindUpdater()
// {
// updater = new ClassKindUpdater(classHelper.Class, documentLoader);
// }
//
// void SetClassFileName(string fileName)
// {
// classHelper.SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// }
//
// void SetClassDeclarationLineWithOffset(int line, string text, int offset)
// {
// classHelper.SetRegionBeginLine(line);
// SetDocumentLineText(line, text, offset);
// }
//
// void SetClassDeclarationLine(int line, string text)
// {
// SetClassDeclarationLineWithOffset(line, text, 0);
// }
//
// void SetDocumentLineText(int lineNumber, string text, int offset)
// {
// IRefactoringDocumentLine documentLine = MockRepository.GenerateStub<IRefactoringDocumentLine>();
// documentLine.Stub(line => line.Text).Return(text);
// documentLine.Stub(line => line.Offset).Return(offset);
// document.Stub(doc => doc.GetLine(lineNumber)).Return(documentLine);
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassWithNoOtherModifiers_OpensFileContainingClassInSharpDevelop()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// string fileName = @"d:\projects\MyProject\MyClass.cs";
// SetClassFileName(fileName);
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// documentLoader.AssertWasCalled(loader => loader.LoadRefactoringDocument(fileName));
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassWithNoOtherModifiers_AddsPartialKeywordToClassDefinition()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(7, "partial "));
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassThatIsAlreadyPartial_ClassDefinitionIsUnchanged()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// classHelper.MakeClassPartial();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasNotCalled(doc => doc.Insert(Arg<int>.Is.Anything, Arg<string>.Is.Anything));
// }
//
// [Test]
// public void MakeClassPartial_PublicVisualBasicClassWithNoOtherModifiers_AddsVisualBasicPartialKeywordToClassDefinition()
// {
// CreatePublicVisualBasicClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.vb");
// SetClassDeclarationLine(1, "Public Class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(7, "Partial "));
// }
//
// [Test]
// public void MakeClassPartial_NoClassKeywordInClassDeclarationLine_ExceptionIsThrown()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\test.cs");
// SetClassDeclarationLine(1, "public test");
//
// Assert.Throws<ApplicationException>(() => updater.MakeClassPartial());
// }
//
// [Test]
// public void MakeClassPartial_NoClassKeywordButClassNameIncludesClassKeyword_ExceptionIsThrown()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public MyClass");
//
// Assert.Throws<ApplicationException>(() => updater.MakeClassPartial());
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassNotOnFirstLine_AddsPartialKeywordToClassDefinitionAtCorrectOffset()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLineWithOffset(1, "public class MyClass", offset: 10);
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(17, "partial "));
// }
// }
//}

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

@ -305,21 +305,31 @@ namespace PackageManagement.Tests.EnvDTE @@ -305,21 +305,31 @@ namespace PackageManagement.Tests.EnvDTE
}
[Test]
[Ignore("TODO - Not yet implemented")]
public void ClassKind_ChangeClassToBePartial_UsesClassKindUpdaterToModifyClass()
public void ClassKind_ChangeClassToBePartial_UsesCodeGeneratorToModifyClass()
{
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
//
// classKindUpdater.AssertWasCalled(updater => updater.MakeClassPartial());
CreateClass("public class MyClass {}");
codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
codeGenerator.AssertWasCalled(generator => generator.MakePartial(
Arg<ITypeDefinition>.Matches(typeDef => typeDef.Name == "MyClass")));
}
[Test]
public void ClassKind_ChangeClassToBePartialWhenClassIsAlreadyPartial_CodeGeneratorIsNotChanged()
{
CreateClass("public partial class MyClass {}");
codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
codeGenerator.AssertWasNotCalled(generator => generator.MakePartial(
Arg<ITypeDefinition>.Is.Anything));
}
[Test]
public void ClassKind_ChangeClassToBeMainClass_ThrowsNotImplementedException()
{
CreateClass("public class MyClass {}");
CreateClass("public partial class MyClass {}");
Assert.Throws<NotImplementedException>(() => codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass);
}

10
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs

@ -21,6 +21,7 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -21,6 +21,7 @@ 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.Refactoring;
using PackageManagement.Tests.Helpers;
@ -33,14 +34,19 @@ namespace PackageManagement.Tests.EnvDTE @@ -33,14 +34,19 @@ namespace PackageManagement.Tests.EnvDTE
protected CodeGenerator codeGenerator;
protected CodeModelContext codeModelContext;
protected string projectLanguage = "C#";
protected ILanguageBinding languageBinding;
public override void SetUp()
{
base.SetUp();
project.Stub(p => p.Language).Return(null).WhenCalled(mi => mi.ReturnValue = projectLanguage);
codeGenerator = MockRepository.GenerateStrictMock<CodeGenerator>();
codeGenerator = MockRepository.GenerateMock<CodeGenerator>();
languageBinding = MockRepository.GenerateMock<ILanguageBinding>();
languageBinding.Stub(binding => binding.CodeGenerator).Return(codeGenerator);
project.Stub(p => p.LanguageBinding).Return(languageBinding);
codeModelContext = new CodeModelContext {
CodeGenerator = codeGenerator,
CurrentProject = project
};
}

8
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/FileCodeModel2Tests.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.EasyCodeDom;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
@ -109,15 +110,16 @@ namespace PackageManagement.Tests.EnvDTE @@ -109,15 +110,16 @@ namespace PackageManagement.Tests.EnvDTE
}
[Test]
[Ignore("TODO - Not implemented")]
public void AddImport_AddSystemXmlNamespace_NamespaceAndcompilationUnitPassedToNamespaceCreator()
{
CreateProjectWithOneFile("");
CreateProjectWithOneFile("", @"d:\project\MyProject\MyFile.cs");
CreateFileCodeModel();
fileCodeModel.AddImport("System.Xml");
// namespaceCreator.AssertWasCalled(creator => creator.AddNamespace(compilationUnitHelper.CompilationUnit, "System.Xml"));
codeGenerator.AssertWasCalled(generator => generator.AddImport(
new FileName(@"d:\project\MyProject\MyFile.cs"),
"System.Xml"));
}
[Test]

18
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs

@ -451,5 +451,23 @@ namespace PackageManagement.Tests.EnvDTE @@ -451,5 +451,23 @@ namespace PackageManagement.Tests.EnvDTE
Assert.IsFalse(fakeFileService.IsSaveFileCalled);
}
[Test]
public void FileCodeModel_AddImportToProjectFile_UsesCodeGenerator()
{
CreateProjectItems(@"d:\projects\Test\Tests.csproj");
AddCompilationUnit();
msbuildProject.AddFile(@"src\program.cs");
msbuildProject.SetLanguageBinding(languageBinding);
global::EnvDTE.ProjectItem directoryItem = projectItems.Item("src");
global::EnvDTE.ProjectItem fileItem = directoryItem.ProjectItems.Item("program.cs");
global::EnvDTE.FileCodeModel2 fileCodeModel = fileItem.FileCodeModel;
fileCodeModel.AddImport("System.Xml");
codeGenerator.AssertWasCalled(generator => generator.AddImport(
new FileName(@"d:\projects\Test\src\program.cs"),
"System.Xml"));
}
}
}

11
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs

@ -21,6 +21,7 @@ using System.Collections.Generic; @@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Build.Construction;
@ -35,6 +36,7 @@ namespace PackageManagement.Tests.Helpers @@ -35,6 +36,7 @@ namespace PackageManagement.Tests.Helpers
bool isStartable = true;
IAssemblyModel assemblyModel;
IProjectContent projectContent;
ILanguageBinding languageBinding;
public ItemType ItemTypeToReturnFromGetDefaultItemType {
get { return TestableProjectBehaviour.ItemTypeToReturnFromGetDefaultItemType; }
@ -167,5 +169,14 @@ namespace PackageManagement.Tests.Helpers @@ -167,5 +169,14 @@ namespace PackageManagement.Tests.Helpers
{
this.projectContent = projectContent;
}
public void SetLanguageBinding(ILanguageBinding languageBinding)
{
this.languageBinding = languageBinding;
}
public override ILanguageBinding LanguageBinding {
get { return languageBinding; }
}
}
}

Loading…
Cancel
Save