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 35c78f4..c33160c 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
@@ -22,7 +22,7 @@
 import com.google.inject.Injector;
 
 /**
- * Understands SOMETHING DUMMY.
+ * Xtext rule that performs basic configuration of an Xtext environment.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
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 308f6c5..9e92650 100644
--- a/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF
@@ -10,4 +10,5 @@
  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",
- org.eclipse.xtext.ui.junit;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"
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
index 0473781..43eb726 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/util/Literals_calculateIndexOf_Test.java
@@ -12,19 +12,13 @@
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
 
-import java.io.InputStreamReader;
 import java.util.List;
 
-import org.eclipse.xtext.parser.IParseResult;
-import org.eclipse.xtext.util.StringInputStream;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.*;
 
-import com.google.eclipse.protobuf.ProtobufStandaloneSetup;
-import com.google.eclipse.protobuf.parser.antlr.ProtobufParser;
+import com.google.eclipse.protobuf.junit.XtextRule;
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.inject.Injector;
 
 /**
  * Tests for <code>{@link Literals#calculateIndexOf(Literal)}</code>.
@@ -33,25 +27,25 @@
  */
 public class Literals_calculateIndexOf_Test {
 
-  private Injector injector;
+  @Rule public XtextRule xtext = new XtextRule();
+
   private Literals literals;
-  
+
   @Before public void setUp() {
-    injector = new ProtobufStandaloneSetup().createInjectorAndDoEMFRegistration();
-    literals = injector.getInstance(Literals.class);
+    literals = xtext.getInstanceOf(Literals.class);
   }
-  
+
   @Test public void should_return_zero_for_first_and_only_literal() {
     StringBuilder proto = new StringBuilder();
     proto.append("enum PhoneType {");
     proto.append("  MOBILE = 0;   ");
     proto.append("}               ");
-    Protobuf root = parse(proto.toString());
+    Protobuf root = xtext.parse(proto.toString());
     Literal firstLiteral = allLiteralsInFirstEnum(root).get(0);
     int index = literals.calculateIndexOf(firstLiteral);
     assertThat(index, equalTo(0));
   }
-  
+
   @Test public void should_return_max_index_value_plus_one_for_new_literal() {
     StringBuilder proto = new StringBuilder();
     proto.append("enum PhoneType {");
@@ -59,18 +53,12 @@
     proto.append("  HOME = 1;     ");
     proto.append("  WORK = 2;     ");
     proto.append("}               ");
-    Protobuf root = parse(proto.toString());
+    Protobuf root = xtext.parse(proto.toString());
     Literal lastLiteral = allLiteralsInFirstEnum(root).get(2);
     int index = literals.calculateIndexOf(lastLiteral);
     assertThat(index, equalTo(2));
   }
 
-  private Protobuf parse(String text) {
-    ProtobufParser parser = injector.getInstance(ProtobufParser.class);
-    IParseResult parseResult = parser.parse(new InputStreamReader(new StringInputStream(text)));
-    return (Protobuf) parseResult.getRootASTElement();
-  }
-
   private List<Literal> allLiteralsInFirstEnum(Protobuf root) {
     List<Enum> allEnums = getAllContentsOfType(root, Enum.class);
     return allEnums.get(0).getLiterals();
