public void AccessAcquiresResourceOnlyOnce() { var resource = new MockResource(); var handle = new SharedHandle <MockResource>(() => resource); handle.Access(); handle.Access(); Assert.AreEqual(1, resource.AcquireCalls); }
public void TokenDisposeDoesNotReleaseResourceIfTokensLeft() { var resource = new MockResource(); var handle = new SharedHandle <MockResource>(() => resource); var first = handle.Access(); var _ = handle.Access(); first.Dispose(); Assert.AreEqual(0, resource.ReleaseCalls); }
public void ResourceIsReacquiredAfterIsWasReleased() { var resource = new MockResource(); var handle = new SharedHandle <MockResource>(() => resource); //This acquires the resource var first = handle.Access(); //This releases the resource first.Dispose(); //This should now reacquire the resource first = handle.Access(); Assert.AreEqual(2, resource.AcquireCalls); }
public void ResourceAccessOnTokenThrowsIfTokenIsDisposed() { var handle = new SharedHandle <MockResource>(new MockResource()); var token = handle.Access(); token.Dispose(); Assert.Throws <ObjectDisposedException>(() => { var _ = token.Resource; }); }
public void AccessCreatesAndAcquiredResource() { var resource = new MockResource(); var handle = new SharedHandle <MockResource>(resource); var _ = handle.Access(); Assert.Multiple(() => { Assert.AreEqual(1, handle.Tokens); Assert.AreEqual(1, resource.AcquireCalls); }); }
public void LastTokenReleasesResource() { var resource = new MockResource(); var handle = new SharedHandle <MockResource>(resource); var token = handle.Access(); token.Dispose(); Assert.Multiple(() => { Assert.AreEqual(1, resource.ReleaseCalls); Assert.AreEqual(0, handle.Tokens); }); }