/* * Copyright (c) 2012, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.dart.engine.internal.index.operation; import com.google.dart.engine.EngineTestCase; import com.google.dart.engine.source.Source; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; public class OperationQueueTest extends EngineTestCase { public void test_dequeue() throws Exception { IndexOperation notQueryOperation = mock(IndexOperation.class); IndexOperation isQueryOperation = mock(IndexOperation.class); when(isQueryOperation.isQuery()).thenReturn(true); // enqueue 2 operations OperationQueue queue = new OperationQueue(); queue.enqueue(isQueryOperation); queue.enqueue(notQueryOperation); // do dequeue, first "notQuery" assertSame(notQueryOperation, queue.dequeue(0)); assertSame(isQueryOperation, queue.dequeue(0)); assertSame(null, queue.dequeue(0)); } public void test_dequeue_empty_hasTime() throws Exception { OperationQueue queue = new OperationQueue(); assertSame(null, queue.dequeue(1)); } public void test_dequeue_empty_noTime() throws Exception { OperationQueue queue = new OperationQueue(); assertSame(null, queue.dequeue(0)); assertSame(null, queue.dequeue(-1)); } public void test_enqueue_isQuery() throws Exception { IndexOperation notQueryOperation = mock(IndexOperation.class); IndexOperation isQueryOperation = mock(IndexOperation.class); when(isQueryOperation.isQuery()).thenReturn(true); // enqueue 2 operations OperationQueue queue = new OperationQueue(); queue.enqueue(isQueryOperation); queue.enqueue(notQueryOperation); // test operations - first notQuery List<IndexOperation> operations = queue.getOperations(); assertExactElementsInList(operations, notQueryOperation, isQueryOperation); } public void test_enqueue_removeSource() throws Exception { Source source = mock(Source.class); // prepare "notQuery" operations IndexOperation notQueryOperation = mock(IndexOperation.class); IndexOperation notQueryOperation_toRemove = mock(IndexOperation.class); when(notQueryOperation_toRemove.removeWhenSourceRemoved(source)).thenReturn(true); // prepare "isQuery" operations IndexOperation isQueryOperation = mock(IndexOperation.class); IndexOperation isQueryOperation_toRemove = mock(IndexOperation.class); when(isQueryOperation.isQuery()).thenReturn(true); when(isQueryOperation_toRemove.isQuery()).thenReturn(true); when(isQueryOperation_toRemove.removeWhenSourceRemoved(source)).thenReturn(true); // enqueue operations OperationQueue queue = new OperationQueue(); queue.enqueue(notQueryOperation); queue.enqueue(notQueryOperation_toRemove); queue.enqueue(isQueryOperation); queue.enqueue(isQueryOperation_toRemove); // test operations { List<IndexOperation> operations = queue.getOperations(); assertExactElementsInList( operations, notQueryOperation, notQueryOperation_toRemove, isQueryOperation, isQueryOperation_toRemove); } // enqueue "remove" RemoveSourceOperation removeOperation = mock(RemoveSourceOperation.class); when(removeOperation.getSource()).thenReturn(source); queue.enqueue(removeOperation); // test operations { List<IndexOperation> operations = queue.getOperations(); assertExactElementsInList(operations, notQueryOperation, removeOperation, isQueryOperation); } } public void test_new() throws Exception { OperationQueue queue = new OperationQueue(); assertEquals(0, queue.size()); assertSizeOfList(0, queue.getOperations()); } public void test_setProcessQueries() throws Exception { IndexOperation notQueryOperation = mock(IndexOperation.class); IndexOperation isQueryOperation = mock(IndexOperation.class); when(isQueryOperation.isQuery()).thenReturn(true); // enqueue 2 operations OperationQueue queue = new OperationQueue(); queue.enqueue(isQueryOperation); queue.enqueue(notQueryOperation); // no testing queue.setProcessQueries(false); queue.setProcessQueries(true); // disable queries, so no "isQueryOperation" queue.setProcessQueries(false); assertSame(notQueryOperation, queue.dequeue(0)); assertSame(null, queue.dequeue(0)); } }