public void EnqueueTrySignalMethodShouldBeCalledWhenWaitingStackIsNotEmpty()
        {
            IWorkItemWaiterEntry      workItemWaiterEntry      = Substitute.For <IWorkItemWaiterEntry>();
            IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>();

            int count = 1;

            workItemWaiterEntryStack.Count.Returns(x => count);
            workItemWaiterEntryStack.Pop().Returns(
                x =>
            {
                if (count == 1)
                {
                    count = 0;
                    return(workItemWaiterEntry);
                }

                return(null);
            });

            WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack);

            IWorkItem workItem = Substitute.For <IWorkItem>();

            workItemQueue.Enqueue(workItem);

            workItemWaiterEntry.Received(1).TrySignal(workItem);
        }
Esempio n. 2
0
        /// <summary>
        /// Ýþ parçasý kuyruðu inþacý metodu.
        /// </summary>
        /// <param name="workItemWaiterTimeOutInMilliSeconds">Ýs parçasý bekleyen Thread için zaman aþýmý süresi.</param>
        /// <param name="workItemWaiterEntryStack">Ýþ parçasý bekleyici kaydý yýðýný.</param>
        internal WorkItemQueue(int workItemWaiterTimeOutInMilliSeconds, IWorkItemWaiterEntryStack workItemWaiterEntryStack)
        {
            if (workItemWaiterEntryStack == null)
            {
                throw new ArgumentNullException("workItemWaiterEntryStack");
            }

            m_WorkItemWaiterTimeOutInMilliSeconds = workItemWaiterTimeOutInMilliSeconds;

            m_WorkItemsQueue           = new Queue <IWorkItem>();
            m_WorkItemWaiterEntryStack = workItemWaiterEntryStack;
        }
        public void EnqueueTrySignalMethodShouldNotBeCalledWhenWaitingStackIsEmpty()
        {
            IWorkItemWaiterEntry      workItemWaiterEntry      = Substitute.For <IWorkItemWaiterEntry>();
            IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>();

            workItemWaiterEntryStack.Count.Returns(0);

            WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack);

            IWorkItem workItem = Substitute.For <IWorkItem>();

            workItemQueue.Enqueue(workItem);

            workItemWaiterEntry.DidNotReceiveWithAnyArgs().TrySignal(workItem);
        }
        public void EnqueueShouldNotAddWorkItemToQueueWhenWaiterIsSignaled()
        {
            IWorkItem workItem = Substitute.For <IWorkItem>();

            IWorkItemWaiterEntry workItemWaiterEntry = Substitute.For <IWorkItemWaiterEntry>();

            workItemWaiterEntry.TrySignal(workItem).Returns(true);

            IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>();

            workItemWaiterEntryStack.Count.Returns(1);
            workItemWaiterEntryStack.Pop().Returns(workItemWaiterEntry);

            WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack);

            workItemQueue.Enqueue(workItem);

            Assert.AreEqual(0, workItemQueue.Count);
        }
        public void EnqueueShouldAddWorkItemToQueueWhenAllWaitersTimedOut()
        {
            Stack <IWorkItemWaiterEntry> workItemWaiterEntries = new Stack <IWorkItemWaiterEntry>();

            workItemWaiterEntries.Push(CreateNotSignalableWorkItemWaiterEntry());
            workItemWaiterEntries.Push(CreateNotSignalableWorkItemWaiterEntry());

            IWorkItemWaiterEntryStack workItemWaiterEntryStack = Substitute.For <IWorkItemWaiterEntryStack>();

            workItemWaiterEntryStack.Count.Returns(x => workItemWaiterEntries.Count);
            workItemWaiterEntryStack.Pop().Returns(x => workItemWaiterEntries.Pop());

            WorkItemQueue workItemQueue = new WorkItemQueue(1 * 1000, workItemWaiterEntryStack);

            IWorkItem workItem = Substitute.For <IWorkItem>();

            workItemQueue.Enqueue(workItem);

            Assert.AreEqual(1, workItemQueue.Count);
        }
        /// <summary>
        /// Ýþ parçasý kuyruðu inþacý metodu.
        /// </summary>
        /// <param name="workItemWaiterTimeOutInMilliSeconds">Ýs parçasý bekleyen Thread için zaman aþýmý süresi.</param>
        /// <param name="workItemWaiterEntryStack">Ýþ parçasý bekleyici kaydý yýðýný.</param>
        internal WorkItemQueue(int workItemWaiterTimeOutInMilliSeconds, IWorkItemWaiterEntryStack workItemWaiterEntryStack)
        {
            if (workItemWaiterEntryStack == null)
            {
                throw new ArgumentNullException("workItemWaiterEntryStack");
            }

            m_WorkItemWaiterTimeOutInMilliSeconds = workItemWaiterTimeOutInMilliSeconds;

            m_WorkItemsQueue = new Queue<IWorkItem>();
            m_WorkItemWaiterEntryStack = workItemWaiterEntryStack;
        }