Adding unit tests.
diff --git a/com.google.eclipse.protobuf.junit/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.junit/META-INF/MANIFEST.MF
index a1521b5..a2160b9 100644
--- a/com.google.eclipse.protobuf.junit/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf.junit/META-INF/MANIFEST.MF
@@ -21,7 +21,9 @@
com.google.inject;bundle-version="2.0.0",
org.eclipse.core.resources;bundle-version="3.7.100",
org.eclipse.core.jobs;bundle-version="3.5.100",
- org.eclipse.equinox.common;bundle-version="3.6.0"
+ org.eclipse.equinox.common;bundle-version="3.6.0",
+ org.eclipse.core.contenttype;bundle-version="3.4.100"
Export-Package: com.google.eclipse.protobuf.junit.core,
com.google.eclipse.protobuf.junit.matchers,
+ com.google.eclipse.protobuf.junit.stubs,
com.google.eclipse.protobuf.junit.util
diff --git a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java
index 22491f4..e6dcec0 100644
--- a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java
+++ b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java
@@ -8,6 +8,8 @@
*/
package com.google.eclipse.protobuf.junit.stubs;
+import static java.util.Collections.*;
+
import java.io.InputStream;
import java.io.Reader;
import java.net.URI;
@@ -15,14 +17,15 @@
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
/**
* @author alruiz@google.com (Alex Ruiz)
*/
-public abstract class FileStub implements IFile {
+public class FileStub implements IFile {
- private final Map<String, List<IMarker>> markersByType = new HashMap<String, List<IMarker>>();
+ private final Map<String, List<MarkerStub>> markersByType = new HashMap<String, List<MarkerStub>>();
/** {@inheritDoc} */
public void accept(IResourceProxyVisitor visitor, int memberFlags) throws CoreException {
@@ -45,6 +48,17 @@
}
/** {@inheritDoc} */
+ public void appendContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor)
+ throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void appendContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public void clearHistory(IProgressMonitor monitor) throws CoreException {
throw new UnsupportedOperationException();
}
@@ -75,14 +89,29 @@
}
/** {@inheritDoc} */
+ public void create(InputStream source, boolean force, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void create(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void createLink(URI location, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public IMarker createMarker(String type) throws CoreException {
MarkerStub marker = new MarkerStub(type);
- List<IMarker> markers = markersByType.get(type);
- if (markers == null) {
- markers = new ArrayList<IMarker>();
- markersByType.put(type, markers);
- }
- markers.add(marker);
+ addMarker(marker);
return marker;
}
@@ -92,6 +121,11 @@
}
/** {@inheritDoc} */
+ public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public void delete(boolean force, IProgressMonitor monitor) throws CoreException {
throw new UnsupportedOperationException();
}
@@ -103,7 +137,7 @@
/** {@inheritDoc} */
public void deleteMarkers(String type, boolean includeSubtypes, int depth) throws CoreException {
- List<IMarker> markers = markersByType.get(type);
+ List<MarkerStub> markers = markersByType.get(type);
if (markers != null) markers.clear();
}
@@ -119,7 +153,7 @@
/** {@inheritDoc} */
public IMarker[] findMarkers(String type, boolean includeSubtypes, int depth) throws CoreException {
- List<IMarker> markers = markersByType.get(type);
+ List<MarkerStub> markers = markersByType.get(type);
if (markers == null) return new IMarker[0];
return markers.toArray(new IMarker[markers.size()]);
}
@@ -135,11 +169,56 @@
}
/** {@inheritDoc} */
+ public String getCharset() throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public String getCharset(boolean checkImplicit) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public String getCharsetFor(Reader reader) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public IContentDescription getContentDescription() throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public InputStream getContents() throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public InputStream getContents(boolean force) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public int getEncoding() throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public String getFileExtension() {
throw new UnsupportedOperationException();
}
/** {@inheritDoc} */
+ public IPath getFullPath() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public IFileState[] getHistory(IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public long getLocalTimeStamp() {
throw new UnsupportedOperationException();
}
@@ -165,7 +244,7 @@
}
/** {@inheritDoc} */
- public IPathVariableManager getPathVariableManager() {
+ public String getName() {
throw new UnsupportedOperationException();
}
@@ -175,6 +254,11 @@
}
/** {@inheritDoc} */
+ public IPathVariableManager getPathVariableManager() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public Map<QualifiedName, String> getPersistentProperties() throws CoreException {
throw new UnsupportedOperationException();
}
@@ -265,11 +349,6 @@
}
/** {@inheritDoc} */
- public boolean isVirtual() {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
public boolean isLinked(int options) {
throw new UnsupportedOperationException();
}
@@ -285,6 +364,11 @@
}
/** {@inheritDoc} */
+ public boolean isReadOnly() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public boolean isSynchronized(int depth) {
throw new UnsupportedOperationException();
}
@@ -300,6 +384,17 @@
}
/** {@inheritDoc} */
+ public boolean isVirtual() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor)
+ throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public void move(IPath destination, boolean force, IProgressMonitor monitor) throws CoreException {
throw new UnsupportedOperationException();
}
@@ -331,6 +426,38 @@
}
/** {@inheritDoc} */
+ public void setCharset(String newCharset) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void setCharset(String newCharset, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void setContents(IFileState source, boolean force, boolean keepHistory, IProgressMonitor monitor)
+ throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void setContents(IFileState source, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void setContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor)
+ throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
public void setDerived(boolean isDerived) throws CoreException {
throw new UnsupportedOperationException();
}
@@ -385,127 +512,24 @@
throw new UnsupportedOperationException();
}
- /** {@inheritDoc} */
- public void appendContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor)
- throws CoreException {
- throw new UnsupportedOperationException();
+ public int markerCount(String type) {
+ List<MarkerStub> markers = markersByType.get(type);
+ return (markers == null) ? 0 : markers.size();
+ }
+
+ public List<MarkerStub> markers(String type) {
+ List<MarkerStub> markers = markersByType.get(type);
+ if (markers == null) return emptyList();
+ return unmodifiableList(markers);
}
- /** {@inheritDoc} */
- public void appendContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void create(InputStream source, boolean force, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void create(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void createLink(URI location, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public String getCharset() throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public String getCharset(boolean checkImplicit) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public String getCharsetFor(Reader reader) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public InputStream getContents() throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public InputStream getContents(boolean force) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public int getEncoding() throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public IPath getFullPath() {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public IFileState[] getHistory(IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public String getName() {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public boolean isReadOnly() {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor)
- throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setCharset(String newCharset) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setCharset(String newCharset, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor)
- throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setContents(IFileState source, boolean force, boolean keepHistory, IProgressMonitor monitor)
- throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
- /** {@inheritDoc} */
- public void setContents(IFileState source, int updateFlags, IProgressMonitor monitor) throws CoreException {
- throw new UnsupportedOperationException();
+ public void addMarker(MarkerStub marker) throws CoreException {
+ String type = marker.getType();
+ List<MarkerStub> markers = markersByType.get(type);
+ if (markers == null) {
+ markers = new ArrayList<MarkerStub>();
+ markersByType.put(type, markers);
+ }
+ markers.add(marker);
}
}
diff --git a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java
index 0578871..4312479 100644
--- a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java
+++ b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java
@@ -1,9 +1,6 @@
/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
+ * Copyright (c) 2011 Google Inc. All rights reserved. This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.google.eclipse.protobuf.junit.stubs;
@@ -25,6 +22,14 @@
private final String type;
private final long creationTime;
+ public static MarkerStub error(String type, String description, int lineNumber) throws CoreException {
+ MarkerStub marker = new MarkerStub(type);
+ marker.setAttribute(SEVERITY, SEVERITY_ERROR);
+ marker.setAttribute(MESSAGE, description);
+ marker.setAttribute(LINE_NUMBER, lineNumber);
+ return marker;
+ }
+
public MarkerStub(String type) {
this.type = type;
creationTime = System.currentTimeMillis();
@@ -79,7 +84,8 @@
/** {@inheritDoc} */
public Object[] getAttributes(String[] attributeNames) throws CoreException {
List<Object> values = new ArrayList<Object>();
- for (String name : attributeNames) values.add(attributes.get(name));
+ for (String name : attributeNames)
+ values.add(attributes.get(name));
return values.toArray();
}
@@ -132,4 +138,16 @@
public void setAttributes(Map<String, ? extends Object> attributes) throws CoreException {
this.attributes.putAll(attributes);
}
+
+ public int severity() throws CoreException {
+ return getAttribute(SEVERITY, -1);
+ }
+
+ public String message() throws CoreException {
+ return (String) getAttribute(MESSAGE);
+ }
+
+ public int lineNumber() throws CoreException {
+ return getAttribute(LINE_NUMBER, -1);
+ }
}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory_createErrorIfNecessary_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory_createErrorIfNecessary_Test.java
new file mode 100644
index 0000000..c88b35c
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory_createErrorIfNecessary_Test.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.builder;
+
+import static com.google.eclipse.protobuf.junit.stubs.MarkerStub.error;
+import static org.eclipse.core.resources.IMarker.SEVERITY_ERROR;
+import static org.eclipse.xtext.ui.MarkerTypes.FAST_VALIDATION;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.eclipse.protobuf.junit.stubs.FileStub;
+import com.google.eclipse.protobuf.junit.stubs.MarkerStub;
+
+/**
+ * Tests for <code>{@link ProtocMarkerFactory#createErrorIfNecessary(String, int)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtocMarkerFactory_createErrorIfNecessary_Test {
+
+ private static final String PROTOC = "com.google.eclipse.protobuf.ui.protocMarker";
+
+ private FileStub file;
+ private MarkerStub fastValidationMarker;
+ private ProtocMarkerFactory markerFactory;
+
+ @Before public void setUp() throws CoreException {
+ file = new FileStub();
+ file.createMarker(PROTOC);
+ assertThat(file.markerCount(PROTOC), equalTo(1));
+ fastValidationMarker = error(FAST_VALIDATION, "Expected field name.", 68);
+ file.addMarker(fastValidationMarker);
+ markerFactory = new ProtocMarkerFactory(file);
+ assertThat(file.markerCount(PROTOC), equalTo(0));
+ }
+
+ @Test public void should_create_marker_if_a_similar_one_does_not_exist() throws CoreException {
+ String message = "File not found.";
+ int lineNumber = 8;
+ markerFactory.createErrorIfNecessary(message, lineNumber);
+ List<MarkerStub> markers = file.markers(PROTOC);
+ assertThat(markers.size(), equalTo(1));
+ MarkerStub marker = markers.get(0);
+ assertThat(marker.severity(), equalTo(SEVERITY_ERROR));
+ assertThat(marker.message(), equalTo(message));
+ assertThat(marker.lineNumber(), equalTo(lineNumber));
+ }
+
+ @Test public void should_not_create_marker_if_a_similar_one_exists() throws CoreException {
+ markerFactory.createErrorIfNecessary(fastValidationMarker.message(), fastValidationMarker.lineNumber());
+ assertThat(file.markerCount(PROTOC), equalTo(0));
+ }
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser_parseAndAddMarkerIfNecessary_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser_parseAndAddMarkerIfNecessary_Test.java
index 5a37962..58d02ea 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser_parseAndAddMarkerIfNecessary_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser_parseAndAddMarkerIfNecessary_Test.java
@@ -36,8 +36,8 @@
}
@Test public void should_attempt_to_create_IMarker_if_line_matches_error_pattern() throws CoreException {
- String line = "test.proto:23:21: Expected field name";
+ String line = "test.proto:23:21: Expected field name.";
outputParser.parseAndAddMarkerIfNecessary(line, markerFactory);
- verify(markerFactory).createErrorIfNecessary("Expected field name", 23);
+ verify(markerFactory).createErrorIfNecessary("Expected field name.", 23);
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory.java
index f62fd06..a1eb6c9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocMarkerFactory.java
@@ -23,7 +23,7 @@
*/
class ProtocMarkerFactory {
- static final String PROTOC = "com.google.eclipse.protobuf.ui.protocMarker";
+ private static final String PROTOC = "com.google.eclipse.protobuf.ui.protocMarker";
private final IFile file;
private final IMarker[] markers;
@@ -34,11 +34,11 @@
markers = file.findMarkers(FAST_VALIDATION, true, DEPTH_INFINITE);
}
- void createErrorIfNecessary(String description, int lineNumber) throws CoreException {
- if (containsMarker(description, lineNumber)) return;
+ void createErrorIfNecessary(String message, int lineNumber) throws CoreException {
+ if (containsMarker(message, lineNumber)) return;
IMarker marker = file.createMarker(PROTOC);
marker.setAttribute(SEVERITY, SEVERITY_ERROR);
- marker.setAttribute(MESSAGE, description);
+ marker.setAttribute(MESSAGE, message);
marker.setAttribute(LINE_NUMBER, lineNumber);
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser.java
index f7ba1c6..d4822a2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/ProtocOutputParser.java
@@ -38,7 +38,7 @@
Matcher errorMatcher = ERROR_PATTERN.matcher(line);
if (!errorMatcher.matches()) return;
int lineNumber = parseInt(errorMatcher.group(2));
- String description = errorMatcher.group(4);
- markerFactory.createErrorIfNecessary(description, lineNumber);
+ String message = errorMatcher.group(4);
+ markerFactory.createErrorIfNecessary(message, lineNumber);
}
}