diff --git a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/extensions/InjectionExtension.java b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/extensions/InjectionExtension.java index c07e16e38..fbf75c17b 100644 --- a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/extensions/InjectionExtension.java +++ b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/extensions/InjectionExtension.java @@ -62,7 +62,7 @@ public class InjectionExtension implements BeforeEachCallback, AfterEachCallback public RegistryReset(IRegistryConfigurator resetter) { this.resetter = resetter; - resetter.setupRegistry(); + setup(); } public void setup() { diff --git a/org.eclipse.xtext.testlanguages/src/org/eclipse/xtext/testlanguages/fileAware/validation/FileAwareTestLanguageValidator.java b/org.eclipse.xtext.testlanguages/src/org/eclipse/xtext/testlanguages/fileAware/validation/FileAwareTestLanguageValidator.java index dbf41624b..07aed6291 100644 --- a/org.eclipse.xtext.testlanguages/src/org/eclipse/xtext/testlanguages/fileAware/validation/FileAwareTestLanguageValidator.java +++ b/org.eclipse.xtext.testlanguages/src/org/eclipse/xtext/testlanguages/fileAware/validation/FileAwareTestLanguageValidator.java @@ -3,23 +3,25 @@ */ package org.eclipse.xtext.testlanguages.fileAware.validation; +import org.eclipse.xtext.testlanguages.fileAware.fileAware.Element; +import org.eclipse.xtext.testlanguages.fileAware.fileAware.FileAwarePackage; +import org.eclipse.xtext.validation.Check; /** - * This class contains custom validation rules. + * This class contains custom validation rules. * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation + * See + * https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation */ public class FileAwareTestLanguageValidator extends AbstractFileAwareTestLanguageValidator { - -// public static final INVALID_NAME = 'invalidName' -// -// @Check -// public void checkGreetingStartsWithCapital(Greeting greeting) { -// if (!Character.isUpperCase(greeting.getName().charAt(0))) { -// warning("Name should start with a capital", -// FileAwareTestLanguagePackage.Literals.GREETING__NAME, -// INVALID_NAME); -// } -// } - + + public static final String INVALID_NAME = "invalidName"; + + @Check + public void checkGreetingStartsWithCapital(Element element) { + if ("LetItFail".equals(element.getName())) { + warning("LetItFail really is a bad name!", FileAwarePackage.Literals.ELEMENT__NAME, INVALID_NAME); + } + } + } diff --git a/org.eclipse.xtext.tests/build.gradle b/org.eclipse.xtext.tests/build.gradle index f03ae0f15..f5294810c 100644 --- a/org.eclipse.xtext.tests/build.gradle +++ b/org.eclipse.xtext.tests/build.gradle @@ -13,6 +13,12 @@ dependencies { // The MWE2 workflow depends on emf-gen, so we have to include it in the test dependencies testCompile sourceSets.mwe2.output testCompile 'args4j:args4j' + // optional for the utilities but mandatory to run the tests + testImplementation 'junit:junit' + testImplementation 'org.junit.jupiter:junit-jupiter-api' + testImplementation 'org.junit.jupiter:junit-jupiter-engine' + testImplementation 'org.junit.platform:junit-platform-suite-api' + testImplementation 'org.junit.platform:junit-platform-runner' } sourceSets.test { diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/junit5/RunSuiteJUnit5.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/junit5/RunSuiteJUnit5.java new file mode 100644 index 000000000..e79d8a792 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/junit5/RunSuiteJUnit5.java @@ -0,0 +1,17 @@ +package org.eclipse.xtext.junit5; + +import org.junit.platform.runner.JUnitPlatform; +import org.junit.platform.suite.api.SelectPackages; +import org.junit.platform.suite.api.UseTechnicalNames; +import org.junit.runner.RunWith; + +/** + * Test suite that will pick up all Junit5 tests from the listed package and run them + * when the suite is executed with Junit4. + */ +@RunWith(JUnitPlatform.class) +@UseTechnicalNames +@SelectPackages("org.eclipse.xtext.validation.junit5") +public class RunSuiteJUnit5 { + +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/validation/junit5/FileAwareTestLanguageValidationJunit5Test.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/validation/junit5/FileAwareTestLanguageValidationJunit5Test.java new file mode 100644 index 000000000..1cf79b3d3 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/validation/junit5/FileAwareTestLanguageValidationJunit5Test.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2020 itemis AG (http://www.itemis.eu) and others. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.xtext.validation.junit5; + +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.extensions.InjectionExtension; +import org.eclipse.xtext.testing.util.ParseHelper; +import org.eclipse.xtext.testing.validation.ValidationTestHelper; +import org.eclipse.xtext.testlanguages.fileAware.fileAware.FileAwarePackage; +import org.eclipse.xtext.testlanguages.fileAware.fileAware.PackageDeclaration; +import org.eclipse.xtext.testlanguages.fileAware.tests.FileAwareTestLanguageInjectorProvider; +import org.eclipse.xtext.testlanguages.fileAware.validation.FileAwareTestLanguageValidator; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import com.google.inject.Inject; + +/** + * @author cdietrich - Initial contribution and API + */ +@ExtendWith(InjectionExtension.class) +@InjectWith(FileAwareTestLanguageInjectorProvider.class) +public class FileAwareTestLanguageValidationJunit5Test { + + @Inject + private ParseHelper parseHelper; + + @Inject + private ValidationTestHelper validationTestHelper; + + @Test + public void testWithJunit5_01() throws Exception { + PackageDeclaration model = parseHelper.parse("package x element Y {}"); + validationTestHelper.assertNoIssues(model); + } + + @Test + public void testWithJunit5_02() throws Exception { + PackageDeclaration model = parseHelper.parse("package x element LetItFail {}"); + validationTestHelper.assertWarning(model.eResource(), FileAwarePackage.Literals.ELEMENT, + FileAwareTestLanguageValidator.INVALID_NAME); + } + +}