diff options
author | nulltoken <emeric.fermas@gmail.com> | 2014-05-22 23:27:11 +0400 |
---|---|---|
committer | nulltoken <emeric.fermas@gmail.com> | 2014-06-07 20:00:15 +0400 |
commit | ed3eda06c1ec31b52a3b85d5231ed8ebc72cc243 (patch) | |
tree | d91211fa3421a7464b0b65c18763869b71ca2fb3 /LibGit2Sharp.Tests | |
parent | 5dcf507e1d46cba72b2b329b20b050e4f5da3e72 (diff) |
Decorrelate IDisposable implementation from freeing of OdbBackend resources
Diffstat (limited to 'LibGit2Sharp.Tests')
-rw-r--r-- | LibGit2Sharp.Tests/OdbBackendFixture.cs | 42 |
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) |