Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2014-05-22 23:27:11 +0400
committernulltoken <emeric.fermas@gmail.com>2014-06-07 20:00:15 +0400
commited3eda06c1ec31b52a3b85d5231ed8ebc72cc243 (patch)
treed91211fa3421a7464b0b65c18763869b71ca2fb3 /LibGit2Sharp.Tests
parent5dcf507e1d46cba72b2b329b20b050e4f5da3e72 (diff)
Decorrelate IDisposable implementation from freeing of OdbBackend resources
Diffstat (limited to 'LibGit2Sharp.Tests')
-rw-r--r--LibGit2Sharp.Tests/OdbBackendFixture.cs42
1 files changed, 41 insertions, 1 deletions
diff --git a/LibGit2Sharp.Tests/OdbBackendFixture.cs b/LibGit2Sharp.Tests/OdbBackendFixture.cs
index db2e3785..9df69b08 100644
--- a/LibGit2Sharp.Tests/OdbBackendFixture.cs
+++ b/LibGit2Sharp.Tests/OdbBackendFixture.cs
@@ -221,10 +221,48 @@ namespace LibGit2Sharp.Tests
}
}
+ [Fact]
+ public void ADisposableOdbBackendGetsDisposedUponRepositoryDisposal()
+ {
+ string path = InitNewRepository();
+
+ int nbOfDisposeCalls = 0;
+
+ using (var repo = new Repository(path))
+ {
+ var mockOdbBackend = new MockOdbBackend(() => { nbOfDisposeCalls++; });
+
+ Assert.IsAssignableFrom<IDisposable>(mockOdbBackend);
+
+ repo.ObjectDatabase.AddBackend(mockOdbBackend, 5);
+
+ Assert.Equal(0, nbOfDisposeCalls);
+ }
+
+ Assert.Equal(1, nbOfDisposeCalls);
+ }
+
#region MockOdbBackend
- private class MockOdbBackend : OdbBackend
+ private class MockOdbBackend : OdbBackend, IDisposable
{
+ public MockOdbBackend(Action disposer = null)
+ {
+ this.disposer = disposer;
+ }
+
+ public void Dispose()
+ {
+ if (disposer == null)
+ {
+ return;
+ }
+
+ disposer();
+
+ disposer = null;
+ }
+
protected override OdbBackendOperations SupportedOperations
{
get
@@ -398,6 +436,8 @@ namespace LibGit2Sharp.Tests
private readonly Dictionary<ObjectId, MockGitObject> m_objectIdToContent =
new Dictionary<ObjectId, MockGitObject>();
+ private Action disposer;
+
#region Unimplemented
public override int ReadStream(ObjectId oid, out OdbBackendStream stream)