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

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

Issue 371913004: Version 1.5.6 (Closed) Base URL: http://dart.googlecode.com/svn/branches/1.5/
Patch Set: Created 6 years, 5 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: dart/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/file/FileNodeManagerTest.java
===================================================================
--- dart/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/file/FileNodeManagerTest.java (revision 0)
+++ dart/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/file/FileNodeManagerTest.java (revision 0)
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2014, 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.file;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.dart.engine.context.AnalysisContext;
+import com.google.dart.engine.element.Element;
+import com.google.dart.engine.index.Location;
+import com.google.dart.engine.index.Relationship;
+import com.google.dart.engine.utilities.logging.Logger;
+
+import junit.framework.TestCase;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+public class FileNodeManagerTest extends TestCase {
+ private FileManager fileManager = mock(FileManager.class);
+ private Logger logger = mock(Logger.class);
+ private AnalysisContext context = mock(AnalysisContext.class);
+ private int contextId = 13;
+ private ContextCodec contextCodec = mock(ContextCodec.class);
+ private StringCodec stringCodec = new StringCodec();
+ private ElementCodec elementCodec = mock(ElementCodec.class);
+ private int nextElementId = 0;
+ private RelationshipCodec relationshipCodec = new RelationshipCodec(stringCodec);
+ private FileNodeManager nodeManager = new FileNodeManager(
+ fileManager,
+ logger,
+ stringCodec,
+ contextCodec,
+ elementCodec,
+ relationshipCodec);
+
+ public void test_clear() throws Exception {
+ nodeManager.clear();
+ verify(fileManager, times(1)).clear();
+ }
+
+ public void test_getContextCodec() throws Exception {
+ assertSame(contextCodec, nodeManager.getContextCodec());
+ }
+
+ public void test_getElementCodec() throws Exception {
+ assertSame(elementCodec, nodeManager.getElementCodec());
+ }
+
+ public void test_getLocationCount_empty() throws Exception {
+ assertEquals(0, nodeManager.getLocationCount());
+ }
+
+ public void test_getNode_contextNull() throws Exception {
+ String name = "42.index";
+ // prepare output stream
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ when(fileManager.openOutputStream(name)).thenReturn(outputStream);
+ // put Node
+ {
+ IndexNode node = new IndexNode(context, elementCodec, relationshipCodec);
+ nodeManager.putNode(name, node);
+ }
+ // force "null" context
+ when(contextCodec.decode(contextId)).thenReturn(null);
+ // prepare input stream
+ InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+ when(fileManager.openInputStream(name)).thenReturn(inputStream);
+ // no Node
+ IndexNode node = nodeManager.getNode(name);
+ assertNull(node);
+ // no exceptions
+ verifyZeroInteractions(logger);
+ }
+
+ public void test_getNode_invalidVersion() throws Exception {
+ String name = "42.index";
+ // prepare a stream with an invalid version
+ when(fileManager.openInputStream(name)).thenReturn(
+ new ByteArrayInputStream(new byte[] {0x01, 0x02, 0x03, 0x04}));
+ // no Node
+ IndexNode node = nodeManager.getNode(name);
+ assertNull(node);
+ // failed
+ verify(logger).logError(anyString(), any(IllegalStateException.class));
+ }
+
+ public void test_getNode_streamException() throws Exception {
+ String name = "42.index";
+ when(fileManager.openInputStream(name)).thenThrow(new Exception());
+ // no Node
+ IndexNode node = nodeManager.getNode(name);
+ assertNull(node);
+ // failed
+ verify(logger).logError(anyString(), any(Throwable.class));
+ }
+
+ public void test_getNode_streamNull() throws Exception {
+ String name = "42.index";
+ when(fileManager.openInputStream(name)).thenReturn(null);
+ // no Node
+ IndexNode node = nodeManager.getNode(name);
+ assertNull(node);
+ }
+
+ public void test_getStringCodec() throws Exception {
+ assertSame(stringCodec, nodeManager.getStringCodec());
+ }
+
+ public void test_newNode() throws Exception {
+ IndexNode node = nodeManager.newNode(context);
+ assertSame(context, node.getContext());
+ assertEquals(0, node.getLocationCount());
+ }
+
+ public void test_putNode_getNode() throws Exception {
+ String name = "42.index";
+ // prepare output stream
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ when(fileManager.openOutputStream(name)).thenReturn(outputStream);
+ // prepare elements
+ Element elementA = mockElement();
+ Element elementB = mockElement();
+ Element elementC = mockElement();
+ Relationship relationship = Relationship.getRelationship("my-relationship");
+ // put Node
+ {
+ // prepare relations
+ int elementIdA = 0;
+ int elementIdB = 1;
+ int elementIdC = 2;
+ int relationshipId = relationshipCodec.encode(relationship);
+ RelationKeyData key = new RelationKeyData(elementIdA, relationshipId);
+ List<LocationData> locations = Lists.newArrayList(
+ new LocationData(elementIdB, 1, 10),
+ new LocationData(elementIdC, 2, 20));
+ Map<RelationKeyData, List<LocationData>> relations = ImmutableMap.of(key, locations);
+ // prepare Node
+ IndexNode node = new IndexNode(context, elementCodec, relationshipCodec);
+ node.setRelations(relations);
+ // put Node
+ nodeManager.putNode(name, node);
+ }
+ // has locations
+ assertEquals(2, nodeManager.getLocationCount());
+ // prepare input stream
+ InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+ when(fileManager.openInputStream(name)).thenReturn(inputStream);
+ // get Node
+ IndexNode node = nodeManager.getNode(name);
+ assertEquals(2, node.getLocationCount());
+ {
+ Location[] locations = node.getRelationships(elementA, relationship);
+ assertThat(locations).hasSize(2);
+ assertHasLocation(locations, elementB, 1, 10);
+ assertHasLocation(locations, elementC, 2, 20);
+ }
+ }
+
+ public void test_putNode_streamException() throws Exception {
+ String name = "42.index";
+ when(fileManager.openOutputStream(name)).thenThrow(new Exception());
+ // try to put
+ IndexNode node = mock(IndexNode.class);
+ nodeManager.putNode(name, node);
+ // failed
+ verify(logger).logError(anyString(), any(Throwable.class));
+ }
+
+ public void test_removeNode() throws Exception {
+ String name = "42.index";
+ nodeManager.removeNode(name);
+ verify(fileManager).delete(name);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ when(contextCodec.encode(context)).thenReturn(contextId);
+ when(contextCodec.decode(contextId)).thenReturn(context);
+ }
+
+ private void assertHasLocation(Location[] locations, Element element, int offset, int length) {
+ for (Location location : locations) {
+ if (Objects.equal(location.getElement(), element) && location.getOffset() == offset
+ && location.getLength() == length) {
+ return;
+ }
+ }
+ fail("Expected to find Location(element=" + element + ", offset=" + offset + ", length="
+ + length + ")");
+ }
+
+ private Element mockElement() {
+ int elementId = nextElementId++;
+ Element element = mock(Element.class);
+ when(elementCodec.encode(element)).thenReturn(elementId);
+ when(elementCodec.decode(context, elementId)).thenReturn(element);
+ return element;
+ }
+}
Property changes on: dart/editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/internal/index/file/FileNodeManagerTest.java
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698