diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Document.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Document.cs
index 190567296b..68ca69601d 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Document.cs
+++ b/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)
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; }
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
index 0d879ef15b..5b2ae299cb 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
@@ -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
return null;
}
- internal bool IsFileOpen(string fileName)
+ internal IViewContent GetOpenFile(string fileName)
{
- return fileService.IsOpen(fileName);
+ return fileService.GetOpenFile(fileName);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
index 8dd6455b33..c06af27178 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
@@ -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
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;
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
index efce0ed11c..3dccaa8318 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
@@ -3,6 +3,7 @@
using System;
using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Gui;
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);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs
index b65fd8ddf9..902c0b7a5f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs
+++ b/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) {
- return WorkbenchSingleton.SafeThreadFunction(() => IsOpen(fileName));
+ return WorkbenchSingleton.SafeThreadFunction(() => GetOpenFile(fileName));
} else {
- return FileService.IsOpen(fileName);
+ return FileService.GetOpenFile(fileName);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index f23b019105..9ea4866e47 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -95,6 +95,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DocumentTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/DocumentTests.cs
new file mode 100644
index 0000000000..0e85ea4dc0
--- /dev/null
+++ b/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();
+ view = MockRepository.GenerateStub();
+ 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);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs
index 309d0e601f..d0251dc2cf 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs
@@ -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();
+ view.Stub(v => v.IsDirty).Return(dirty);
fakeFileService.AddOpenView(view, fileName);
}
@@ -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);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs
index 1ff7a6430c..13dd5ef64a 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFileService.cs
@@ -126,16 +126,19 @@ namespace PackageManagement.Tests.Helpers
return CompilationUnitToReturnFromGetCompilationUnit;
}
- public bool IsOpen(string fileName)
- {
- return openViews.ContainsKey(fileName);
- }
-
Dictionary openViews = new Dictionary();
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;
+ }
}
}