Improving tests by using Xtext's injector and EMF setup.
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 ee6f07b..92a8b48 100644 --- a/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF +++ b/com.google.eclipse.protobuf.ui.test/META-INF/MANIFEST.MF
@@ -6,4 +6,7 @@ Bundle-Vendor: Google Fragment-Host: com.google.eclipse.protobuf.ui;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Require-Bundle: org.junit;bundle-version="4.8.1" +Require-Bundle: org.junit;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"
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EContainerStub.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EContainerStub.java deleted file mode 100644 index 80b9349..0000000 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EContainerStub.java +++ /dev/null
@@ -1,19 +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.stubs; - -import org.eclipse.emf.ecore.InternalEObject; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -public interface EContainerStub extends InternalEObject { - - void add(EObjectStub...children); -}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EObjectStub.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EObjectStub.java deleted file mode 100644 index aa377af..0000000 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EObjectStub.java +++ /dev/null
@@ -1,19 +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.stubs; - -import org.eclipse.emf.ecore.EObject; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -public interface EObjectStub extends EObject { - - void setContainer(EContainerStub eContainer); -}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EnumStub.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EnumStub.java deleted file mode 100644 index 1883f46..0000000 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/EnumStub.java +++ /dev/null
@@ -1,38 +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.stubs; - -import org.eclipse.emf.common.util.BasicEList; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; - -import com.google.eclipse.protobuf.protobuf.impl.EnumImpl; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -public class EnumStub extends EnumImpl implements EContainerStub { - - private EList<EObject> contents = new BasicEList<EObject>(); - - public EnumStub(String name) { - this.name = name; - } - - public void add(EObjectStub...children) { - for (EObjectStub child : children) { - contents.add(child); - child.setContainer(this); - } - } - - @Override public EList<EObject> eContents() { - return contents; - } -}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/LiteralStub.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/LiteralStub.java deleted file mode 100644 index 117bb70..0000000 --- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/stubs/LiteralStub.java +++ /dev/null
@@ -1,25 +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.stubs; - -import com.google.eclipse.protobuf.protobuf.impl.LiteralImpl; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -public class LiteralStub extends LiteralImpl implements EObjectStub { - - public LiteralStub(String name) { - this.name = name; - } - - public void setContainer(EContainerStub container) { - this.eContainer = container; - } -}
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 08eb59c..0473781 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
@@ -8,15 +8,23 @@ */ package com.google.eclipse.protobuf.ui.util; +import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType; 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 com.google.eclipse.protobuf.protobuf.Literal; -import com.google.eclipse.protobuf.stubs.EnumStub; -import com.google.eclipse.protobuf.stubs.LiteralStub; +import com.google.eclipse.protobuf.ProtobufStandaloneSetup; +import com.google.eclipse.protobuf.parser.antlr.ProtobufParser; +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>. @@ -25,29 +33,46 @@ */ public class Literals_calculateIndexOf_Test { - private EnumStub anEnum; - + private Injector injector; private Literals literals; @Before public void setUp() { - anEnum = new EnumStub("PhoneType"); - literals = new Literals(); + injector = new ProtobufStandaloneSetup().createInjectorAndDoEMFRegistration(); + literals = injector.getInstance(Literals.class); } - @Test public void should_return_zero_for_first_literal() { - LiteralStub literal = new LiteralStub("HOME"); - anEnum.add(literal); - int index = literals.calculateIndexOf(literal); + @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()); + 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() { - int maxIndexValue = 1; - LiteralStub literal1 = new LiteralStub("HOME"); - literal1.setIndex(maxIndexValue); - LiteralStub literal2 = new LiteralStub("WORK"); - anEnum.add(literal1, literal2); - int index = literals.calculateIndexOf(literal2); - assertThat(index, equalTo(maxIndexValue + 1)); + StringBuilder proto = new StringBuilder(); + proto.append("enum PhoneType {"); + proto.append(" MOBILE = 0; "); + proto.append(" HOME = 1; "); + proto.append(" WORK = 2; "); + proto.append("} "); + Protobuf root = 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(); } }