/* * 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; import com.google.dart.engine.EngineTestCase; import com.google.dart.engine.ast.CompilationUnit; import com.google.dart.engine.context.AnalysisContext; import com.google.dart.engine.element.CompilationUnitElement; import com.google.dart.engine.element.Element; import com.google.dart.engine.element.HtmlElement; import com.google.dart.engine.html.ast.HtmlUnit; import com.google.dart.engine.index.IndexStore; import com.google.dart.engine.index.Relationship; import com.google.dart.engine.index.RelationshipCallback; import com.google.dart.engine.internal.index.operation.GetRelationshipsOperation; import com.google.dart.engine.internal.index.operation.IndexHtmlUnitOperation; import com.google.dart.engine.internal.index.operation.IndexUnitOperation; import com.google.dart.engine.internal.index.operation.OperationProcessor; import com.google.dart.engine.internal.index.operation.OperationQueue; import com.google.dart.engine.internal.index.operation.RemoveContextOperation; import com.google.dart.engine.internal.index.operation.RemoveSourceOperation; import com.google.dart.engine.internal.index.operation.RemoveSourcesOperation; import com.google.dart.engine.source.Source; import com.google.dart.engine.source.SourceContainer; import org.mockito.ArgumentCaptor; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class IndexImplTest extends EngineTestCase { private AnalysisContext context = mock(AnalysisContext.class); private IndexStore store = mock(IndexStore.class); private OperationQueue queue = mock(OperationQueue.class); private OperationProcessor processor = mock(OperationProcessor.class); private IndexImpl index = new IndexImpl(store, queue, processor); public void test_getIndexStatistics() throws Exception { String stats = "40 relationships in 20 elements in 10 sources"; when(store.getStatistics()).thenReturn(stats); assertEquals(stats, index.getStatistics()); } public void test_getRelationships() throws Exception { Element element = mock(Element.class); Relationship relationship = Relationship.getRelationship("test-relationship"); RelationshipCallback callback = mock(RelationshipCallback.class); index.getRelationships(element, relationship, callback); // verify ArgumentCaptor<GetRelationshipsOperation> argument = ArgumentCaptor.forClass(GetRelationshipsOperation.class); verify(queue).enqueue(argument.capture()); assertSame(element, argument.getValue().getElement()); assertSame(relationship, argument.getValue().getRelationship()); assertSame(callback, argument.getValue().getCallback()); } public void test_indexHtmlUnit() throws Exception { Source unitSource = mock(Source.class); // Dart CompilationUnitElement CompilationUnitElement unitElement = mock(CompilationUnitElement.class); // HtmlElement HtmlElement htmlElement = mock(HtmlElement.class); when(htmlElement.getSource()).thenReturn(unitSource); when(htmlElement.getAngularCompilationUnit()).thenReturn(unitElement); // HtmlUnit HtmlUnit unit = mock(HtmlUnit.class); when(unit.getElement()).thenReturn(htmlElement); // call index index.indexHtmlUnit(context, unit); // verify ArgumentCaptor<IndexHtmlUnitOperation> argument = ArgumentCaptor.forClass(IndexHtmlUnitOperation.class); verify(queue).enqueue(argument.capture()); assertSame(unit, argument.getValue().getUnit()); } public void test_indexHtmlUnit_noHtmlElement() throws Exception { HtmlUnit unit = mock(HtmlUnit.class); index.indexHtmlUnit(context, unit); // verify verifyZeroInteractions(queue); } public void test_indexHtmlUnit_noUnitElement() throws Exception { HtmlUnit unit = mock(HtmlUnit.class); HtmlElement htmlElement = mock(HtmlElement.class); when(unit.getElement()).thenReturn(htmlElement); index.indexHtmlUnit(context, unit); // verify verifyZeroInteractions(queue); } public void test_indexHtmlUnit_null() throws Exception { index.indexHtmlUnit(context, null); // verify verifyZeroInteractions(queue); } public void test_indexUnit() throws Exception { Source unitSource = mock(Source.class); CompilationUnitElement unitElement = mock(CompilationUnitElement.class); CompilationUnit unit = mock(CompilationUnit.class); when(unit.getElement()).thenReturn(unitElement); when(unitElement.getSource()).thenReturn(unitSource); // call index index.indexUnit(context, unit); // verify ArgumentCaptor<IndexUnitOperation> argument = ArgumentCaptor.forClass(IndexUnitOperation.class); verify(queue).enqueue(argument.capture()); assertSame(unit, argument.getValue().getUnit()); } public void test_indexUnit_notResolved() throws Exception { CompilationUnit unit = mock(CompilationUnit.class); index.indexUnit(context, unit); // verify verifyZeroInteractions(queue); } public void test_indexUnit_null() throws Exception { index.indexUnit(context, null); // verify verifyZeroInteractions(queue); } public void test_removeContext() throws Exception { index.removeContext(context); // verify ArgumentCaptor<RemoveContextOperation> argument = ArgumentCaptor.forClass(RemoveContextOperation.class); verify(queue).enqueue(argument.capture()); assertSame(context, argument.getValue().getContext()); } public void test_removeSource() throws Exception { Source source = mock(Source.class); index.removeSource(context, source); // verify ArgumentCaptor<RemoveSourceOperation> argument = ArgumentCaptor.forClass(RemoveSourceOperation.class); verify(queue).enqueue(argument.capture()); assertSame(source, argument.getValue().getSource()); } public void test_removeSources() throws Exception { SourceContainer container = mock(SourceContainer.class); index.removeSources(context, container); // verify ArgumentCaptor<RemoveSourcesOperation> argument = ArgumentCaptor.forClass(RemoveSourcesOperation.class); verify(queue).enqueue(argument.capture()); assertSame(container, argument.getValue().getContainer()); } public void test_run() throws Exception { index.run(); verify(processor).run(); } public void test_stop() throws Exception { index.stop(); verify(processor).stop(false); } @Override protected void tearDown() throws Exception { context = null; store = null; queue = null; processor = null; index = null; super.tearDown(); } }