Adding tests.
diff --git a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/KeywordHasValueMatcher.java b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/KeywordHasValueMatcher.java
deleted file mode 100644
index be27bce..0000000
--- a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/KeywordHasValueMatcher.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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;
-
-import org.eclipse.xtext.Keyword;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-
-/**
- * Matches that verifies that a value of a <code>{@link Keyword}</code> is equal to the expected value.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class KeywordHasValueMatcher extends BaseMatcher<Keyword> {
-
- private final String expectedValue;
-
- public static KeywordHasValueMatcher hasValue(String expected) {
- return new KeywordHasValueMatcher(expected);
- }
-
- private KeywordHasValueMatcher(String expectedValue) {
- this.expectedValue = expectedValue;
- }
-
- public boolean matches(Object arg) {
- if (!(arg instanceof Keyword)) return false;
- Keyword keyword = (Keyword) arg;
- return keyword.getValue().equals(expectedValue);
- }
-
- public void describeTo(Description description) {
- description.appendValue(expectedValue);
- }
-}
diff --git a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/XtextRule.java b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/XtextRule.java
index 222353f..0fc6b9f 100644
--- a/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/XtextRule.java
+++ b/com.google.eclipse.protobuf.junit/src/com/google/eclipse/protobuf/junit/XtextRule.java
@@ -12,16 +12,14 @@
import static org.eclipse.emf.ecore.util.EcoreUtil.resolveAll;
import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
-import java.io.IOException;
-import java.io.InputStream;
+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.FrameworkMethod;
-import org.junit.runners.model.Statement;
+import org.junit.runners.model.*;
import com.google.eclipse.protobuf.ProtobufStandaloneSetup;
import com.google.eclipse.protobuf.protobuf.Protobuf;
@@ -54,7 +52,7 @@
}
private XtextResource resourceFrom(InputStream input) {
- return resourceFrom(input, createURI("mytestmodel.proto"));
+ return resourceFrom(input, createURI("mytestmodel.proto")); //$NON-NLS-1$
}
private XtextResource resourceFrom(InputStream input, URI uri) {
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_hasValue_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_hasValue_Test.java
new file mode 100644
index 0000000..3c0f7a3
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_hasValue_Test.java
@@ -0,0 +1,42 @@
+/*
+ * 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.grammar;
+
+import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.*;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+/**
+ * Tests for <code>{@link CommonKeyword#hasValue(String)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CommonKeyword_hasValue_Test {
+
+ @Test public void should_return_true_if_value_is_equal_to_String() {
+ assertThat(BOOL.hasValue("bool"), equalTo(true));
+ assertThat(TRUE.hasValue("true"), equalTo(true));
+ assertThat(FALSE.hasValue("false"), equalTo(true));
+ assertThat(BYTES.hasValue("bytes"), equalTo(true));
+ assertThat(OPENING_BRACKET.hasValue("["), equalTo(true));
+ assertThat(CLOSING_BRACKET.hasValue("]"), equalTo(true));
+ assertThat(DEFAULT.hasValue("default"), equalTo(true));
+ assertThat(EQUAL.hasValue("="), equalTo(true));
+ assertThat(PACKED.hasValue("packed"), equalTo(true));
+ assertThat(SEMICOLON.hasValue(";"), equalTo(true));
+ assertThat(STRING.hasValue("string"), equalTo(true));
+ }
+
+ @Test public void should_return_false_if_value_is_not_equal_to_String() {
+ assertThat(STRING.hasValue(";"), equalTo(false));
+ }
+
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_toString_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_toString_Test.java
new file mode 100644
index 0000000..d7335fa
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword_toString_Test.java
@@ -0,0 +1,28 @@
+/*
+ * 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.grammar;
+
+import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.BOOL;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+/**
+ * Tests for <code>{@link CommonKeyword#toString()}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CommonKeyword_toString_Test {
+
+ @Test public void should_return_keyword_value() {
+ assertThat(BOOL.toString(), equalTo("bool"));
+ }
+
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_hasValue_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_hasValue_Test.java
new file mode 100644
index 0000000..2b5329b
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_hasValue_Test.java
@@ -0,0 +1,37 @@
+/*
+ * 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.grammar;
+
+import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.*;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+/**
+ * Tests for <code>{@link CompoundElement#hasValue(String)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CompoundElement_hasValue_Test {
+
+ @Test public void should_return_true_if_value_is_equal_to_String() {
+ assertThat(DEFAULT_EQUAL.hasValue("default ="), equalTo(true));
+ assertThat(DEFAULT_EQUAL_IN_BRACKETS.hasValue("[default =]"), equalTo(true));
+ assertThat(EMPTY_STRING.hasValue("\"\""), equalTo(true));
+ assertThat(DEFAULT_EQUAL_STRING.hasValue("default = \"\""), equalTo(true));
+ assertThat(DEFAULT_EQUAL_STRING_IN_BRACKETS.hasValue("[default = \"\"]"), equalTo(true));
+ assertThat(PACKED_EQUAL_TRUE.hasValue("packed = true"), equalTo(true));
+ assertThat(PACKED_EQUAL_TRUE_IN_BRACKETS.hasValue("[packed = true]"), equalTo(true));
+ }
+
+ @Test public void should_return_false_if_value_is_not_equal_to_String() {
+ assertThat(DEFAULT_EQUAL.hasValue("packed ="), equalTo(false));
+ }
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_toString_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_toString_Test.java
new file mode 100644
index 0000000..a8c40c6
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_toString_Test.java
@@ -0,0 +1,28 @@
+/*
+ * 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.grammar;
+
+import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.DEFAULT_EQUAL;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+/**
+ * Tests for <code>{@link CompoundElement#toString()}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CompoundElement_toString_Test {
+
+ @Test public void should_return_keyword_value() {
+ assertThat(DEFAULT_EQUAL.toString(), equalTo("default ="));
+ }
+
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 6c8cf04..9f58cae 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -141,7 +141,7 @@
for (AbstractElement e : grammarElements) {
if (!(e instanceof Assignment)) continue;
Assignment a = (Assignment) e;
- if (feature.hasValueEqualTo(a.getFeature()) && EQUAL.hasValueEqualTo(a.getOperator())) return true;
+ if (feature.hasValue(a.getFeature()) && EQUAL.hasValue(a.getOperator())) return true;
}
return false;
}
@@ -149,33 +149,37 @@
@Override public void completeKeyword(Keyword keyword, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
if (keyword == null) return;
- if (isKeywordEqualToPreviousWordInEditor(keyword, context)) return;
- if (TRUE.hasValueEqualTo(keyword) || FALSE.hasValueEqualTo(keyword)) {
- if (!isBoolProposalValid(context)) return;
- }
- if (OPENING_BRACKET.hasValueEqualTo(keyword)) {
- boolean proposalWasHandledAlready = proposeOpenBracket(context, acceptor);
- if (proposalWasHandledAlready) return;
- }
- if (PACKED.hasValueEqualTo(keyword)) {
- proposePackedOption(context, acceptor);
- return;
- }
- if (DEFAULT.hasValueEqualTo(keyword)) {
- proposeDefaultValue(context, acceptor);
- return;
- }
+ boolean proposalWasHandledAlready = completeKeyword(keyword.getValue(), context, acceptor);
+ if (proposalWasHandledAlready) return;
super.completeKeyword(keyword, context, acceptor);
}
- private boolean isKeywordEqualToPreviousWordInEditor(Keyword keyword, ContentAssistContext context) {
+ private boolean completeKeyword(String keyword, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+ if (isKeywordEqualToPreviousWordInEditor(keyword, context)) return true;
+ if (TRUE.hasValue(keyword) || FALSE.hasValue(keyword)) {
+ if (!isBoolProposalValid(context)) return true;
+ }
+ if (OPENING_BRACKET.hasValue(keyword)) {
+ return proposeOpenBracket(context, acceptor);
+ }
+ if (PACKED.hasValue(keyword)) {
+ proposePackedOption(context, acceptor);
+ return true;
+ }
+ if (DEFAULT.hasValue(keyword)) {
+ proposeDefaultValue(context, acceptor);
+ return true;
+ }
+ return false;
+ }
+
+ private boolean isKeywordEqualToPreviousWordInEditor(String keyword, ContentAssistContext context) {
StyledText styledText = context.getViewer().getTextWidget();
- String value = keyword.getValue();
- int valueLength = value.length();
+ int valueLength = keyword.length();
int start = styledText.getCaretOffset() - valueLength;
if (start < 0) return false;
String previousWord = styledText.getTextRange(start, valueLength);
- return value.equals(previousWord);
+ return keyword.equals(previousWord);
}
private boolean isBoolProposalValid(ContentAssistContext context) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
index 24efb42..ff3cd6a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CommonKeyword.java
@@ -8,8 +8,6 @@
*/
package com.google.eclipse.protobuf.ui.grammar;
-import org.eclipse.xtext.Keyword;
-
/**
* A commonly used keyword.
*
@@ -18,10 +16,11 @@
public enum CommonKeyword {
// we used to get keywords from IGrammarAccess. The problem was that we still had to hardcode the keyword we were
- // looking for. The code was too complicated and we had to change our implementation anyway.
+ // looking for. The code was too complicated and if the grammar changed for some reason, we had to change our
+ // implementation anyway.
BOOL("bool"), TRUE("true"), FALSE("false"), BYTES("bytes"), OPENING_BRACKET("["), CLOSING_BRACKET("]"),
- DEFAULT("default"), EQUAL("="), PACKED("packet"), SEMICOLON(";"), STRING("string");
+ DEFAULT("default"), EQUAL("="), PACKED("packed"), SEMICOLON(";"), STRING("string");
private final String value;
@@ -29,14 +28,19 @@
this.value = value;
}
- public boolean hasValueEqualTo(Keyword k) {
- return hasValueEqualTo(k.getValue());
- }
-
- public boolean hasValueEqualTo(String s) {
+ /**
+ * Indicates whether the value of this keyword is equal to the given {@code String}.
+ * @param s the value to compare to.
+ * @return {@code true} if the value of this keyword is equal to the given {@code String}, {@code false} otherwise.
+ */
+ public boolean hasValue(String s) {
return value.equals(s);
}
+ /**
+ * Returns the textual value of this keyword.
+ * @return the textual value of this keyword.
+ */
@Override public String toString() {
return value;
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
index 5fe9ed8..18612a5 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
@@ -55,14 +55,38 @@
this.value = value;
}
+ /**
+ * Indicates whether the value of this compound element is equal to the given {@code String}.
+ * @param s the value to compare to.
+ * @return {@code true} if the value of this compound element is equal to the given {@code String}, {@code false}
+ * otherwise.
+ */
+ public boolean hasValue(String s) {
+ return value.equals(s);
+ }
+
+ /**
+ * Returns the number of characters in this compound element.
+ * @return the number of characters in this compound element.
+ */
public int charCount() {
return value.length();
}
+ /**
+ * Returns the index within this compound element of the first occurrence of the value of the specified keyword.
+ * @param keyword the given keyword.
+ * @return the index within this compound element of the first occurrence of the value of the specified keyword; -1
+ * if the value of the given keyword is not found.
+ */
public int indexOf(CommonKeyword keyword) {
return value.indexOf(keyword.toString());
}
+ /**
+ * Returns the textual value of this compound element.
+ * @return the textual value of this compound element.
+ */
@Override public String toString() {
return value;
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Properties.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Properties.java
index ebd00e4..b9dd4f1 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Properties.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Properties.java
@@ -37,7 +37,7 @@
AbstractTypeReference r = p.getType();
if (!(r instanceof ScalarTypeReference)) return false;
String typeName = ((ScalarTypeReference) r).getScalar().getName();
- return !STRING.hasValueEqualTo(typeName) && !BYTES.hasValueEqualTo(typeName);
+ return !STRING.hasValue(typeName) && !BYTES.hasValue(typeName);
}
/**
@@ -59,7 +59,7 @@
}
private boolean isScalarType(Property p, CommonKeyword typeKeyword) {
- return typeKeyword.hasValueEqualTo(typeNameOf(p));
+ return typeKeyword.hasValue(typeNameOf(p));
}
/**