Browse Source

Implement EnvDTE.Document.Saved

When T4MVC is configured to always keep its template unsaved then it uses Document.Saved to false each time it is run.
pull/28/head
Matt Ward 14 years ago
parent
commit
69ccf0af45
  1. 10
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Document.cs
  2. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  3. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  4. 3
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
  5. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs
  6. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  7. 59
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DocumentTests.cs
  8. 43
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs
  9. 13
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs

10
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Document.cs

@ -2,19 +2,23 @@ @@ -2,19 +2,23 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class Document
{
public Document(string fileName)
IViewContent view;
public Document(string fileName, IViewContent view)
{
this.FullName = fileName;
this.view = view;
}
public virtual bool Saved {
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
get { return !view.IsDirty; }
set { view.PrimaryFile.IsDirty = !value; }
}
public string FullName { get; private set; }

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

@ -5,8 +5,10 @@ using System; @@ -5,8 +5,10 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Build.Construction;
using SD = ICSharpCode.SharpDevelop.Project;
@ -290,9 +292,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -290,9 +292,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return null;
}
internal bool IsFileOpen(string fileName)
internal IViewContent GetOpenFile(string fileName)
{
return fileService.IsOpen(fileName);
return fileService.GetOpenFile(fileName);
}
}
}

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

@ -7,6 +7,7 @@ using System.IO; @@ -7,6 +7,7 @@ using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project;
@ -180,8 +181,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -180,8 +181,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
Document GetOpenDocument()
{
if (ContainingProject.IsFileOpen(FileName)) {
return new Document(FileName);
IViewContent view = ContainingProject.GetOpenFile(FileName);
if (view != null) {
return new Document(FileName, view);
}
return null;
}

3
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.PackageManagement
{
@ -10,8 +11,8 @@ namespace ICSharpCode.PackageManagement @@ -10,8 +11,8 @@ namespace ICSharpCode.PackageManagement
{
void RemoveFile(string path);
void RemoveDirectory(string path);
bool IsOpen(string fileName);
void OpenFile(string fileName);
IViewContent GetOpenFile(string fileName);
void CopyFile(string oldFileName, string newFileName);
bool FileExists(string fileName);
string[] GetFiles(string path);

6
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs

@ -41,12 +41,12 @@ namespace ICSharpCode.PackageManagement @@ -41,12 +41,12 @@ namespace ICSharpCode.PackageManagement
}
}
public bool IsOpen(string fileName)
public IViewContent GetOpenFile(string fileName)
{
if (WorkbenchSingleton.InvokeRequired) {
return WorkbenchSingleton.SafeThreadFunction(() => IsOpen(fileName));
return WorkbenchSingleton.SafeThreadFunction(() => GetOpenFile(fileName));
} else {
return FileService.IsOpen(fileName);
return FileService.GetOpenFile(fileName);
}
}

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

@ -95,6 +95,7 @@ @@ -95,6 +95,7 @@
<Compile Include="Src\EnvDTE\CodeTypeRef2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeTypeTests.cs" />
<Compile Include="Src\EnvDTE\CodeVariableTests.cs" />
<Compile Include="Src\EnvDTE\DocumentTests.cs" />
<Compile Include="Src\EnvDTE\EditPointTests.cs" />
<Compile Include="Src\EnvDTE\FileCodeModel2Tests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />

59
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DocumentTests.cs

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
// 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;
using ICSharpCode.SharpDevelop.Gui;
using NUnit.Framework;
using Rhino.Mocks;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class DocumentTests
{
IViewContent view;
Document document;
OpenedFile openedFile;
[SetUp]
public void Init()
{
openedFile = MockRepository.GenerateStub<OpenedFile>();
view = MockRepository.GenerateStub<IViewContent>();
view.Stub(v => v.PrimaryFile).Return(openedFile);
}
void CreateDocument(string fileName)
{
document = new Document(fileName, view);
}
void OpenFileIsDirty()
{
openedFile.IsDirty = true;
}
[Test]
public void Saved_SetToTrue_OpenFileIsDirtySetToFalse()
{
CreateDocument(@"d:\projects\MyProject\program.cs");
OpenFileIsDirty();
document.Saved = true;
Assert.IsFalse(openedFile.IsDirty);
}
[Test]
public void Saved_SetToFalse_OpenFileIsDirtySetToTrue()
{
CreateDocument(@"d:\projects\MyProject\program.cs");
document.Saved = false;
Assert.IsTrue(openedFile.IsDirty);
}
}
}

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

@ -29,9 +29,20 @@ namespace PackageManagement.Tests.EnvDTE @@ -29,9 +29,20 @@ namespace PackageManagement.Tests.EnvDTE
fakeFileService = project.FakeFileService;
}
void OpenFileInSharpDevelop(string fileName)
void OpenSavedFileInSharpDevelop(string fileName)
{
OpenFileInSharpDevelop(fileName, dirty: false);
}
void OpenUnsavedFileInSharpDevelop(string fileName)
{
OpenFileInSharpDevelop(fileName, dirty: true);
}
void OpenFileInSharpDevelop(string fileName, bool dirty)
{
IViewContent view = MockRepository.GenerateStub<IViewContent>();
view.Stub(v => v.IsDirty).Return(dirty);
fakeFileService.AddOpenView(view, fileName);
}
@ -260,11 +271,39 @@ namespace PackageManagement.Tests.EnvDTE @@ -260,11 +271,39 @@ namespace PackageManagement.Tests.EnvDTE
msbuildProject.AddFile(@"program.cs");
ProjectItem item = projectItems.Item("program.cs");
string projectItemFileName = @"d:\projects\MyProject\program.cs";
OpenFileInSharpDevelop(projectItemFileName);
OpenSavedFileInSharpDevelop(projectItemFileName);
Document document = item.Document;
Assert.AreEqual(projectItemFileName, document.FullName);
}
[Test]
public void Document_ProjectItemOpenInSharpDevelopAndIsSaved_ReturnsOpenDocumentThatIsSaved()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj";
msbuildProject.AddFile(@"program.cs");
ProjectItem item = projectItems.Item("program.cs");
OpenSavedFileInSharpDevelop(@"d:\projects\MyProject\program.cs");
Document document = item.Document;
Assert.IsTrue(document.Saved);
}
[Test]
public void Document_ProjectItemOpenInSharpDevelopAndIsUnsaved_ReturnsOpenDocumentThatIsNotSaved()
{
CreateProjectItems();
msbuildProject.FileName = @"d:\projects\MyProject\MyProject.csproj";
msbuildProject.AddFile(@"program.cs");
ProjectItem item = projectItems.Item("program.cs");
OpenUnsavedFileInSharpDevelop(@"d:\projects\MyProject\program.cs");
Document document = item.Document;
Assert.IsFalse(document.Saved);
}
}
}

13
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs

@ -126,16 +126,19 @@ namespace PackageManagement.Tests.Helpers @@ -126,16 +126,19 @@ namespace PackageManagement.Tests.Helpers
return CompilationUnitToReturnFromGetCompilationUnit;
}
public bool IsOpen(string fileName)
{
return openViews.ContainsKey(fileName);
}
Dictionary<string, IViewContent> openViews = new Dictionary<string, IViewContent>();
public void AddOpenView(IViewContent view, string fileName)
{
openViews.Add(fileName, view);
}
public IViewContent GetOpenFile(string fileName)
{
if (openViews.ContainsKey(fileName)) {
return openViews[fileName];
}
return null;
}
}
}

Loading…
Cancel
Save