public async Task DefaultOptionsYieldExpectedDictionarySize() { var eventCount = 0; var itemCount = 0; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor) ) .Adapt(new ForTestingPurposes()); await proxy.AsyncAction(0, "zero"); Thread.Sleep(1000); Assert.Equal(1, eventCount); Assert.Equal(BitFunctions.CountSet((int)CaptureOptions.Default), itemCount); void EventProcessor(IDictionary <string, object> @event) { eventCount++; itemCount = @event.Count; } }
public void MultipleInstancesYieldsSingleActualInvocationPerDistinctInvocation() { var instance1 = new ForTestingPurposes(); var instance2 = new ForTestingPurposes(); var adapter = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()); var proxy1 = adapter.Adapt(instance1); var proxy2 = adapter.Adapt(instance2); proxy1.MethodCall(0, "zero"); proxy1.MethodCall(0, "zero"); proxy1.MethodCall(1, "zero"); proxy1.MethodCall(1, "zero"); proxy1.MethodCall(2, "zero"); proxy1.MethodCall(2, "zero"); proxy2.MethodCall(0, "zero"); proxy2.MethodCall(0, "zero"); proxy2.MethodCall(1, "zero"); proxy2.MethodCall(1, "zero"); proxy2.MethodCall(2, "zero"); proxy2.MethodCall(2, "zero"); Assert.Equal <uint>(3, instance1.MethodCallInvocationCount); Assert.Equal <uint>(0, instance2.MethodCallInvocationCount); }
public async Task SerializedResultInvokedAsyncMethodResult() { var eventCount = 0; object serializedResult = null; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor), CaptureOptions.SerializedResult ) .Adapt(new ForTestingPurposes()); var result = await proxy.AsyncMethodCall(1, "one"); Thread.Sleep(1000); Assert.Equal(1, eventCount); Assert.Equal(result, JsonConvert.DeserializeObject((string)serializedResult)); void EventProcessor(IDictionary <string, object> @event) { eventCount++; serializedResult = @event[nameof(CaptureOptions.SerializedResult)]; } }
public async Task AsyncActionInvocationsAreNotCached() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance); await proxy.AsyncAction(0, 1, "two"); Assert.Equal <uint>(1, instance.AsyncActionCallInvocationCount); }
public void VoidReturnTypeInvocationsAreNotCached() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance); proxy.Member = "Test"; proxy.Member = "Test"; proxy.Member = "Test"; Assert.Equal <uint>(3, instance.MemberSetInvocationCount); }
public void MultipleDistinctCachedMemberInvocationsYieldsSingleActualInvocation() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance); _ = proxy.Member; _ = proxy.Member; _ = proxy.Member; Assert.Equal <uint>(1, instance.MemberGetInvocationCount); }
public void MultipleCachedInvocationsYieldsSingleActualInvocation() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()) .Adapt(instance); proxy.MethodCall(0, "zero"); proxy.MethodCall(0, "zero"); proxy.MethodCall(0, "zero"); Assert.Equal <uint>(1, instance.MethodCallInvocationCount); }
public async Task MultipleCachedAsyncInvocationsYieldsSingleInstanceInvocation() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()) .Adapt(instance); // ReSharper disable once NotAccessedVariable var result = await proxy.AsyncMethodCall(0, "zero"); Thread.Sleep(2000); // ReSharper disable once RedundantAssignment result = await proxy.AsyncMethodCall(0, "zero"); Assert.Equal <uint>(1, instance.AsyncMethodCallInvocationCount); }
public async Task ExpiredResultYieldsMultipleActualInvocations() { var instance = new ForTestingPurposes(); var proxy = new PerInstanceAdapter <IForTestingPurposes>(For.Milliseconds(0)) .Adapt(instance); // ReSharper disable once NotAccessedVariable // ReSharper disable once RedundantAssignment await proxy.AsyncMethodCall(0, "zero"); // I hate to have to do this, but otherwise the second // invocation may complete before the first invocation // is added to cache. Thread.Sleep(2000); await proxy.AsyncMethodCall(0, "zero"); Assert.Equal <uint>(2, instance.AsyncMethodCallInvocationCount); }
public void SerializedResultMatchesInvokedMethodResult() { var eventCount = 0; object serializedResult = null; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor), CaptureOptions.SerializedResult ) .Adapt(new ForTestingPurposes()); var result = proxy.MethodCall(0, "zero"); Assert.Equal(1, eventCount); Assert.Equal(result, JsonConvert.DeserializeObject((string)serializedResult)); void EventProcessor(IDictionary <string, object> @event) { eventCount++; serializedResult = @event[nameof(CaptureOptions.SerializedResult)]; } }
public void DeclaringTypeMatchesInvokedMethod() { var eventCount = 0; object typeName = null; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor), CaptureOptions.DeclaringTypeName ) .Adapt(new ForTestingPurposes()); proxy.MethodCall(0, "zero"); Assert.Equal(1, eventCount); Assert.Equal(typeof(ForTestingPurposes).FullName, typeName); void EventProcessor(IDictionary <string, object> @event) { eventCount++; typeName = @event[nameof(CaptureOptions.DeclaringTypeName)]; } }
public void SynchronousActionDoesNotAllowSerializedResultOption() { var eventCount = 0; var includesResult = true; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor), CaptureOptions.SerializedResult ) .Adapt(new ForTestingPurposes()); proxy.SynchronousAction(0, 1, "two"); Assert.Equal(1, eventCount); Assert.False(includesResult); void EventProcessor(IDictionary <string, object> @event) { eventCount++; includesResult = @event.ContainsKey(nameof(CaptureOptions.SerializedResult)); } }
public void SerializedParametersDoesNotThrowForPropertyGetter() { var eventCount = 0; object serializedInput = null; var proxy = new PerInstanceAdapter <IForTestingPurposes> ( Process.Lean(EventProcessor), CaptureOptions.SerializedInputParameters ) .Adapt(new ForTestingPurposes()); var _ = proxy.Member; Assert.Equal(1, eventCount); Assert.Equal("[]", serializedInput); void EventProcessor(IDictionary <string, object> @event) { eventCount++; serializedInput = @event[nameof(CaptureOptions.SerializedInputParameters)]; } }