From b37a087fd7948244862aaa768e98d31100d47683 Mon Sep 17 00:00:00 2001 From: Christian Dietrich Date: Wed, 30 Nov 2016 09:09:38 +0100 Subject: [PATCH] load XtextValidationTest.ecore from code to avoid validation problems in workspace. fixes #47 Signed-off-by: Christian Dietrich --- .../xtext/tests/AbstractXtextTests.java | 6 ++- .../xtext/xtext/XtextValidationTest.ecore | 10 ---- .../xtext/xtext/XtextValidationTest.java | 49 ++++++++++++++++++- 3 files changed, 52 insertions(+), 13 deletions(-) delete mode 100644 org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.ecore diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/tests/AbstractXtextTests.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/tests/AbstractXtextTests.java index 409b973e9..77cfa3959 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/tests/AbstractXtextTests.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/tests/AbstractXtextTests.java @@ -287,10 +287,14 @@ public abstract class AbstractXtextTests extends Assert implements ResourceLoadH protected void disableSerializerTest() { isSerializerTestDisabled = true; } + + protected Object getClasspathURIContext() { + return getClass(); + } protected XtextResource doGetResource(InputStream in, URI uri) throws Exception { XtextResourceSet rs = get(XtextResourceSet.class); - rs.setClasspathURIContext(getClass()); + rs.setClasspathURIContext(getClasspathURIContext()); XtextResource resource = (XtextResource) getResourceFactory().createResource(uri); rs.getResources().add(resource); resource.load(in, null); diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.ecore b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.ecore deleted file mode 100644 index 78af86c52..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.ecore +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.java index ce0d88a07..2cada0973 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/XtextValidationTest.java @@ -9,6 +9,10 @@ package org.eclipse.xtext.xtext; import static com.google.common.collect.Maps.*; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -56,12 +60,14 @@ import org.eclipse.xtext.validation.CheckMode; import org.eclipse.xtext.validation.IResourceValidator; import org.eclipse.xtext.validation.Issue; import org.eclipse.xtext.validation.ValidationMessageAcceptor; +import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Sets; +import com.google.common.io.Files; /** * @author Sebastian Zarnekow - Initial contribution and API @@ -70,12 +76,28 @@ import com.google.common.collect.Sets; public class XtextValidationTest extends AbstractValidationMessageAcceptingTestCase { private String lastMessage; + private URL xtextValidationTest_ecore; @Override public void setUp() throws Exception { super.setUp(); with(XtextStandaloneSetup.class); EValidator.Registry.INSTANCE.put(EcorePackage.eINSTANCE, EcoreValidator.INSTANCE); + File tempFile = File.createTempFile("XtextValidationTest", ".ecore"); + tempFile.deleteOnExit(); + Files.write("" + + ""+ + " "+ + " "+ + " "+ + "" + , tempFile, StandardCharsets.UTF_8); + xtextValidationTest_ecore = tempFile.toURI().toURL(); } private void configureValidator(XtextValidator validator, ValidationMessageAcceptor messageAcceptor, EObject currentObject) { @@ -339,7 +361,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC assertEquals(diag.getChildren().toString(), 4, diag.getChildren().size()); assertEquals("diag.isError", diag.getSeverity(), Diagnostic.ERROR); } - + @Test public void testBug322875_01() throws Exception { String testGrammar = "grammar foo.Bar with org.eclipse.xtext.common.Terminals\n " + @@ -351,6 +373,30 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC assertBug322875(resource); } + @Override + protected Object getClasspathURIContext() { + return new ClassLoader(getClass().getClassLoader()) { + @Override + public URL getResource(String name) { + if ("org/eclipse/xtext/xtext/XtextValidationTest.ecore".equals(name)) { + return xtextValidationTest_ecore; + } + if ("org/eclipse/xtext/Xtext.ecore".equals(name)) { + URL resource = super.getResource(name); + if (resource == null) { + try { + return new File("../org.eclipse.xtext/org/eclipse/xtext/Xtext.ecore").toURI().toURL(); + } catch (MalformedURLException e) { + throw new IllegalStateException("this should never happen"); + } + } + } + URL resource = super.getResource(name); + return resource; + } + }; + } + protected void assertBug322875(XtextResource resource) { Diagnostic diag = Diagnostician.INSTANCE.validate(resource.getContents().get(0)); assertNotNull("diag", diag); @@ -743,7 +789,6 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC "grammar org.foo.Bar with org.eclipse.xtext.testlanguages.SimpleExpressionsTestLanguage\n" + "import 'classpath:/org/eclipse/xtext/testlanguages/SimpleExpressionsTestLanguage.ecore' as mm\n" + "Atom returns mm::Atom: name = ID;", 1); -// System.out.println(resource.getErrors()); assertEquals(resource.getErrors().toString(), 1, resource.getErrors().size()); assertTrue(resource.getWarnings().toString(), resource.getWarnings().isEmpty());