public void BeginExecuteQueryPollingNotification()
        {
            MockRepository   mocks        = new MockRepository();
            IFeatureProvider adapted      = mocks.CreateMock <IFeatureProvider>();
            IExtents         iExtentsStub =
                MockRepository.GenerateStub <IExtents>();
            FeatureQueryExpression featureQueryExpressionStub =
                MockRepository.GenerateStub <FeatureQueryExpression>(iExtentsStub, SpatialOperation.Intersects);

            _returnReaderStub = MockRepository.GenerateStub <IFeatureDataReader>();
            _sleepInterval    = 1000;

            using (mocks.Unordered())
            {
                Expect.Call(adapted.ExecuteFeatureQuery(featureQueryExpressionStub))
                .Do(new ExecuteQueryDelegate(executeQueryMock));
            }
            mocks.ReplayAll();

            AsyncFeatureProviderAdapter adapter = new AsyncFeatureProviderAdapter(adapted);
            IAsyncResult ar = adapter.BeginExecuteQuery(featureQueryExpressionStub, null);

            Assert.NotNull(ar);
            Assert.False(ar.IsCompleted);
            while (!ar.IsCompleted)
            {
                Thread.Sleep(350);
            }

            Assert.True(ar.IsCompleted);
            Assert.Same(_returnReaderStub, adapter.EndExecuteQuery(ar));

            mocks.VerifyAll();
        }
        public void BeginExecuteQueryBlockUntilDone()
        {
            MockRepository   mocks        = new MockRepository();
            IFeatureProvider adapted      = mocks.CreateMock <IFeatureProvider>();
            IExtents         iExtentsStub =
                MockRepository.GenerateStub <IExtents>();
            FeatureQueryExpression featureQueryExpressionStub =
                MockRepository.GenerateStub <FeatureQueryExpression>(iExtentsStub, SpatialOperation.Intersects);

            _returnReaderStub = MockRepository.GenerateStub <IFeatureDataReader>();
            _sleepInterval    = 750;

            using (mocks.Unordered())
            {
                Expect.Call(adapted.ExecuteFeatureQuery(featureQueryExpressionStub))
                .Do(new ExecuteQueryDelegate(executeQueryMock));
            }
            mocks.ReplayAll();

            AsyncFeatureProviderAdapter adapter = new AsyncFeatureProviderAdapter(adapted);
            IAsyncResult ar = adapter.BeginExecuteQuery(featureQueryExpressionStub, null);

            Assert.NotNull(ar);

            Stopwatch timer = Stopwatch.StartNew();

            Assert.Same(_returnReaderStub, adapter.EndExecuteQuery(ar));
            timer.Stop();

            Assert.True(ar.IsCompleted);
            Assert.False(ar.CompletedSynchronously);
            Assert.True(timer.ElapsedMilliseconds > 500L);

            mocks.VerifyAll();
        }
        public void BeginExecuteQueryThrowsOnInvalidExpression()
        {
            MockRepository   mocks          = new MockRepository();
            IFeatureProvider adapted        = MockRepository.GenerateStub <IFeatureProvider>();
            Expression       expressionStub =
                MockRepository.GenerateStub <Expression>();

            AsyncFeatureProviderAdapter adapter = new AsyncFeatureProviderAdapter(adapted);

            Assert.Throws <ArgumentException>(delegate { adapter.BeginExecuteQuery(expressionStub, null); });
        }
        public void EndExecuteQueryThrowsTerminatingException()
        {
            MockRepository   mocks        = new MockRepository();
            IFeatureProvider adapted      = mocks.CreateMock <IFeatureProvider>();
            IExtents         iExtentsStub =
                MockRepository.GenerateStub <IExtents>();
            FeatureQueryExpression featureQueryExpressionStub =
                MockRepository.GenerateStub <FeatureQueryExpression>(iExtentsStub, SpatialOperation.Intersects);

            using (mocks.Unordered())
            {
                Expect.Call(adapted.ExecuteFeatureQuery(featureQueryExpressionStub))
                .Do(new ExecuteQueryDelegate(executeQueryExceptionMock));
            }
            mocks.ReplayAll();

            AsyncFeatureProviderAdapter adapter = new AsyncFeatureProviderAdapter(adapted);
            IAsyncResult ar = adapter.BeginExecuteQuery(featureQueryExpressionStub, null);

            Assert.NotNull(ar);

            Assert.Throws <InvalidOperationException>(delegate { adapter.EndExecuteQuery(ar); });
        }