Adding more unit tests.
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_charCount_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_charCount_Test.java
new file mode 100644
index 0000000..5a7f449
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_charCount_Test.java
@@ -0,0 +1,29 @@
+/*
+ * 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#charCount()}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CompoundElement_charCount_Test {
+
+  @Test public void should_return_number_of_characters_in_value() {
+    assertThat(DEFAULT_EQUAL.charCount(), equalTo(DEFAULT_EQUAL.toString().length()));
+    assertThat(DEFAULT_EQUAL_IN_BRACKETS.charCount(), equalTo(DEFAULT_EQUAL_IN_BRACKETS.toString().length()));
+  }
+
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_indexOf_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_indexOf_Test.java
new file mode 100644
index 0000000..15ef28d
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement_indexOf_Test.java
@@ -0,0 +1,32 @@
+/*
+ * 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 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#indexOf(CommonKeyword)}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class CompoundElement_indexOf_Test {
+
+  @Test public void should_return_index_of_keyword_as_substring() {
+    assertThat(DEFAULT_EQUAL.indexOf(EQUAL), equalTo(DEFAULT_EQUAL.toString().indexOf(EQUAL.toString())));
+  }
+
+  @Test public void should_return_negative_one_if_keyword_not_found() {
+    assertThat(DEFAULT_EQUAL.indexOf(TRUE), equalTo(-1));
+  }
+}
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 18612a5..030ea0f 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
@@ -11,7 +11,7 @@
 import static com.google.eclipse.protobuf.ui.grammar.CommonKeyword.*;
 
 /**
- * Element composed of one or more keywords.
+ * Element composed of more than one keyword.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -27,28 +27,18 @@
 
   private final String value;
 
-  private static String join(CommonKeyword...keywords) {
+  private static String join(Object...objects) {
     StringBuilder buffer = new StringBuilder();
-    int count = keywords.length;
+    int count = objects.length;
     for (int i = 0; i < count; i++) {
-      buffer.append(keywords[i].toString());
-      if (i < count - 1) buffer.append(" ");
-    }
-    return buffer.toString();
-  }
-
-  private static String join(CompoundElement...elements) {
-    StringBuilder buffer = new StringBuilder();
-    int count = elements.length;
-    for (int i = 0; i < count; i++) {
-      buffer.append(elements[i].value);
+      buffer.append(objects[i].toString());
       if (i < count - 1) buffer.append(" ");
     }
     return buffer.toString();
   }
 
   private static String inBrackets(CompoundElement element) {
-    return String.format("[%s]", element.value);
+    return OPENING_BRACKET + element.value + CLOSING_BRACKET;
   }
 
   private CompoundElement(String value) {
@@ -66,7 +56,7 @@
   }
 
   /**
-   * Returns the number of characters in this compound element.
+   * Returns the number of characters in this compound element (similar to calling {@code toString().length()}.)
    * @return the number of characters in this compound element.
    */
   public int charCount() {
@@ -74,7 +64,8 @@
   }
 
   /**
-   * Returns the index within this compound element of the first occurrence of the value of the specified keyword.
+   * Returns the index within this compound element of the first occurrence of the value of the specified keyword
+   * (similar to calling {@code toString().indexOf(keyword.toString())}.
    * @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.