예제 #1
0
        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);
        }
예제 #3
0
        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);
        }
예제 #7
0
        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();
            }
        }