Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/MemoryIndexStoreImplTest.java

Issue 11787017: Initial implementation of MemoryIndexStoreImpl and IndexContributor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update for review comments Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/MemoryIndexStoreImplTest.java
diff --git a/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/MemoryIndexStoreImplTest.java b/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/MemoryIndexStoreImplTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..46bcd06bb74366ed72959f9fe72cf71d5d128ab4
--- /dev/null
+++ b/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/MemoryIndexStoreImplTest.java
@@ -0,0 +1,188 @@
+/*
+ * 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.element.ElementLocation;
+import com.google.dart.engine.element.ElementProxy;
+import com.google.dart.engine.index.Location;
+import com.google.dart.engine.index.Relationship;
+import com.google.dart.engine.source.Source;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class MemoryIndexStoreImplTest extends EngineTestCase {
+ private MemoryIndexStoreImpl store = new MemoryIndexStoreImpl();
+ private ElementLocation elementLocationA = mock(ElementLocation.class);
+ private ElementLocation elementLocationB = mock(ElementLocation.class);
+ private ElementLocation elementLocationC = mock(ElementLocation.class);
+ private ElementProxy elementA = mock(ElementProxy.class);
+ private ElementProxy elementB = mock(ElementProxy.class);
+ private ElementProxy elementC = mock(ElementProxy.class);
+ private Source sourceA = mock(Source.class);
+ private Source sourceB = mock(Source.class);
+ private Source sourceC = mock(Source.class);
+ private Relationship relationship = Relationship.getRelationship("test-relationship");
+ private Location location = mock(Location.class);
+
+ public void test_clear() throws Exception {
+ store.recordRelationship(elementA, relationship, location);
+ assertEquals(1, store.getElementCount());
+ assertEquals(1, store.getRelationshipCount());
+ // clear
+ store.clear();
+ assertEquals(0, store.getElementCount());
+ assertEquals(0, store.getRelationshipCount());
+ }
+
+ public void test_getElementCount() throws Exception {
+ Relationship relationshipA = Relationship.getRelationship("test-A");
+ Relationship relationshipB = Relationship.getRelationship("test-B");
+ assertEquals(0, store.getElementCount());
+ // add for A
+ store.recordRelationship(elementA, relationshipA, location);
+ assertEquals(1, store.getElementCount());
+ // one more for A, still 1 element
+ store.recordRelationship(elementA, relationshipB, location);
+ assertEquals(1, store.getElementCount());
+ // add for B, now 2 elements
+ store.recordRelationship(elementB, relationshipA, location);
+ assertEquals(2, store.getElementCount());
+ }
+
+ public void test_getRelationships_hasOne() throws Exception {
+ store.recordRelationship(elementA, relationship, location);
+ Location[] locations = store.getRelationships(elementA, relationship);
+ assertThat(locations).containsOnly(location);
+ }
+
+ public void test_getRelationships_hasTwo() throws Exception {
+ Location locationA = mock(Location.class);
+ Location locationB = mock(Location.class);
+ when(locationA.getElement()).thenReturn(elementA);
+ when(locationB.getElement()).thenReturn(elementB);
+ store.recordRelationship(elementA, relationship, locationA);
+ store.recordRelationship(elementA, relationship, locationB);
+ Location[] locations = store.getRelationships(elementA, relationship);
+ assertThat(locations).containsOnly(locationA, locationB);
+ }
+
+ public void test_getRelationships_noRelations() throws Exception {
+ store.recordRelationship(elementA, relationship, location);
+ Location[] locations = store.getRelationships(
+ elementA,
+ Relationship.getRelationship("no-such-relationship"));
+ assertThat(locations).isEmpty();
+ }
+
+ public void test_getSourceCount() throws Exception {
+ Source sourceA = mock(Source.class);
+ Source sourceB = mock(Source.class);
+ Source sourceC = mock(Source.class);
+ // no relationships
+ assertEquals(0, store.getSourceCount());
+ // add relationship in "sourceA"
+ {
+ when(elementA.getSource()).thenReturn(sourceA);
+ Location location = mock(Location.class);
+ when(location.getElement()).thenReturn(elementA);
+ store.recordRelationship(elementA, relationship, location);
+ assertEquals(1, store.getSourceCount());
+ }
+ // add relationship in "sourceB" to "sourceC"
+ {
+ when(elementB.getSource()).thenReturn(sourceB);
+ when(elementC.getSource()).thenReturn(sourceC);
+ Location location = mock(Location.class);
+ when(location.getElement()).thenReturn(elementC);
+ store.recordRelationship(elementB, relationship, location);
+ assertEquals(3, store.getSourceCount());
+ }
+ }
+
+ public void test_recordRelationship() throws Exception {
+ // no relationships initially
+ assertEquals(0, store.getRelationshipCount());
+ // record relationship
+ store.recordRelationship(elementA, relationship, location);
+ assertEquals(1, store.getRelationshipCount());
+ }
+
+ public void test_recordRelationship_noElement() throws Exception {
+ store.recordRelationship(null, relationship, location);
+ assertEquals(0, store.getRelationshipCount());
+ }
+
+ public void test_recordRelationship_noLocation() throws Exception {
+ store.recordRelationship(elementA, relationship, null);
+ assertEquals(0, store.getRelationshipCount());
+ }
+
+ public void test_removeSource_withDeclaration() throws Exception {
+ when(elementA.getSource()).thenReturn(sourceA);
+ when(elementB.getSource()).thenReturn(sourceB);
+ when(elementC.getSource()).thenReturn(sourceC);
+ Location locationB = mock(Location.class);
+ Location locationC = mock(Location.class);
+ when(locationB.getElement()).thenReturn(elementB);
+ when(locationC.getElement()).thenReturn(elementC);
+ // record: [B -> A] and [C -> A]
+ {
+ store.recordRelationship(elementA, relationship, locationB);
+ store.recordRelationship(elementA, relationship, locationC);
+ assertEquals(2, store.getRelationshipCount());
+ Location[] locations = store.getRelationships(elementA, relationship);
+ assertThat(locations).containsOnly(locationB, locationC);
+ }
+ // remove A, no relations and locations
+ store.removeSource(sourceA);
+ assertEquals(0, store.getRelationshipCount());
+ assertEquals(0, store.getLocationCount());
+ }
+
+ public void test_removeSource_withRelationship() throws Exception {
+ when(elementA.getSource()).thenReturn(sourceA);
+ when(elementB.getSource()).thenReturn(sourceB);
+ when(elementC.getSource()).thenReturn(sourceC);
+ Location locationB = mock(Location.class);
+ Location locationC = mock(Location.class);
+ when(locationB.getElement()).thenReturn(elementB);
+ when(locationC.getElement()).thenReturn(elementC);
+ // record: [B -> A] and [C -> A]
+ {
+ store.recordRelationship(elementA, relationship, locationB);
+ store.recordRelationship(elementA, relationship, locationC);
+ assertEquals(2, store.getRelationshipCount());
+ Location[] locations = store.getRelationships(elementA, relationship);
+ assertThat(locations).containsOnly(locationB, locationC);
+ }
+ // remove B, 1 relation and 1 location left
+ store.removeSource(sourceB);
+ assertEquals(1, store.getRelationshipCount());
+ assertEquals(1, store.getLocationCount());
+ Location[] locations = store.getRelationships(elementA, relationship);
+ assertThat(locations).containsOnly(locationC);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ when(elementA.getLocation()).thenReturn(elementLocationA);
+ when(elementB.getLocation()).thenReturn(elementLocationB);
+ when(elementC.getLocation()).thenReturn(elementLocationC);
+ when(location.getElement()).thenReturn(elementC);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698