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

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

@ -5,8 +5,10 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using Microsoft.Build.Construction; using Microsoft.Build.Construction;
using SD = ICSharpCode.SharpDevelop.Project; using SD = ICSharpCode.SharpDevelop.Project;
@ -290,9 +292,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return null; 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;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project; using SD = ICSharpCode.SharpDevelop.Project;
@ -180,8 +181,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
Document GetOpenDocument() Document GetOpenDocument()
{ {
if (ContainingProject.IsFileOpen(FileName)) { IViewContent view = ContainingProject.GetOpenFile(FileName);
return new Document(FileName); if (view != null) {
return new Document(FileName, view);
} }
return null; return null;
} }

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

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

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

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

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

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

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

@ -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
fakeFileService = project.FakeFileService; 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>(); IViewContent view = MockRepository.GenerateStub<IViewContent>();
view.Stub(v => v.IsDirty).Return(dirty);
fakeFileService.AddOpenView(view, fileName); fakeFileService.AddOpenView(view, fileName);
} }
@ -260,11 +271,39 @@ namespace PackageManagement.Tests.EnvDTE
msbuildProject.AddFile(@"program.cs"); msbuildProject.AddFile(@"program.cs");
ProjectItem item = projectItems.Item("program.cs"); ProjectItem item = projectItems.Item("program.cs");
string projectItemFileName = @"d:\projects\MyProject\program.cs"; string projectItemFileName = @"d:\projects\MyProject\program.cs";
OpenFileInSharpDevelop(projectItemFileName); OpenSavedFileInSharpDevelop(projectItemFileName);
Document document = item.Document; Document document = item.Document;
Assert.AreEqual(projectItemFileName, document.FullName); 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
return CompilationUnitToReturnFromGetCompilationUnit; return CompilationUnitToReturnFromGetCompilationUnit;
} }
public bool IsOpen(string fileName)
{
return openViews.ContainsKey(fileName);
}
Dictionary<string, IViewContent> openViews = new Dictionary<string, IViewContent>(); Dictionary<string, IViewContent> openViews = new Dictionary<string, IViewContent>();
public void AddOpenView(IViewContent view, string fileName) public void AddOpenView(IViewContent view, string fileName)
{ {
openViews.Add(fileName, view); openViews.Add(fileName, view);
} }
public IViewContent GetOpenFile(string fileName)
{
if (openViews.ContainsKey(fileName)) {
return openViews[fileName];
}
return null;
}
} }
} }

Loading…
Cancel
Save