In progress [Issue 125] Support for custom options.

Adding more tests. Code cleanup.
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
similarity index 75%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
index ef76c93..84062ba 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
@@ -8,14 +8,12 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.scoping.IScope;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 
@@ -25,21 +23,21 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-class ContainsAllLiteralsInEnum extends BaseMatcher<IScope> {
+class ContainAllLiteralsInEnum extends BaseMatcher<IEObjectDescriptions> {
 
   private final Enum anEnum;
 
-  static ContainsAllLiteralsInEnum containsAllLiteralsIn(Enum anEnum) {
-    return new ContainsAllLiteralsInEnum(anEnum);
+  static ContainAllLiteralsInEnum containAllLiteralsIn(Enum anEnum) {
+    return new ContainAllLiteralsInEnum(anEnum);
   }
   
-  private ContainsAllLiteralsInEnum(Enum anEnum) {
+  private ContainAllLiteralsInEnum(Enum anEnum) {
     this.anEnum = anEnum;
   }
   
   public boolean matches(Object arg) {
-    if (!(arg instanceof IScope)) return false;
-    IEObjectDescriptions descriptions = descriptionsIn((IScope) arg);
+    if (!(arg instanceof IEObjectDescriptions)) return false;
+    IEObjectDescriptions descriptions = (IEObjectDescriptions) arg;
     List<Literal> literals = allLiterals();
     if (descriptions.size() != literals.size()) return false;
     for (Literal literal : literals) {
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
index ec596d8..4b4ab01 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
@@ -24,7 +24,7 @@
     return new IEObjectDescriptions(scope);
   }
 
-  private final Map<String, IEObjectDescription> descriptions = new HashMap<String, IEObjectDescription>();
+  private final Map<String, IEObjectDescription> descriptions = new LinkedHashMap<String, IEObjectDescription>();
   
   private IEObjectDescriptions(IScope scope) {
     for (IEObjectDescription d : scope.getAllElements()) {
@@ -41,4 +41,8 @@
   int size() {
     return descriptions.size();
   }
+  
+  @Override public String toString() {
+    return descriptions.keySet().toString();
+  }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
index bab8572..a0bef42 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
@@ -13,7 +13,8 @@
 import static com.google.eclipse.protobuf.junit.model.find.Name.name;
 import static com.google.eclipse.protobuf.junit.model.find.OptionFinder.findOption;
 import static com.google.eclipse.protobuf.junit.model.find.Root.in;
-import static com.google.eclipse.protobuf.scoping.ContainsAllLiteralsInEnum.containsAllLiteralsIn;
+import static com.google.eclipse.protobuf.scoping.ContainAllLiteralsInEnum.containAllLiteralsIn;
+import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 
@@ -67,7 +68,7 @@
     FieldOption option = findFieldOption(name("default"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
   
   @Test public void should_provide_Literals_for_native_option() {
@@ -75,7 +76,7 @@
     Option option = findOption(name("optimize_for"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum optimizeModeEnum = descriptor().enumByName("OptimizeMode");
-    assertThat(scope, containsAllLiteralsIn(optimizeModeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(optimizeModeEnum));
   }
   
   @Test public void should_provide_Literals_for_custom_option() {
@@ -96,7 +97,7 @@
     Option option = findOption(name("type"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
 
   private static LiteralRef valueOf(Option option) {
@@ -112,7 +113,7 @@
     FieldOption option = findFieldOption(name("ctype"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum cTypeEnum = descriptor().enumByName("CType");
-    assertThat(scope, containsAllLiteralsIn(cTypeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(cTypeEnum));
   }
   
   private ProtoDescriptor descriptor() {
@@ -140,7 +141,7 @@
     FieldOption option = findFieldOption(name("type"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
 
   private static LiteralRef valueOf(FieldOption option) {