Cleaning up project structure.
diff --git a/com.google.eclipse.protobuf.test/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.test/META-INF/MANIFEST.MF index 646fe3f..a9b6101 100644 --- a/com.google.eclipse.protobuf.test/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf.test/META-INF/MANIFEST.MF
@@ -9,6 +9,10 @@ org.junit.source;bundle-version="4.8.1", org.eclipse.xtext.junit;bundle-version="2.0.0", org.eclipse.xtext.junit4;bundle-version="2.0.0", - com.google.eclipse.protobuf.junit;bundle-version="1.0.0", - org.mockito;bundle-version="1.8.5" + org.mockito;bundle-version="1.8.5", + org.eclipse.core.resources;bundle-version="3.7.100" Bundle-RequiredExecutionEnvironment: J2SE-1.5 +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.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java new file mode 100644 index 0000000..b130379 --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/core/XtextRule.java
@@ -0,0 +1,96 @@ +/* + * 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.core; + +import static org.eclipse.emf.common.util.URI.createURI; +import static org.eclipse.emf.ecore.util.EcoreUtil.resolveAll; +import static org.eclipse.xtext.util.CancelIndicator.NullImpl; + +import java.io.*; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.xtext.linking.lazy.LazyLinkingResource; +import org.eclipse.xtext.resource.*; +import org.eclipse.xtext.util.StringInputStream; +import org.junit.rules.MethodRule; +import org.junit.runners.model.*; + +import com.google.eclipse.protobuf.ProtobufStandaloneSetup; +import com.google.eclipse.protobuf.protobuf.Protobuf; +import com.google.inject.Injector; + +/** + * Rule that performs configuration of a standalone Xtext environment. + * + * @author alruiz@google.com (Alex Ruiz) + */ +public class XtextRule implements MethodRule { + + private Injector injector; + + public Statement apply(Statement base, FrameworkMethod method, Object target) { + return new XtextStatement(base); + } + + public Injector injector() { + return injector; + } + + public Protobuf parse(StringBuilder text) { + return parse(text.toString()); + } + + public Protobuf parse(String text) { + XtextResource resource = resourceFrom(new StringInputStream(text)); + return (Protobuf) resource.getParseResult().getRootASTElement(); + } + + private XtextResource resourceFrom(InputStream input) { + return resourceFrom(input, createURI("mytestmodel.proto")); //$NON-NLS-1$ + } + + private XtextResource resourceFrom(InputStream input, URI uri) { + XtextResourceSet set = getInstanceOf(XtextResourceSet.class); + set.setClasspathURIContext(getClass()); + XtextResource resource = (XtextResource) getInstanceOf(IResourceFactory.class).createResource(uri); + set.getResources().add(resource); + try { + resource.load(input, null); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (resource instanceof LazyLinkingResource) { + ((LazyLinkingResource) resource).resolveLazyCrossReferences(NullImpl); + return resource; + } + resolveAll(resource); + return resource; + } + + public <T> T getInstanceOf(Class<T> type) { + return injector.getInstance(type); + } + + private class XtextStatement extends Statement { + private final Statement base; + + public XtextStatement(Statement base) { + this.base = base; + } + + @Override public void evaluate() throws Throwable { + setUpInjector(); + base.evaluate(); + } + + private void setUpInjector() { + injector = new ProtobufStandaloneSetup().createInjectorAndDoEMFRegistration(); + } + } +}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java new file mode 100644 index 0000000..57cd397 --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/EnumHasLiterals.java
@@ -0,0 +1,53 @@ +/* + * 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.matchers; + +import java.util.*; + +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +import com.google.eclipse.protobuf.protobuf.Enum; +import com.google.eclipse.protobuf.protobuf.Literal; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public class EnumHasLiterals extends BaseMatcher<Enum> { + + private final String[] literalNames; + + public static EnumHasLiterals hasLiterals(String... literalNames) { + return new EnumHasLiterals(literalNames); + } + + private EnumHasLiterals(String... literalNames) { + this.literalNames = literalNames; + } + + /** {@inheritDoc} */ + public boolean matches(Object arg) { + if (!(arg instanceof Enum)) return false; + Enum anEnum = (Enum) arg; + List<String> actualNames = literalNames(anEnum); + for (String name : literalNames) actualNames.remove(name); + return actualNames.isEmpty(); + } + + private List<String> literalNames(Enum anEnum) { + List<String> names = new ArrayList<String>(); + for (Literal literal : anEnum.getLiterals()) names.add(literal.getName()); + return names; + } + + /** {@inheritDoc} */ + public void describeTo(Description description) { + description.appendValue(Arrays.toString(literalNames)); + } +}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java new file mode 100644 index 0000000..1a4464b --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/matchers/PropertyHasType.java
@@ -0,0 +1,52 @@ +/* + * 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.matchers; + +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +import com.google.eclipse.protobuf.protobuf.*; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public class PropertyHasType extends BaseMatcher<Property> { + + private final String typeName; + + public static PropertyHasType hasType(String typeName) { + return new PropertyHasType(typeName); + } + + private PropertyHasType(String typeName) { + this.typeName = typeName; + } + + /** {@inheritDoc} */ + public boolean matches(Object arg) { + if (!(arg instanceof Property)) return false; + Property property = (Property) arg; + return typeName.equals(typeNameOf(property)); + } + + private String typeNameOf(Property property) { + AbstractTypeReference r = property.getType(); + if (r instanceof ScalarTypeReference) return ((ScalarTypeReference) r).getScalar().getName(); + if (r instanceof TypeReference) { + Type type = ((TypeReference) r).getType(); + return type == null ? null : type.getName(); + } + return r.toString(); + } + + /** {@inheritDoc} */ + public void describeTo(Description description) { + description.appendValue(typeName); + } +}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java new file mode 100644 index 0000000..d3b036d --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/FileStub.java
@@ -0,0 +1,535 @@ +/* + * 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; + +import static java.util.Collections.*; + +import java.io.InputStream; +import java.io.Reader; +import java.net.URI; +import java.util.*; + +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 class FileStub implements IFile { + + private final Map<String, List<MarkerStub>> markersByType = new HashMap<String, List<MarkerStub>>(); + + /** {@inheritDoc} */ + public void accept(IResourceProxyVisitor visitor, int memberFlags) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void accept(IResourceVisitor visitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void accept(IResourceVisitor visitor, int depth, boolean includePhantoms) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void accept(IResourceVisitor visitor, int depth, int memberFlags) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void appendContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) + { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void appendContents(InputStream source, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void clearHistory(IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean contains(ISchedulingRule rule) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void copy(IPath destination, boolean force, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void copy(IPath destination, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void copy(IProjectDescription description, boolean force, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void copy(IProjectDescription description, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void create(InputStream source, boolean force, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void create(InputStream source, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void createLink(IPath localLocation, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void createLink(URI location, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IMarker createMarker(String type) { + MarkerStub marker = new MarkerStub(type); + addMarker(marker); + return marker; + } + + /** {@inheritDoc} */ + public IResourceProxy createProxy() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void delete(boolean force, boolean keepHistory, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void delete(boolean force, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void delete(int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void deleteMarkers(String type, boolean includeSubtypes, int depth) { + List<MarkerStub> markers = markersByType.get(type); + if (markers != null) markers.clear(); + } + + /** {@inheritDoc} */ + public boolean exists() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IMarker findMarker(long id) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IMarker[] findMarkers(String type, boolean includeSubtypes, int depth) { + List<MarkerStub> markers = markersByType.get(type); + if (markers == null) return new IMarker[0]; + return markers.toArray(new IMarker[markers.size()]); + } + + /** {@inheritDoc} */ + public int findMaxProblemSeverity(String type, boolean includeSubtypes, int depth) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @SuppressWarnings("rawtypes") public Object getAdapter(Class adapter) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getCharset() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getCharset(boolean checkImplicit) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getCharsetFor(Reader reader) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IContentDescription getContentDescription() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public InputStream getContents() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public InputStream getContents(boolean force) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public int getEncoding() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getFileExtension() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IPath getFullPath() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IFileState[] getHistory(IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public long getLocalTimeStamp() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IPath getLocation() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public URI getLocationURI() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IMarker getMarker(long id) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public long getModificationStamp() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getName() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IContainer getParent() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IPathVariableManager getPathVariableManager() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public Map<QualifiedName, String> getPersistentProperties() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getPersistentProperty(QualifiedName key) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IProject getProject() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IPath getProjectRelativePath() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IPath getRawLocation() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public URI getRawLocationURI() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public ResourceAttributes getResourceAttributes() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public Map<QualifiedName, Object> getSessionProperties() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public Object getSessionProperty(QualifiedName key) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public int getType() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IWorkspace getWorkspace() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isAccessible() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isConflicting(ISchedulingRule rule) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isDerived() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isDerived(int options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isHidden() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isHidden(int options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isLinked() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isLinked(int options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public boolean isLocal(int depth) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isPhantom() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isReadOnly() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isSynchronized(int depth) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isTeamPrivateMember() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isTeamPrivateMember(int options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isVirtual() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void move(IPath destination, boolean force, boolean keepHistory, IProgressMonitor monitor) + { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void move(IPath destination, boolean force, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void move(IPath destination, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void move(IProjectDescription description, boolean force, boolean keepHistory, IProgressMonitor monitor) + { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void move(IProjectDescription description, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void refreshLocal(int depth, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void revertModificationStamp(long value) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public void setCharset(String newCharset) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setCharset(String newCharset, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setContents(IFileState source, boolean force, boolean keepHistory, IProgressMonitor monitor) + { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setContents(IFileState source, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setContents(InputStream source, boolean force, boolean keepHistory, IProgressMonitor monitor) + { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setContents(InputStream source, int updateFlags, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public void setDerived(boolean isDerived) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setDerived(boolean isDerived, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setHidden(boolean isHidden) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public void setLocal(boolean flag, int depth, IProgressMonitor monitor) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public long setLocalTimeStamp(long value) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setPersistentProperty(QualifiedName key, String value) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Deprecated public void setReadOnly(boolean readOnly) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setResourceAttributes(ResourceAttributes attributes) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setSessionProperty(QualifiedName key, Object value) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setTeamPrivateMember(boolean isTeamPrivate) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void touch(IProgressMonitor monitor) { + 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); + } + + public void addMarker(MarkerStub marker) { + 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.test/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java new file mode 100644 index 0000000..8386a8a --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/MarkerStub.java
@@ -0,0 +1,181 @@ +/* + * 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; + +import static java.util.Collections.unmodifiableMap; + +import java.util.*; + +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public class MarkerStub implements IMarker { + + private final Map<String, Object> attributes = new HashMap<String, Object>(); + private final String type; + private final long creationTime; + + public static MarkerStub error(String type, String description, int lineNumber) { + 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(); + } + + /** {@inheritDoc} */ + @SuppressWarnings("rawtypes") public Object getAdapter(Class adapter) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void delete() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean exists() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public Object getAttribute(String attributeName) { + return attributes.get(attributeName); + } + + /** {@inheritDoc} */ + public int getAttribute(String attributeName, int defaultValue) { + Object attribute = attributes.get(attributeName); + if (attribute instanceof Integer) return (Integer) attribute; + return defaultValue; + } + + /** {@inheritDoc} */ + public String getAttribute(String attributeName, String defaultValue) { + Object attribute = attributes.get(attributeName); + if (attribute instanceof String) return (String) attribute; + return defaultValue; + } + + /** {@inheritDoc} */ + public boolean getAttribute(String attributeName, boolean defaultValue) { + Object attribute = attributes.get(attributeName); + if (attribute instanceof Boolean) return (Boolean) attribute; + return defaultValue; + } + + /** {@inheritDoc} */ + public Map<String, Object> getAttributes() { + return unmodifiableMap(attributes); + } + + /** {@inheritDoc} */ + public Object[] getAttributes(String[] attributeNames) { + List<Object> values = new ArrayList<Object>(); + for (String name : attributeNames) + values.add(attributes.get(name)); + return values.toArray(); + } + + /** {@inheritDoc} */ + public long getCreationTime() { + return creationTime; + } + + /** {@inheritDoc} */ + public long getId() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public IResource getResource() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getType() { + return type; + } + + /** {@inheritDoc} */ + public boolean isSubtypeOf(String superType) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setAttribute(String attributeName, int value) { + attributes.put(attributeName, value); + } + + /** {@inheritDoc} */ + public void setAttribute(String attributeName, Object value) { + attributes.put(attributeName, value); + } + + /** {@inheritDoc} */ + public void setAttribute(String attributeName, boolean value) { + attributes.put(attributeName, value); + } + + /** {@inheritDoc} */ + public void setAttributes(String[] attributeNames, Object[] values) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setAttributes(Map<String, ? extends Object> attributes) { + this.attributes.putAll(attributes); + } + + public int severity() { + return getAttribute(SEVERITY, -1); + } + + public String message() { + return (String) getAttribute(MESSAGE); + } + + public int lineNumber() { + return getAttribute(LINE_NUMBER, -1); + } + + @Override public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + MarkerStub other = (MarkerStub) obj; + if (attributes == null) { + if (other.attributes != null) return false; + } else if (!attributes.equals(other.attributes)) return false; + if (type == null) { + if (other.type != null) return false; + } else if (!type.equals(other.type)) return false; + return true; + } + + @Override public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((attributes == null) ? 0 : attributes.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override public String toString() { + return "MarkerStub [attributes=" + attributes + "]"; + } +}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/ResourceStub.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/ResourceStub.java new file mode 100644 index 0000000..3da6b23 --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/stubs/ResourceStub.java
@@ -0,0 +1,167 @@ +/* + * 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; + +import static org.eclipse.emf.common.util.URI.createURI; + +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Map; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.*; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public class ResourceStub implements Resource { + + private URI uri; + + public ResourceStub() {} + + public ResourceStub(String uri) { + setURI(createURI(uri)); + } + + /** {@inheritDoc} */ + public EList<Adapter> eAdapters() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean eDeliver() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void eSetDeliver(boolean deliver) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void eNotify(Notification notification) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public ResourceSet getResourceSet() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public URI getURI() { + return uri; + } + + /** {@inheritDoc} */ + public void setURI(URI uri) { + this.uri = uri; + } + + /** {@inheritDoc} */ + public long getTimeStamp() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setTimeStamp(long timeStamp) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public EList<EObject> getContents() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public TreeIterator<EObject> getAllContents() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public String getURIFragment(EObject eObject) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public EObject getEObject(String uriFragment) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void save(Map<?, ?> options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void load(Map<?, ?> options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void save(OutputStream outputStream, Map<?, ?> options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void load(InputStream inputStream, Map<?, ?> options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isTrackingModification() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setTrackingModification(boolean isTrackingModification) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isModified() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void setModified(boolean isModified) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public boolean isLoaded() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void unload() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public void delete(Map<?, ?> options) { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public EList<Diagnostic> getErrors() { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + public EList<Diagnostic> getWarnings() { + throw new UnsupportedOperationException(); + } + +}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/Finder.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/Finder.java new file mode 100644 index 0000000..31583dc --- /dev/null +++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/junit/util/Finder.java
@@ -0,0 +1,59 @@ +/* + * 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.util; + +import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType; + +import java.util.List; + +import com.google.eclipse.protobuf.protobuf.*; +import com.google.eclipse.protobuf.protobuf.Enum; + +/** + * @author alruiz@google.com (Alex Ruiz) + */ +public final class Finder { + + public static Enum findEnum(String name, Protobuf root) { + for (Enum anEnum : getAllContentsOfType(root, Enum.class)) + if (name.equals(anEnum.getName())) return anEnum; + return null; + } + + public static Message findMessage(String name, Protobuf root) { + for (Message message : getAllContentsOfType(root, Message.class)) + if (name.equals(message.getName())) return message; + return null; + } + + public static Option findOption(String name, Protobuf root) { + for (Option option : root.getOptions()) + if (name.equals(option.getName())) return option; + return null; + } + + public static Property findProperty(String name, Protobuf root) { + for (Property property : allProperties(root)) + if (name.equals(property.getName())) return property; + return null; + } + + public static List<Property> allProperties(Protobuf root) { + return getAllContentsOfType(root, Property.class); + } + + public static Literal findLiteral(String name, Protobuf root) { + List<Literal> literals = getAllContentsOfType(root, Literal.class); + for (Literal literal : literals) + if (name.equals(literal.getName())) return literal; + return null; + } + + private Finder() {} +}
diff --git a/com.google.eclipse.protobuf.ui.test/.classpath b/com.google.eclipse.protobuf.ui.test/.classpath index 64c5e31..1013bd4 100644 --- a/com.google.eclipse.protobuf.ui.test/.classpath +++ b/com.google.eclipse.protobuf.ui.test/.classpath
@@ -3,5 +3,6 @@ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> + <classpathentry combineaccessrules="false" kind="src" path="/com.google.eclipse.protobuf.test"/> <classpathentry kind="output" path="bin"/> </classpath>
diff --git a/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF index 464e915..5484ca8 100644 --- a/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF
@@ -11,5 +11,4 @@ org.eclipse.xtext.junit;bundle-version="2.0.0", org.eclipse.xtext.junit4;bundle-version="2.0.0", org.eclipse.xtext.ui.junit;bundle-version="2.0.0", - com.google.eclipse.protobuf.junit;bundle-version="1.0.0", org.mockito;bundle-version="1.8.5"
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF index cbe1187..a7191ae 100644 --- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -1,5 +1,6 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 +Eclipse-ExtensibleAPI: true Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor Bundle-Version: 1.0.0