public void Decorate_TxAction_Rollback_Test()
        {
            // Arrange
            TransactionDecorator target = new TransactionDecorator();
            ConnectionDecorator  cd     = new ConnectionDecorator();

            cd.DataSource = new TestDataSource();
            FieldInfo cdField = target.GetType().GetField(
                "_connectionDecorator", BindingFlags.NonPublic | BindingFlags.Instance);

            cdField.SetValue(target, cd);

            // Act/Assert
            TestUtils.ExecuteExcectedException <QuillException>(
                () => {
                target.Decorate(connection => {
                    throw new QuillException("TestException");
                });
            });

            // Assert
            Assert.IsFalse(TestTx.IsCalledCommit);
            Assert.IsTrue(TestTx.IsCalledDispose);
            Assert.IsTrue(TestTx.IsCalledRollbacked);
        }
        public void Decorate_TxFunc_Test()
        {
            // Arrange
            const int            EXPECTED = 12345;
            TransactionDecorator target   = new TransactionDecorator();
            ConnectionDecorator  cd       = new ConnectionDecorator();

            cd.DataSource = new TestDataSource();
            FieldInfo cdField = target.GetType().GetField(
                "_connectionDecorator", BindingFlags.NonPublic | BindingFlags.Instance);

            cdField.SetValue(target, cd);

            // Act/Assert
            var actual = target.Decorate(tx => {
                Assert.IsNotNull(tx);
                Assert.AreEqual(ConnectionState.Open, tx.Connection.State);
                return(EXPECTED);
            });

            // Assert
            Assert.AreEqual(EXPECTED, actual);
            Assert.IsTrue(TestTx.IsCalledCommit);
            Assert.IsTrue(TestTx.IsCalledDispose);
            Assert.IsFalse(TestTx.IsCalledRollbacked);
        }