public async Task FastReflectionEvents() { var fastReflection = new FastReflection(); var testValue = new MockValue(); var action = new Action(() => { eventRaiseCount++; }); fastReflection.SubscribeEvent(testValue, nameof(MockValue.MockEventChanged), action); await Task.Delay(200); testValue.RaiseEvent(); await Task.Delay(200); fastReflection.Dispose(); await Task.Delay(200); testValue.RaiseEvent(); await Task.Delay(200); Assert.AreEqual(1, eventRaiseCount); }
public void TestLifeCycle_LastResult_Close() { Subscribe(); // Last result IValue value = new MockValue(); _dataSource.SetResult(value, DataSourceTestUtils.LAST); VerifySubscribers(DataSourceTestUtils.ON_NEW_RESULT); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value, DataSourceTestUtils.NOT_FAILED, null); // Close _dataSource.Close(); VerifySubscribers(DataSourceTestUtils.NO_INTERACTIONS); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITHOUT_RESULT, null, DataSourceTestUtils.NOT_FAILED, null); }
public void FastReflectionProperties() { var fastReflection = new FastReflection(); var testValue = new MockValue(); Assert.AreEqual(1, fastReflection.GetProperty(testValue, nameof(MockValue.Foo))); Assert.AreEqual(2, fastReflection.GetProperty(testValue, nameof(MockValue.Bar))); try { fastReflection.GetProperty(testValue, nameof(MockValue.Boo)); Assert.Fail(); } catch (MemberAccessException) { } catch { Assert.Fail(); } try { fastReflection.GetProperty(testValue, "Buzz"); Assert.Fail(); } catch (MemberAccessException) { } catch { Assert.Fail(); } testValue = new MockValue(); fastReflection.SetProperty(testValue, nameof(MockValue.Foo), 123); Assert.AreEqual(123, fastReflection.GetProperty(testValue, nameof(MockValue.Foo))); try { fastReflection.SetProperty(testValue, nameof(MockValue.Bar), 123); Assert.Fail(); } catch (MemberAccessException) { } catch { Assert.Fail(); } }
public void TestLifeCycle_AfterSuccess() { Subscribe(); // success IValue value = new MockValue(); _dataSource.SetResult(value, DataSourceTestUtils.LAST); VerifySubscribers(DataSourceTestUtils.ON_NEW_RESULT); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value, DataSourceTestUtils.NOT_FAILED, null); // try intermediate _dataSource.SetResult(new MockValue(), DataSourceTestUtils.INTERMEDIATE); VerifySubscribers(DataSourceTestUtils.NO_INTERACTIONS); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value, DataSourceTestUtils.NOT_FAILED, null); // try last _dataSource.SetResult(new MockValue(), DataSourceTestUtils.LAST); VerifySubscribers(DataSourceTestUtils.NO_INTERACTIONS); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value, DataSourceTestUtils.NOT_FAILED, null); // try failure _dataSource.SetFailure(new Exception()); VerifySubscribers(DataSourceTestUtils.NO_INTERACTIONS); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value, DataSourceTestUtils.NOT_FAILED, null); }
public void TestLifeCycle_IntermediateResult_Failure_Close() { Subscribe(); // intermediate result IValue value1 = new MockValue(); _dataSource.SetResult(value1, DataSourceTestUtils.INTERMEDIATE); VerifySubscribers(DataSourceTestUtils.ON_NEW_RESULT); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.NOT_FINISHED, DataSourceTestUtils.WITH_RESULT, value1, DataSourceTestUtils.NOT_FAILED, null); // failure Exception throwable = new Exception(); _dataSource.SetFailure(throwable); VerifySubscribers(DataSourceTestUtils.ON_FAILURE); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.NOT_CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITH_RESULT, value1, DataSourceTestUtils.FAILED, throwable); // close _dataSource.Close(); VerifySubscribers(DataSourceTestUtils.NO_INTERACTIONS); DataSourceTestUtils.VerifyState( _dataSource, DataSourceTestUtils.CLOSED, DataSourceTestUtils.FINISHED, DataSourceTestUtils.WITHOUT_RESULT, null, DataSourceTestUtils.FAILED, throwable); }
public void TestCloseResult() { IValue value1 = new MockValue(); _dataSource.SetResult(value1, false); IValue value2 = new MockValue(); _dataSource.SetResult(value2, false); Assert.IsTrue(((MockValue)value1).CloseCallCount == 1); Assert.IsTrue(((MockValue)value2).CloseCallCount == 0); IValue value3 = new MockValue(); _dataSource.SetResult(value3, false); Assert.IsTrue(((MockValue)value2).CloseCallCount == 1); Assert.IsTrue(((MockValue)value3).CloseCallCount == 0); _dataSource.Close(); Assert.IsTrue(((MockValue)value3).CloseCallCount == 1); }
public void FastReflectionMethods() { var fastReflection = new FastReflection(); var testValue = new MockValue(); Assert.IsNull(fastReflection.InvokeMethod(testValue, nameof(MockValue.VoidMethod))); fastReflection.InvokeMethod(testValue, nameof(MockValue.VoidMethod)); // Must call from the cache Assert.AreEqual(246, fastReflection.InvokeMethod(testValue, nameof(MockValue.ReturnMethod), 123)); try { fastReflection.InvokeMethod(testValue, nameof(MockValue.ReturnMethod), "Bad argument"); Assert.Fail(); } catch (TypeLoadException) { } catch { Assert.Fail(); } try { fastReflection.InvokeMethod(testValue, nameof(MockValue.ReturnMethod), "Bad argument", "Second bad argument"); Assert.Fail(); } catch (TypeLoadException) { } catch { Assert.Fail(); } }