diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.xtend b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.xtend index 766297a32..ea7659580 100644 --- a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.xtend +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.xtend @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) and others. + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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. @@ -11,19 +11,17 @@ package org.eclipse.xtext.ide.tests.serializer import com.google.inject.Inject import com.google.inject.Provider import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EPackage import org.eclipse.emf.ecore.EcoreFactory import org.eclipse.xtext.ide.serializer.impl.ChangeSerializer import org.eclipse.xtext.ide.tests.testlanguage.partialSerializationTestLanguage.EClassRef import org.eclipse.xtext.ide.tests.testlanguage.partialSerializationTestLanguage.Model -import org.eclipse.xtext.ide.tests.testlanguage.tests.PartialSerializationTestLanguageInjectorProvider import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.XtextRunner import org.eclipse.xtext.testing.util.InMemoryURIHandler -import org.eclipse.xtext.testlanguages.ecore.EcoreSupport import org.junit.Assert import org.junit.Test import org.junit.runner.RunWith -import org.eclipse.emf.ecore.EPackage /** * @author Moritz Eysholdt - Initial contribution and API @@ -136,13 +134,3 @@ class ChangeSerializerWithEmfTest { } } - -class PartialSerializationTestLanguageInjectorProviderWithEmf extends PartialSerializationTestLanguageInjectorProvider { - - override protected internalCreateInjector() { - val result = super.internalCreateInjector() - new EcoreSupport().createInjectorAndDoEMFRegistration() - return result - } - -} diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java similarity index 59% rename from org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java rename to org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java index 00b3ac4ad..ee8c176c4 100644 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/serializer/PartialSerializationTestLanguageInjectorProviderWithEmf.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) and others. + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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. @@ -12,12 +12,12 @@ import com.google.inject.Injector; import org.eclipse.xtext.ide.tests.testlanguage.tests.PartialSerializationTestLanguageInjectorProvider; import org.eclipse.xtext.testlanguages.ecore.EcoreSupport; -@SuppressWarnings("all") -public class PartialSerializationTestLanguageInjectorProviderWithEmf extends PartialSerializationTestLanguageInjectorProvider { - @Override - protected Injector internalCreateInjector() { - final Injector result = super.internalCreateInjector(); - new EcoreSupport().createInjectorAndDoEMFRegistration(); - return result; - } +public class PartialSerializationTestLanguageInjectorProviderWithEmf + extends PartialSerializationTestLanguageInjectorProvider { + @Override + protected Injector internalCreateInjector() { + final Injector result = super.internalCreateInjector(); + new EcoreSupport().createInjectorAndDoEMFRegistration(); + return result; + } } diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/CompletionTest.xtend b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/CompletionTest.xtend index 31c8d7b9e..9c9308724 100644 --- a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/CompletionTest.xtend +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/CompletionTest.xtend @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016 TypeFox GmbH (http://www.typefox.io) and others. + * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io) 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. @@ -24,8 +24,8 @@ class CompletionTest extends AbstractTestLangLanguageServerTest { package -> package [[0, 0] .. [0, 0]] type -> type [[0, 0] .. [0, 0]] Sample Snippet -> type ${1|A,B,C|} { - - } [[0, 0] .. [0, 0]] + + } [[0, 0] .. [0, 0]] ''' ] } @@ -124,8 +124,8 @@ class CompletionTest extends AbstractTestLangLanguageServerTest { (Keyword) package -> package [[1, 0] .. [1, 0]] (Keyword) type -> type [[1, 0] .. [1, 0]] (Snippet|Snippet) Sample Snippet -> type ${1|A,B,C|} { - - } [[1, 0] .. [1, 0]] + + } [[1, 0] .. [1, 0]] ''' ] withKind = false diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java new file mode 100644 index 000000000..2e3f5babb --- /dev/null +++ b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java @@ -0,0 +1,253 @@ +/** + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.server; + +import static org.junit.Assert.*; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.xtext.ide.server.UriExtensions; +import org.eclipse.xtext.ide.tests.testlanguage.TestLanguageIdeInjectorProvider; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.XtextRunner; +import org.eclipse.xtext.xbase.lib.Extension; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.google.common.base.CharMatcher; +import com.google.common.base.StandardSystemProperty; +import com.google.inject.Inject; + +@RunWith(XtextRunner.class) +@InjectWith(TestLanguageIdeInjectorProvider.class) +public class UriExtensionsTest { + @Inject + @Extension + private UriExtensions uriExtensions; + + @Test + public void test_toUri01() throws Exception { + assertEquals(URI.createURI("file://path/to/resource"), uriExtensions.toUri("file://path/to/resource")); + } + + @Test + public void test_toUri_02() throws Exception { + assertEquals(URI.createURI("file:///path/to/resource"), uriExtensions.toUri("file:///path/to/resource")); + } + + @Test + public void test_toUri03() throws Exception { + assertEquals(URI.createURI("file://path%20with%20whitespaces/to/resource"), + uriExtensions.toUri("file://path%20with%20whitespaces/to/resource")); + } + + @Test + public void test_toUri_04() throws Exception { + assertEquals(URI.createURI("file:///path%20with%20whitespaces/to/resource"), + uriExtensions.toUri("file:///path%20with%20whitespaces/to/resource")); + } + + @Test + public void test_toUri_05() throws Exception { + assertEquals(URI.createURI("file:///dir/\u0424\u0443%20\u0411\u0430\u0440"), + uriExtensions.toUri("file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); + } + + @Test + public void test_toUri_06() throws Exception { + assertEquals(URI.createURI("file://dir/\u0424\u0443%20\u0411\u0430\u0440"), + uriExtensions.toUri("file://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); + } + + @Test + public void test_toUri_07() throws Exception { + assertEquals(URI.createURI("something:/path/to/resource"), uriExtensions.toUri("something:/path/to/resource")); + } + + @Test + public void test_toUri_08() throws Exception { + assertEquals(URI.createURI("something://path/to/resource"), + uriExtensions.toUri("something://path/to/resource")); + } + + @Test + public void test_toUri_09() throws Exception { + assertEquals(URI.createURI("something:/dir/\u0424\u0443%20\u0411\u0430\u0440"), + uriExtensions.toUri("something:/dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); + } + + @Test + public void test_toUri_10() throws Exception { + assertEquals(URI.createURI("something://dir/\u0424\u0443%20\u0411\u0430\u0440"), + uriExtensions.toUri("something://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); + } + + @Test + public void test_toUri_11() throws Exception { + assertEquals(URI.createURI("something:/path%20with%20whitespaces/to/resource"), + uriExtensions.toUri("something:/path%20with%20whitespaces/to/resource")); + } + + @Test + public void test_toUri_12() throws Exception { + assertEquals(URI.createURI("something://path%20with%20whitespaces/to/resource"), + uriExtensions.toUri("something://path%20with%20whitespaces/to/resource")); + } + + @Test + public void test_toUri_13() throws Exception { + assertEquals(URI.createURI("file:///c:/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl"), + uriExtensions + .toUri("file:///c%3A/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl")); + } + + @Test + public void test_toUri_14() throws Exception { + assertEquals(URI.createURI("file:///c:/Users/dietrich/\u0424\u0443%20\u0411\u0430\u0440.mydsl"), + uriExtensions.toUri("file:///c%3A/Users/dietrich/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.mydsl")); + } + + @Test + public void test_toUriString_01() throws Exception { + assertEquals("file:///path/to/resource", + uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource"))); + } + + @Test + public void test_toUriString_02() throws Exception { + assertEquals("file://path/to/resource", + uriExtensions.toUriString(java.net.URI.create("file://path/to/resource"))); + } + + @Test + public void test_toUriString_03() throws Exception { + assertEquals("file:///dir/\u0424\u0443%20\u0411\u0430\u0440", + uriExtensions.toUriString(java.net.URI.create("file:/dir/\u0424\u0443%20\u0411\u0430\u0440"))); + } + + @Test + public void test_toUriString_04() throws Exception { + assertEquals("file://dir/\u0424\u0443%20\u0411\u0430\u0440", + uriExtensions.toUriString(java.net.URI.create("file://dir/\u0424\u0443%20\u0411\u0430\u0440"))); + } + + @Test + public void test_toUriString_05() throws Exception { + assertEquals("file://path/to/resource/", + uriExtensions.toUriString(java.net.URI.create("file://path/to/resource/"))); + } + + @Test + public void test_toUriString_06() throws Exception { + assertEquals("file:///path/to/resource/", + uriExtensions.toUriString(java.net.URI.create("file:/path/to/resource/"))); + } + + @Test + public void test_toUriString_07() throws Exception { + assertEquals("file:///path/to/resource/", + uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource/"))); + } + + @Test + public void test_symmetric_01() throws Exception { + assertEquals(URI.createURI("file:///path/to/resource"), + uriExtensions.toUri(uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource")))); + } + + @Test + public void test_symmetric_02() throws Exception { + assertEquals(URI.createURI("file://path/to/resource"), + uriExtensions.toUri(uriExtensions.toUriString(java.net.URI.create("file://path/to/resource")))); + } + + @Test + public void test_symmetric_03() throws Exception { + assertEquals(URI.createURI("something:/path/to/resource"), + uriExtensions.toUri(uriExtensions.toUriString(java.net.URI.create("something:/path/to/resource")))); + } + + @Test + public void test_symmetric_04() throws Exception { + assertEquals(URI.createURI("something://path/to/resource"), + uriExtensions.toUri(uriExtensions.toUriString(java.net.URI.create("something://path/to/resource")))); + } + + @Test + public void testConversion() throws Exception { + assertEquals("file:///dir/name.ext", uriExtensions.toUriString(uriExtensions.toUri("file:///dir/name.ext"))); + } + + @Test + public void testFileUriConversion() throws Exception { + final String expected = Paths.get(new File(".").getCanonicalPath()).resolve("dir").resolve("name.ext").toUri() + .toString(); + assertEquals(expected, + uriExtensions.toUriString(URI.createFileURI(new File("dir/name.ext").getAbsolutePath()))); + } + + @Test + public void testFilesWithSpaces() throws Exception { + final URI x = uriExtensions.toUri("file:///dir/Foo%20Bar.testlang"); + final String y = uriExtensions.toUriString(x); + assertEquals("file:///dir/Foo%20Bar.testlang", y); + } + + @Test + public void testFilesWithCyrillicSymbols() throws Exception { + assertEquals("file:///dir/\u0424\u0443%20\u0411\u0430\u0440.testlang", uriExtensions + .toUriString(uriExtensions.toUri("file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.testlang"))); + } + + @Test + public void testFolderIsPrefix() throws Exception { + File directory = new File("./test-data2/test-project"); + directory.mkdirs(); + assertTrue(directory.exists()); + assertTrue(directory.isDirectory()); + URI uri = uriExtensions.toUri(uriExtensions.toUriString(URI.createFileURI(directory.getAbsolutePath() + "/"))); + assertTrue(uri.isPrefix()); + } + + @Test + public void testFolderIsPrefixWithWhitespace() throws Exception { + File directory = createTempDir("some name with whitespaces").toFile(); + assertTrue(directory.exists()); + assertTrue(directory.isDirectory()); + assertTrue(CharMatcher.whitespace().matchesAnyOf(directory.getName())); + URI uri = uriExtensions.toUri(uriExtensions.toUriString(URI.createFileURI(directory.getAbsolutePath() + "/"))); + assertTrue(uri.isPrefix()); + } + + @Test + public void test_withEmptyAuthority() throws Exception { + final URI uriWithoutAuthority = URI.createURI("file:/path/to/resource/"); + assertNull(uriWithoutAuthority.authority()); + final URI uriWithEmptyAuthority = uriExtensions.withEmptyAuthority(uriWithoutAuthority); + assertNotSame(uriWithoutAuthority, uriWithEmptyAuthority); + assertEquals("Returned URI is expected to have an empty instead of null authority", "", + uriWithEmptyAuthority.authority()); + final URI uriWithAuthority = URI.createURI("https://xtext.org/path/to/resource/"); + assertNotNull(uriWithAuthority.authority()); + assertEquals("xtext.org", uriWithAuthority.authority()); + assertSame(uriWithAuthority, uriExtensions.withEmptyAuthority(uriWithAuthority)); + } + + private Path createTempDir(final String prefix) throws Exception { + return Files.createTempDirectory(getTempDirPath(), prefix); + } + + private Path getTempDirPath() { + return Paths.get(StandardSystemProperty.JAVA_IO_TMPDIR.value()); + } +} diff --git a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.xtend b/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.xtend deleted file mode 100644 index 9b03a4b6d..000000000 --- a/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.xtend +++ /dev/null @@ -1,304 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.server - -import com.google.common.base.CharMatcher -import com.google.common.base.StandardSystemProperty -import com.google.inject.Inject -import java.io.File -import java.net.URI -import java.nio.file.Files -import java.nio.file.Paths -import org.eclipse.xtext.ide.server.UriExtensions -import org.eclipse.xtext.ide.tests.testlanguage.TestLanguageIdeInjectorProvider -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.XtextRunner -import org.junit.Test -import org.junit.runner.RunWith - -import static org.eclipse.emf.common.util.URI.createFileURI -import static org.eclipse.emf.common.util.URI.createURI -import static org.junit.Assert.* - -@RunWith(XtextRunner) -@InjectWith(TestLanguageIdeInjectorProvider) -class UriExtensionsTest { - - @Inject - extension UriExtensions - - @Test - def void test_toUri01() { - assertEquals( - createURI('file://path/to/resource'), - 'file://path/to/resource'.toUri - ); - } - - @Test - def void test_toUri_02() { - assertEquals( - createURI('file:///path/to/resource'), - 'file:///path/to/resource'.toUri - ); - } - - @Test - def void test_toUri03() { - assertEquals( - createURI('file://path%20with%20whitespaces/to/resource'), - 'file://path%20with%20whitespaces/to/resource'.toUri - ); - } - - @Test - def void test_toUri_04() { - assertEquals( - createURI('file:///path%20with%20whitespaces/to/resource'), - 'file:///path%20with%20whitespaces/to/resource'.toUri - ); - } - - @Test - def void test_toUri_05() { - assertEquals( - createURI('file:///dir/\u0424\u0443%20\u0411\u0430\u0440'), - 'file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80'.toUri - ); - } - - @Test - def void test_toUri_06() { - assertEquals( - createURI('file://dir/\u0424\u0443%20\u0411\u0430\u0440'), - 'file://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80'.toUri - ); - } - - @Test - def void test_toUri_07() { - assertEquals( - createURI('something:/path/to/resource'), - 'something:/path/to/resource'.toUri - ); - } - - @Test - def void test_toUri_08() { - assertEquals( - createURI('something://path/to/resource'), - 'something://path/to/resource'.toUri - ); - } - - @Test - def void test_toUri_09() { - assertEquals( - createURI('something:/dir/\u0424\u0443%20\u0411\u0430\u0440'), - 'something:/dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80'.toUri - ); - } - - @Test - def void test_toUri_10() { - assertEquals( - createURI('something://dir/\u0424\u0443%20\u0411\u0430\u0440'), - 'something://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80'.toUri - ); - } - - @Test - def void test_toUri_11() { - assertEquals( - createURI('something:/path%20with%20whitespaces/to/resource'), - 'something:/path%20with%20whitespaces/to/resource'.toUri - ); - } - - @Test - def void test_toUri_12() { - assertEquals( - createURI('something://path%20with%20whitespaces/to/resource'), - 'something://path%20with%20whitespaces/to/resource'.toUri - ); - } - - @Test - def void test_toUri_13() { - assertEquals( - createURI('file:///c:/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl'), - 'file:///c%3A/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl'.toUri - ); - } - - @Test - def void test_toUri_14() { - assertEquals( - createURI('file:///c:/Users/dietrich/\u0424\u0443%20\u0411\u0430\u0440.mydsl'), - "file:///c%3A/Users/dietrich/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.mydsl".toUri - ); - } - - @Test - def void test_toUriString_01() { - assertEquals( - 'file:///path/to/resource', - URI.create('file:///path/to/resource').toUriString - ); - } - - @Test - def void test_toUriString_02() { - assertEquals( - 'file://path/to/resource', - URI.create('file://path/to/resource').toUriString - ); - } - - @Test - def void test_toUriString_03() { - assertEquals( - 'file:///dir/\u0424\u0443%20\u0411\u0430\u0440', - URI.create('file:/dir/\u0424\u0443%20\u0411\u0430\u0440').toUriString - ); - } - - @Test - def void test_toUriString_04() { - assertEquals( - 'file://dir/\u0424\u0443%20\u0411\u0430\u0440', - URI.create('file://dir/\u0424\u0443%20\u0411\u0430\u0440').toUriString - ); - } - - - @Test - def void test_toUriString_05() { - assertEquals( - 'file://path/to/resource/', - URI.create('file://path/to/resource/').toUriString - ); - } - - @Test - def void test_toUriString_06() { - assertEquals( - 'file:///path/to/resource/', - URI.create('file:/path/to/resource/').toUriString - ); - } - - @Test - def void test_toUriString_07() { - assertEquals( - 'file:///path/to/resource/', - URI.create('file:///path/to/resource/').toUriString - ); - } - - @Test - def void test_symmetric_01() { - assertEquals( - createURI('file:///path/to/resource'), - URI.create('file:///path/to/resource').toUriString.toUri - ); - } - - @Test - def void test_symmetric_02() { - assertEquals( - createURI('file://path/to/resource'), - URI.create('file://path/to/resource').toUriString.toUri - ) - } - - @Test - def void test_symmetric_03() { - assertEquals( - createURI('something:/path/to/resource'), - URI.create('something:/path/to/resource').toUriString.toUri - ); - } - - @Test - def void test_symmetric_04() { - assertEquals( - createURI('something://path/to/resource'), - URI.create('something://path/to/resource').toUriString.toUri - ); - } - - @Test - def void testConversion() { - assertEquals("file:///dir/name.ext", "file:///dir/name.ext".toUri.toUriString) - } - - @Test - def void testFileUriConversion() { - val expected = Paths.get(new File('.').canonicalPath).resolve('dir').resolve('name.ext').toUri.toString; - assertEquals(expected, createFileURI(new File('dir/name.ext').absolutePath).toUriString) - } - - @Test - def void testFilesWithSpaces() { - val x = "file:///dir/Foo%20Bar.testlang".toUri - val y = x.toUriString - assertEquals("file:///dir/Foo%20Bar.testlang", y) - } - - @Test - def void testFilesWithCyrillicSymbols() { - assertEquals("file:///dir/\u0424\u0443%20\u0411\u0430\u0440.testlang", - "file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.testlang".toUri.toUriString) - } - - @Test - def void testFolderIsPrefix() { - var directory = new File("./test-data2/test-project") - directory.mkdirs - assertTrue(directory.exists) - assertTrue(directory.directory) - var uri = createFileURI(directory.absolutePath + "/").toUriString.toUri - assertTrue(uri.isPrefix) - } - - @Test - def void testFolderIsPrefixWithWhitespace() { - var directory = createTempDir('some name with whitespaces').toFile; - assertTrue(directory.exists) - assertTrue(directory.directory) - assertTrue(CharMatcher.whitespace.matchesAnyOf(directory.name)); - var uri = createFileURI(directory.absolutePath + "/").toUriString.toUri - assertTrue(uri.isPrefix) - } - - @Test - def void test_withEmptyAuthority () { - val uriWithoutAuthority = org.eclipse.emf.common.util.URI.createURI("file:/path/to/resource/") - assertNull(uriWithoutAuthority.authority) - val uriWithEmptyAuthority = uriWithoutAuthority.withEmptyAuthority - assertNotSame(uriWithoutAuthority, uriWithEmptyAuthority) - assertEquals("Returned URI is expected to have an empty instead of null authority", "", uriWithEmptyAuthority.authority) - - val uriWithAuthority = org.eclipse.emf.common.util.URI.createURI("https://xtext.org/path/to/resource/") - assertNotNull(uriWithAuthority.authority) - assertEquals("xtext.org", uriWithAuthority.authority) - assertSame(uriWithAuthority, uriWithAuthority.withEmptyAuthority) - } - - private def createTempDir(String prefix) { - return Files.createTempDirectory(tempDirPath, prefix); - } - - private def getTempDirPath() { - return Paths.get(StandardSystemProperty.JAVA_IO_TMPDIR.value); - } - - -} diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java new file mode 100644 index 000000000..6f86035e2 --- /dev/null +++ b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java @@ -0,0 +1,132 @@ +/** + * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.Endpoint; +import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod; +import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider; +import org.eclipse.lsp4j.jsonrpc.services.JsonNotification; +import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; +import org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints; +import org.eclipse.xtext.ide.server.ILanguageServerAccess; +import org.eclipse.xtext.ide.server.ILanguageServerAccess.IndexContext; +import org.eclipse.xtext.ide.server.ILanguageServerExtension; +import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TestLanguagePackage; +import org.eclipse.xtext.resource.IEObjectDescription; +import org.eclipse.xtext.resource.IResourceDescription; +import org.eclipse.xtext.xbase.lib.ListExtensions; +import org.eclipse.xtext.xbase.lib.util.ToStringBuilder; + +import com.google.common.base.Joiner; +import com.google.inject.ImplementedBy; + +/** + * @author efftinge - Initial contribution and API + */ +@ImplementedBy(TestLangLSPExtension.Impl.class) +public interface TestLangLSPExtension extends ILanguageServerExtension { + class TextOfLineResult { + public String text; + } + + class TextOfLineParam { + public String uri; + + public int line; + } + + class BuildNotification { + public String message; + + @Override + public String toString() { + ToStringBuilder b = new ToStringBuilder(this); + b.add("message", message); + return b.toString(); + } + } + + interface CustomClient { + @JsonNotification + void buildHappened(BuildNotification notification); + } + + class Impl implements ILanguageServerExtension, TestLangLSPExtension, ILanguageServerAccess.IBuildListener, + JsonRpcMethodProvider { + private ILanguageServerAccess access; + + private CustomClient client; + + @Override + public CompletableFuture getTextOfLine(TextOfLineParam param) { + return access.doRead(param.uri, (ILanguageServerAccess.Context ctx) -> { + int start = ctx.getDocument().getOffSet(new Position(param.line, 0)); + int end = ctx.getDocument().getOffSet(new Position(param.line + 1, 0)) + - System.lineSeparator().length(); + TextOfLineResult textOfLineResult = new TextOfLineResult(); + textOfLineResult.text = ctx.getDocument().getContents().substring(start, end); + return textOfLineResult; + }); + } + + @Override + public void initialize(ILanguageServerAccess access) { + this.access = access; + this.access.addBuildListener(this); + this.client = ServiceEndpoints.toServiceObject((Endpoint) access.getLanguageClient(), CustomClient.class); + } + + @Override + public void afterBuild(List deltas) { + BuildNotification buildNotification = new BuildNotification(); + buildNotification.message = "Built " + + Joiner.on(", ").join(ListExtensions.map(deltas, d -> d.getUri().toString()), ", "); + client.buildHappened(buildNotification); + } + + @Override + public Map supportedMethods() { + HashMap result = new HashMap<>(); + result.putAll(ServiceEndpoints.getSupportedMethods(getClass())); + result.putAll(ServiceEndpoints.getSupportedMethods(CustomClient.class)); + return result; + } + + @Override + public CompletableFuture> getAllOpNames() { + return access + .doReadIndex((Function>) (ILanguageServerAccess.IndexContext context) -> { + Set result = new HashSet<>(); + for (IResourceDescription rd : context.getIndex().getAllResourceDescriptions()) { + for (IEObjectDescription o : rd.getExportedObjects()) { + if (TestLanguagePackage.Literals.OPERATION == o.getEClass()) { + result.add(o.getName().getLastSegment()); + } + } + } + return result; + }); + } + } + + @JsonRequest + CompletableFuture getTextOfLine(TextOfLineParam param); + + @JsonRequest + CompletableFuture> getAllOpNames(); +} diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.xtend b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.xtend deleted file mode 100644 index 7ee268bc3..000000000 --- a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.xtend +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016, 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide - -import com.google.inject.ImplementedBy -import java.util.List -import java.util.Set -import java.util.concurrent.CompletableFuture -import org.eclipse.lsp4j.Position -import org.eclipse.lsp4j.jsonrpc.Endpoint -import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider -import org.eclipse.lsp4j.jsonrpc.services.JsonNotification -import org.eclipse.lsp4j.jsonrpc.services.JsonRequest -import org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints -import org.eclipse.xtend.lib.annotations.ToString -import org.eclipse.xtext.ide.server.ILanguageServerAccess -import org.eclipse.xtext.ide.server.ILanguageServerAccess.IBuildListener -import org.eclipse.xtext.ide.server.ILanguageServerExtension -import org.eclipse.xtext.resource.IResourceDescription.Delta -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TestLanguagePackage - -/** - * @author efftinge - Initial contribution and API - */ -@ImplementedBy(TestLangLSPExtension.Impl) -interface TestLangLSPExtension extends ILanguageServerExtension { - - @JsonRequest - def CompletableFuture getTextOfLine(TextOfLineParam param) - - @JsonRequest - def CompletableFuture> getAllOpNames() - - static class TextOfLineResult { - public String text - } - static class TextOfLineParam { - public String uri - public int line - } - - @ToString - static class BuildNotification { - public String message - } - - static interface CustomClient { - @JsonNotification - def void buildHappened(BuildNotification notification) - } - - static class Impl implements ILanguageServerExtension, TestLangLSPExtension, IBuildListener, JsonRpcMethodProvider { - - ILanguageServerAccess access - - CustomClient client - - override getTextOfLine(TextOfLineParam param) { - return access.doRead(param.uri) [ ctx | - val start = ctx.document.getOffSet(new Position(param.line, 0 )) - val end = ctx.document.getOffSet(new Position(param.line + 1, 0 )) -System.lineSeparator.length - return new TextOfLineResult => [ - text = ctx.document.contents.substring(start, end) - ] - ] - } - - override initialize(ILanguageServerAccess access) { - this.access = access - this.access.addBuildListener(this) - this.client = ServiceEndpoints.toServiceObject(access.languageClient as Endpoint, CustomClient) - } - - override afterBuild(List deltas) { - client.buildHappened(new BuildNotification => [ - message = "Built "+deltas.map[uri.toString].join(', ') - ]) - } - - override supportedMethods() { - val result = newHashMap - result.putAll(ServiceEndpoints.getSupportedMethods(this.getClass)) - // register client side - result.putAll(ServiceEndpoints.getSupportedMethods(CustomClient)) - return result - } - - override getAllOpNames() { - return access.doReadIndex([ context | - context.index.allResourceDescriptions.map[exportedObjects].flatten.filter [ - EClass === TestLanguagePackage.Literals.OPERATION - ].map[name.lastSegment].toSet - ]) - } - - } -} diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java new file mode 100644 index 000000000..064af0c84 --- /dev/null +++ b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2018, 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.ide.tests.testlanguage.ide; + +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.RuleCall; +import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext; +import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor; +import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider; +import org.eclipse.xtext.ide.tests.testlanguage.services.TestLanguageGrammarAccess; + +import com.google.inject.Inject; + +/** + * @author Christian Dietrich - Initial contribution and API + */ +public class TestLanguageIdeContentProposalProvider extends IdeContentProposalProvider { + @Inject + private TestLanguageGrammarAccess testLanguageGrammarAccess; + + @Override + protected void _createProposals(RuleCall ruleCall, ContentAssistContext context, + IIdeContentProposalAcceptor acceptor) { + if (testLanguageGrammarAccess.getTypeDeclarationRule().equals(ruleCall.getRule())) { + StringConcatenation builder = new StringConcatenation(); + builder.append("type ${1|A,B,C|} {"); + builder.newLine(); + builder.append("\t"); + builder.newLine(); + builder.append("}"); + acceptor.accept(getProposalCreator().createSnippet(builder.toString(), "Sample Snippet", context), 0); + } + super._createProposals(ruleCall, context, acceptor); + } +} diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.xtend b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.xtend deleted file mode 100644 index 3133c21b1..000000000 --- a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.xtend +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2018, 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.ide.tests.testlanguage.ide - -import com.google.inject.Inject -import org.eclipse.xtext.RuleCall -import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext -import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor -import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider -import org.eclipse.xtext.ide.tests.testlanguage.services.TestLanguageGrammarAccess - -/** - * @author Christian Dietrich - Initial contribution and API - */ -class TestLanguageIdeContentProposalProvider extends IdeContentProposalProvider { - - @Inject extension TestLanguageGrammarAccess - - override protected _createProposals(RuleCall ruleCall, ContentAssistContext context, IIdeContentProposalAcceptor acceptor) { - if (ruleCall.rule == typeDeclarationRule) { - acceptor.accept(proposalCreator.createSnippet('''type ${1|A,B,C|} { - - }''', "Sample Snippet", context), 0) - } - super._createProposals(ruleCall, context, acceptor) - } - -} \ No newline at end of file diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java new file mode 100644 index 000000000..63678dbe1 --- /dev/null +++ b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide.server; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.emf.common.util.ECollections; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.lsp4j.CodeAction; +import org.eclipse.lsp4j.Command; +import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.TextEdit; +import org.eclipse.lsp4j.WorkspaceEdit; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.eclipse.xtext.formatting2.regionaccess.ITextReplacement; +import org.eclipse.xtext.ide.serializer.IChangeSerializer; +import org.eclipse.xtext.ide.serializer.IEmfResourceChange; +import org.eclipse.xtext.ide.serializer.ITextDocumentChange; +import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2; +import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Member; +import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Model; +import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration; +import org.eclipse.xtext.ide.tests.testlanguage.validation.TestLanguageValidator; +import org.eclipse.xtext.util.CollectionBasedAcceptor; +import org.eclipse.xtext.xbase.lib.ListExtensions; +import org.eclipse.xtext.xbase.lib.StringExtensions; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.inject.Inject; + +/** + * @author Sven Efftinge - Initial contribution and API + */ +public class CodeActionService implements ICodeActionService2 { + @Inject + private IChangeSerializer serializer; + + @Override + public List> getCodeActions(ICodeActionService2.Options options) { + List> actions = new ArrayList<>(); + for (Diagnostic d : options.getCodeActionParams().getContext().getDiagnostics()) { + Object code = d.getCode().get(); + if (TestLanguageValidator.INVALID_NAME.equals(code)) { + actions.add(Either.forLeft(fixInvalidName(d, options))); + } else if (TestLanguageValidator.UNSORTED_MEMBERS.equals(code)) { + actions.add(Either.forRight(fixUnsortedMembers(d, options))); + } + } + return actions; + } + + private Command fixInvalidName(Diagnostic d, ICodeActionService2.Options options) { + String string = options.getDocument().getSubstring(d.getRange()); + Command command = new Command(); + command.setCommand("my.textedit.command"); + command.setTitle("Make '" + string + "' upper case"); + WorkspaceEdit workspaceEdit = new WorkspaceEdit(); + TextEdit textEdit = new TextEdit(); + textEdit.setNewText(StringExtensions.toFirstUpper(string)); + textEdit.setRange(d.getRange()); + workspaceEdit.getChanges().put(options.getCodeActionParams().getTextDocument().getUri(), + Lists.newArrayList(textEdit)); + command.setArguments(Lists.newArrayList(workspaceEdit)); + return command; + } + + private CodeAction fixUnsortedMembers(Diagnostic d, ICodeActionService2.Options options) { + WorkspaceEdit wsEdit = recordWorkspaceEdit(options, (Resource copiedResource) -> { + Model model = Iterables.getFirst(Iterables.filter(copiedResource.getContents(), Model.class), null); + if (model != null) { + for (TypeDeclaration type : Iterables.filter(model.getElements(), TypeDeclaration.class)) { + ECollections.sort(type.getMembers(), (Member a, Member b) -> a.getName().compareTo(b.getName())); + } + } + }); + CodeAction codeAction = new CodeAction(); + codeAction.setTitle("Sort Members"); + codeAction.setDiagnostics(Lists.newArrayList(d)); + codeAction.setEdit(wsEdit); + return codeAction; + } + + private WorkspaceEdit recordWorkspaceEdit(ICodeActionService2.Options options, + IChangeSerializer.IModification mod) { + ResourceSet rs = options.getLanguageServerAccess().newLiveScopeResourceSet(options.getResource().getURI()); + Resource copy = rs.getResource(options.getResource().getURI(), true); + serializer.addModification(copy, mod); + List documentchanges = new ArrayList<>(); + serializer.applyModifications(CollectionBasedAcceptor.of(documentchanges)); + WorkspaceEdit workspaceEdit = new WorkspaceEdit(); + for (ITextDocumentChange documentchange : Iterables.filter(documentchanges, ITextDocumentChange.class)) { + List edits = ListExtensions.map(documentchange.getReplacements(), + (ITextReplacement replacement) -> { + TextEdit textEdit = new TextEdit(); + textEdit.setNewText(replacement.getReplacementText()); + textEdit.setRange(new Range(options.getDocument().getPosition(replacement.getOffset()), + options.getDocument().getPosition(replacement.getEndOffset()))); + return textEdit; + }); + workspaceEdit.getChanges().put(documentchange.getNewURI().toString(), edits); + } + return workspaceEdit; + } +} diff --git a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.xtend b/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.xtend deleted file mode 100644 index 65f50f071..000000000 --- a/org.eclipse.xtext.ide.tests/testlang-src/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.xtend +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide.server - -import com.google.inject.Inject -import org.eclipse.emf.common.util.ECollections -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.lsp4j.CodeAction -import org.eclipse.lsp4j.Command -import org.eclipse.lsp4j.Diagnostic -import org.eclipse.lsp4j.Range -import org.eclipse.lsp4j.TextEdit -import org.eclipse.lsp4j.WorkspaceEdit -import org.eclipse.lsp4j.jsonrpc.messages.Either -import org.eclipse.xtext.ide.serializer.IChangeSerializer -import org.eclipse.xtext.ide.serializer.IEmfResourceChange -import org.eclipse.xtext.ide.serializer.ITextDocumentChange -import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2 -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Model -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration -import org.eclipse.xtext.util.CollectionBasedAcceptor - -import static org.eclipse.xtext.ide.tests.testlanguage.validation.TestLanguageValidator.* - -/** - * @author Sven Efftinge - Initial contribution and API - */ -class CodeActionService implements ICodeActionService2 { - - @Inject IChangeSerializer serializer - - override getCodeActions(Options options) { - val actions = newArrayList - for (d : options.codeActionParams.context.diagnostics) { - switch d.code.get { - case INVALID_NAME: actions += Either.forLeft(d.fixInvalidName(options)) - case UNSORTED_MEMBERS: actions += Either.forRight(d.fixUnsortedMembers(options)) - } - } - return actions - } - - def private Command fixInvalidName(Diagnostic d, Options options) { - val string = options.document.getSubstring(d.range) - return new Command => [ - command = 'my.textedit.command' - title = '''Make '«string»' upper case''' - arguments = #[ - new WorkspaceEdit => [ - changes.put(options.codeActionParams.textDocument.uri, #[new TextEdit => [ - newText = string.toFirstUpper - range = d.range - ]]) - ] - ] - ] - } - - def private CodeAction fixUnsortedMembers(Diagnostic d, Options options) { - val wsEdit = recordWorkspaceEdit(options) [ copiedResource | - val model = copiedResource.contents.filter(Model).head - for (type : model.elements.filter(TypeDeclaration)) { - ECollections.sort(type.members, [a, b|a.name <=> b.name]) - } - ] - return new CodeAction => [ - title = '''Sort Members''' - diagnostics = #[d] - edit = wsEdit - ] - } - - def private WorkspaceEdit recordWorkspaceEdit(Options options, IChangeSerializer.IModification mod) { - val rs = options.languageServerAccess.newLiveScopeResourceSet(options.resource.URI) - val copy = rs.getResource(options.resource.URI, true) - serializer.addModification(copy, mod) - val documentchanges = newArrayList() - serializer.applyModifications(CollectionBasedAcceptor.of(documentchanges)) - return new WorkspaceEdit => [ - for (documentchange : documentchanges.filter(ITextDocumentChange)) { - val edits = documentchange.replacements.map [ replacement | - new TextEdit => [ - newText = replacement.replacementText - range = new Range(options.document.getPosition(replacement.offset), options.document.getPosition(replacement.endOffset)) - ] - ] - changes.put(documentchange.newURI.toString, edits) - } - ] - } - -} diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.java index 714a9eb09..a622dc0ed 100644 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.java +++ b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/serializer/ChangeSerializerWithEmfTest.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) and others. + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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. diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/CompletionTest.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/CompletionTest.java index e7bae103b..feea242c4 100644 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/CompletionTest.java +++ b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/CompletionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2016 TypeFox GmbH (http://www.typefox.io) and others. + * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io) 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. @@ -62,9 +62,8 @@ public class CompletionTest extends AbstractTestLangLanguageServerTest { _builder.newLine(); _builder.append("Sample Snippet -> type ${1|A,B,C|} {"); _builder.newLine(); - _builder.append(" "); + _builder.append(" "); _builder.newLine(); - _builder.append(" "); _builder.append("} [[0, 0] .. [0, 0]]"); _builder.newLine(); it.setExpectedCompletionItems(_builder.toString()); @@ -212,9 +211,8 @@ public class CompletionTest extends AbstractTestLangLanguageServerTest { _builder_1.newLine(); _builder_1.append("(Snippet|Snippet) Sample Snippet -> type ${1|A,B,C|} {"); _builder_1.newLine(); - _builder_1.append(" "); + _builder_1.append(" "); _builder_1.newLine(); - _builder_1.append(" "); _builder_1.append("} [[1, 0] .. [1, 0]]"); _builder_1.newLine(); it.setExpectedCompletionItems(_builder_1.toString()); diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java deleted file mode 100644 index 5e7119713..000000000 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/server/UriExtensionsTest.java +++ /dev/null @@ -1,288 +0,0 @@ -/** - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.server; - -import com.google.common.base.CharMatcher; -import com.google.common.base.StandardSystemProperty; -import com.google.inject.Inject; -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import org.eclipse.emf.common.util.URI; -import org.eclipse.xtext.ide.server.UriExtensions; -import org.eclipse.xtext.ide.tests.testlanguage.TestLanguageIdeInjectorProvider; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.XtextRunner; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.Extension; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(XtextRunner.class) -@InjectWith(TestLanguageIdeInjectorProvider.class) -@SuppressWarnings("all") -public class UriExtensionsTest { - @Inject - @Extension - private UriExtensions _uriExtensions; - - @Test - public void test_toUri01() { - Assert.assertEquals( - URI.createURI("file://path/to/resource"), - this._uriExtensions.toUri("file://path/to/resource")); - } - - @Test - public void test_toUri_02() { - Assert.assertEquals( - URI.createURI("file:///path/to/resource"), - this._uriExtensions.toUri("file:///path/to/resource")); - } - - @Test - public void test_toUri03() { - Assert.assertEquals( - URI.createURI("file://path%20with%20whitespaces/to/resource"), - this._uriExtensions.toUri("file://path%20with%20whitespaces/to/resource")); - } - - @Test - public void test_toUri_04() { - Assert.assertEquals( - URI.createURI("file:///path%20with%20whitespaces/to/resource"), - this._uriExtensions.toUri("file:///path%20with%20whitespaces/to/resource")); - } - - @Test - public void test_toUri_05() { - Assert.assertEquals( - URI.createURI("file:///dir/\u0424\u0443%20\u0411\u0430\u0440"), - this._uriExtensions.toUri("file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); - } - - @Test - public void test_toUri_06() { - Assert.assertEquals( - URI.createURI("file://dir/\u0424\u0443%20\u0411\u0430\u0440"), - this._uriExtensions.toUri("file://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); - } - - @Test - public void test_toUri_07() { - Assert.assertEquals( - URI.createURI("something:/path/to/resource"), - this._uriExtensions.toUri("something:/path/to/resource")); - } - - @Test - public void test_toUri_08() { - Assert.assertEquals( - URI.createURI("something://path/to/resource"), - this._uriExtensions.toUri("something://path/to/resource")); - } - - @Test - public void test_toUri_09() { - Assert.assertEquals( - URI.createURI("something:/dir/\u0424\u0443%20\u0411\u0430\u0440"), - this._uriExtensions.toUri("something:/dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); - } - - @Test - public void test_toUri_10() { - Assert.assertEquals( - URI.createURI("something://dir/\u0424\u0443%20\u0411\u0430\u0440"), - this._uriExtensions.toUri("something://dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80")); - } - - @Test - public void test_toUri_11() { - Assert.assertEquals( - URI.createURI("something:/path%20with%20whitespaces/to/resource"), - this._uriExtensions.toUri("something:/path%20with%20whitespaces/to/resource")); - } - - @Test - public void test_toUri_12() { - Assert.assertEquals( - URI.createURI("something://path%20with%20whitespaces/to/resource"), - this._uriExtensions.toUri("something://path%20with%20whitespaces/to/resource")); - } - - @Test - public void test_toUri_13() { - Assert.assertEquals( - URI.createURI("file:///c:/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl"), - this._uriExtensions.toUri("file:///c%3A/Users/dietrich/git/MyDSL_Imports/mydsl/workspace/src/something.mydsl")); - } - - @Test - public void test_toUri_14() { - Assert.assertEquals( - URI.createURI("file:///c:/Users/dietrich/\u0424\u0443%20\u0411\u0430\u0440.mydsl"), - this._uriExtensions.toUri("file:///c%3A/Users/dietrich/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.mydsl")); - } - - @Test - public void test_toUriString_01() { - Assert.assertEquals( - "file:///path/to/resource", - this._uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource"))); - } - - @Test - public void test_toUriString_02() { - Assert.assertEquals( - "file://path/to/resource", - this._uriExtensions.toUriString(java.net.URI.create("file://path/to/resource"))); - } - - @Test - public void test_toUriString_03() { - Assert.assertEquals( - "file:///dir/\u0424\u0443%20\u0411\u0430\u0440", - this._uriExtensions.toUriString(java.net.URI.create("file:/dir/\u0424\u0443%20\u0411\u0430\u0440"))); - } - - @Test - public void test_toUriString_04() { - Assert.assertEquals( - "file://dir/\u0424\u0443%20\u0411\u0430\u0440", - this._uriExtensions.toUriString(java.net.URI.create("file://dir/\u0424\u0443%20\u0411\u0430\u0440"))); - } - - @Test - public void test_toUriString_05() { - Assert.assertEquals( - "file://path/to/resource/", - this._uriExtensions.toUriString(java.net.URI.create("file://path/to/resource/"))); - } - - @Test - public void test_toUriString_06() { - Assert.assertEquals( - "file:///path/to/resource/", - this._uriExtensions.toUriString(java.net.URI.create("file:/path/to/resource/"))); - } - - @Test - public void test_toUriString_07() { - Assert.assertEquals( - "file:///path/to/resource/", - this._uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource/"))); - } - - @Test - public void test_symmetric_01() { - Assert.assertEquals( - URI.createURI("file:///path/to/resource"), - this._uriExtensions.toUri(this._uriExtensions.toUriString(java.net.URI.create("file:///path/to/resource")))); - } - - @Test - public void test_symmetric_02() { - Assert.assertEquals( - URI.createURI("file://path/to/resource"), - this._uriExtensions.toUri(this._uriExtensions.toUriString(java.net.URI.create("file://path/to/resource")))); - } - - @Test - public void test_symmetric_03() { - Assert.assertEquals( - URI.createURI("something:/path/to/resource"), - this._uriExtensions.toUri(this._uriExtensions.toUriString(java.net.URI.create("something:/path/to/resource")))); - } - - @Test - public void test_symmetric_04() { - Assert.assertEquals( - URI.createURI("something://path/to/resource"), - this._uriExtensions.toUri(this._uriExtensions.toUriString(java.net.URI.create("something://path/to/resource")))); - } - - @Test - public void testConversion() { - Assert.assertEquals("file:///dir/name.ext", this._uriExtensions.toUriString(this._uriExtensions.toUri("file:///dir/name.ext"))); - } - - @Test - public void testFileUriConversion() { - try { - final String expected = Paths.get(new File(".").getCanonicalPath()).resolve("dir").resolve("name.ext").toUri().toString(); - Assert.assertEquals(expected, this._uriExtensions.toUriString(URI.createFileURI(new File("dir/name.ext").getAbsolutePath()))); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testFilesWithSpaces() { - final URI x = this._uriExtensions.toUri("file:///dir/Foo%20Bar.testlang"); - final String y = this._uriExtensions.toUriString(x); - Assert.assertEquals("file:///dir/Foo%20Bar.testlang", y); - } - - @Test - public void testFilesWithCyrillicSymbols() { - Assert.assertEquals("file:///dir/\u0424\u0443%20\u0411\u0430\u0440.testlang", - this._uriExtensions.toUriString(this._uriExtensions.toUri("file:///dir/%D0%A4%D1%83%20%D0%91%D0%B0%D1%80.testlang"))); - } - - @Test - public void testFolderIsPrefix() { - File directory = new File("./test-data2/test-project"); - directory.mkdirs(); - Assert.assertTrue(directory.exists()); - Assert.assertTrue(directory.isDirectory()); - String _absolutePath = directory.getAbsolutePath(); - String _plus = (_absolutePath + "/"); - URI uri = this._uriExtensions.toUri(this._uriExtensions.toUriString(URI.createFileURI(_plus))); - Assert.assertTrue(uri.isPrefix()); - } - - @Test - public void testFolderIsPrefixWithWhitespace() { - File directory = this.createTempDir("some name with whitespaces").toFile(); - Assert.assertTrue(directory.exists()); - Assert.assertTrue(directory.isDirectory()); - Assert.assertTrue(CharMatcher.whitespace().matchesAnyOf(directory.getName())); - String _absolutePath = directory.getAbsolutePath(); - String _plus = (_absolutePath + "/"); - URI uri = this._uriExtensions.toUri(this._uriExtensions.toUriString(URI.createFileURI(_plus))); - Assert.assertTrue(uri.isPrefix()); - } - - @Test - public void test_withEmptyAuthority() { - final URI uriWithoutAuthority = URI.createURI("file:/path/to/resource/"); - Assert.assertNull(uriWithoutAuthority.authority()); - final URI uriWithEmptyAuthority = this._uriExtensions.withEmptyAuthority(uriWithoutAuthority); - Assert.assertNotSame(uriWithoutAuthority, uriWithEmptyAuthority); - Assert.assertEquals("Returned URI is expected to have an empty instead of null authority", "", uriWithEmptyAuthority.authority()); - final URI uriWithAuthority = URI.createURI("https://xtext.org/path/to/resource/"); - Assert.assertNotNull(uriWithAuthority.authority()); - Assert.assertEquals("xtext.org", uriWithAuthority.authority()); - Assert.assertSame(uriWithAuthority, this._uriExtensions.withEmptyAuthority(uriWithAuthority)); - } - - private Path createTempDir(final String prefix) { - try { - return Files.createTempDirectory(this.getTempDirPath(), prefix); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - private Path getTempDirPath() { - return Paths.get(StandardSystemProperty.JAVA_IO_TMPDIR.value()); - } -} diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java deleted file mode 100644 index 6a6769055..000000000 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLangLSPExtension.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Copyright (c) 2016, 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide; - -import com.google.common.collect.Iterables; -import com.google.inject.ImplementedBy; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.jsonrpc.Endpoint; -import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod; -import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider; -import org.eclipse.lsp4j.jsonrpc.services.JsonNotification; -import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; -import org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints; -import org.eclipse.lsp4j.services.LanguageClient; -import org.eclipse.xtend.lib.annotations.ToString; -import org.eclipse.xtext.ide.server.Document; -import org.eclipse.xtext.ide.server.ILanguageServerAccess; -import org.eclipse.xtext.ide.server.ILanguageServerExtension; -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TestLanguagePackage; -import org.eclipse.xtext.resource.IEObjectDescription; -import org.eclipse.xtext.resource.IResourceDescription; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Functions.Function1; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.eclipse.xtext.xbase.lib.ListExtensions; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -import org.eclipse.xtext.xbase.lib.Pure; -import org.eclipse.xtext.xbase.lib.util.ToStringBuilder; - -/** - * @author efftinge - Initial contribution and API - */ -@ImplementedBy(TestLangLSPExtension.Impl.class) -@SuppressWarnings("all") -public interface TestLangLSPExtension extends ILanguageServerExtension { - class TextOfLineResult { - public String text; - } - - class TextOfLineParam { - public String uri; - - public int line; - } - - @ToString - class BuildNotification { - public String message; - - @Override - @Pure - public String toString() { - ToStringBuilder b = new ToStringBuilder(this); - b.add("message", this.message); - return b.toString(); - } - } - - interface CustomClient { - @JsonNotification - void buildHappened(final TestLangLSPExtension.BuildNotification notification); - } - - class Impl implements ILanguageServerExtension, TestLangLSPExtension, ILanguageServerAccess.IBuildListener, JsonRpcMethodProvider { - private ILanguageServerAccess access; - - private TestLangLSPExtension.CustomClient client; - - @Override - public CompletableFuture getTextOfLine(final TestLangLSPExtension.TextOfLineParam param) { - final Function _function = (ILanguageServerAccess.Context ctx) -> { - Document _document = ctx.getDocument(); - Position _position = new Position(param.line, 0); - final int start = _document.getOffSet(_position); - Document _document_1 = ctx.getDocument(); - Position _position_1 = new Position((param.line + 1), 0); - int _offSet = _document_1.getOffSet(_position_1); - int _length = System.lineSeparator().length(); - final int end = (_offSet - _length); - TestLangLSPExtension.TextOfLineResult _textOfLineResult = new TestLangLSPExtension.TextOfLineResult(); - final Procedure1 _function_1 = (TestLangLSPExtension.TextOfLineResult it) -> { - it.text = ctx.getDocument().getContents().substring(start, end); - }; - return ObjectExtensions.operator_doubleArrow(_textOfLineResult, _function_1); - }; - return this.access.doRead(param.uri, _function); - } - - @Override - public void initialize(final ILanguageServerAccess access) { - this.access = access; - this.access.addBuildListener(this); - LanguageClient _languageClient = access.getLanguageClient(); - this.client = ServiceEndpoints.toServiceObject(((Endpoint) _languageClient), TestLangLSPExtension.CustomClient.class); - } - - @Override - public void afterBuild(final List deltas) { - TestLangLSPExtension.BuildNotification _buildNotification = new TestLangLSPExtension.BuildNotification(); - final Procedure1 _function = (TestLangLSPExtension.BuildNotification it) -> { - final Function1 _function_1 = (IResourceDescription.Delta it_1) -> { - return it_1.getUri().toString(); - }; - String _join = IterableExtensions.join(ListExtensions.map(deltas, _function_1), ", "); - String _plus = ("Built " + _join); - it.message = _plus; - }; - TestLangLSPExtension.BuildNotification _doubleArrow = ObjectExtensions.operator_doubleArrow(_buildNotification, _function); - this.client.buildHappened(_doubleArrow); - } - - @Override - public Map supportedMethods() { - final HashMap result = CollectionLiterals.newHashMap(); - result.putAll(ServiceEndpoints.getSupportedMethods(this.getClass())); - result.putAll(ServiceEndpoints.getSupportedMethods(TestLangLSPExtension.CustomClient.class)); - return result; - } - - @Override - public CompletableFuture> getAllOpNames() { - final Function> _function = (ILanguageServerAccess.IndexContext context) -> { - final Function1> _function_1 = (IResourceDescription it) -> { - return it.getExportedObjects(); - }; - final Function1 _function_2 = (IEObjectDescription it) -> { - EClass _eClass = it.getEClass(); - return Boolean.valueOf((_eClass == TestLanguagePackage.Literals.OPERATION)); - }; - final Function1 _function_3 = (IEObjectDescription it) -> { - return it.getName().getLastSegment(); - }; - return IterableExtensions.toSet(IterableExtensions.map(IterableExtensions.filter(Iterables.concat(IterableExtensions.>map(context.getIndex().getAllResourceDescriptions(), _function_1)), _function_2), _function_3)); - }; - return this.access.>doReadIndex(_function); - } - } - - @JsonRequest - CompletableFuture getTextOfLine(final TestLangLSPExtension.TextOfLineParam param); - - @JsonRequest - CompletableFuture> getAllOpNames(); -} diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java deleted file mode 100644 index 6b41380cd..000000000 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/TestLanguageIdeContentProposalProvider.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) 2018, 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.ide.tests.testlanguage.ide; - -import com.google.common.base.Objects; -import com.google.inject.Inject; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.AbstractRule; -import org.eclipse.xtext.ParserRule; -import org.eclipse.xtext.RuleCall; -import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext; -import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor; -import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalCreator; -import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider; -import org.eclipse.xtext.ide.tests.testlanguage.services.TestLanguageGrammarAccess; -import org.eclipse.xtext.xbase.lib.Extension; - -/** - * @author Christian Dietrich - Initial contribution and API - */ -@SuppressWarnings("all") -public class TestLanguageIdeContentProposalProvider extends IdeContentProposalProvider { - @Inject - @Extension - private TestLanguageGrammarAccess _testLanguageGrammarAccess; - - @Override - protected void _createProposals(final RuleCall ruleCall, final ContentAssistContext context, final IIdeContentProposalAcceptor acceptor) { - AbstractRule _rule = ruleCall.getRule(); - ParserRule _typeDeclarationRule = this._testLanguageGrammarAccess.getTypeDeclarationRule(); - boolean _equals = Objects.equal(_rule, _typeDeclarationRule); - if (_equals) { - IdeContentProposalCreator _proposalCreator = this.getProposalCreator(); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("type ${1|A,B,C|} {"); - _builder.newLine(); - _builder.append("\t\t\t\t"); - _builder.newLine(); - _builder.append("\t\t\t"); - _builder.append("}"); - acceptor.accept(_proposalCreator.createSnippet(_builder.toString(), "Sample Snippet", context), 0); - } - super._createProposals(ruleCall, context, acceptor); - } -} diff --git a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java b/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java deleted file mode 100644 index c8de7972d..000000000 --- a/org.eclipse.xtext.ide.tests/xtend-gen/org/eclipse/xtext/ide/tests/testlanguage/ide/server/CodeActionService.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.ide.tests.testlanguage.ide.server; - -import com.google.common.base.Objects; -import com.google.common.collect.Iterables; -import com.google.inject.Inject; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import org.eclipse.emf.common.util.ECollections; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.lsp4j.CodeAction; -import org.eclipse.lsp4j.Command; -import org.eclipse.lsp4j.Diagnostic; -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.Range; -import org.eclipse.lsp4j.TextEdit; -import org.eclipse.lsp4j.WorkspaceEdit; -import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.formatting2.regionaccess.ITextReplacement; -import org.eclipse.xtext.ide.serializer.IChangeSerializer; -import org.eclipse.xtext.ide.serializer.IEmfResourceChange; -import org.eclipse.xtext.ide.serializer.ITextDocumentChange; -import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2; -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Member; -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.Model; -import org.eclipse.xtext.ide.tests.testlanguage.testLanguage.TypeDeclaration; -import org.eclipse.xtext.ide.tests.testlanguage.validation.TestLanguageValidator; -import org.eclipse.xtext.util.CollectionBasedAcceptor; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Functions.Function1; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.eclipse.xtext.xbase.lib.ListExtensions; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -import org.eclipse.xtext.xbase.lib.StringExtensions; - -/** - * @author Sven Efftinge - Initial contribution and API - */ -@SuppressWarnings("all") -public class CodeActionService implements ICodeActionService2 { - @Inject - private IChangeSerializer serializer; - - @Override - public List> getCodeActions(final ICodeActionService2.Options options) { - final ArrayList> actions = CollectionLiterals.>newArrayList(); - List _diagnostics = options.getCodeActionParams().getContext().getDiagnostics(); - for (final Diagnostic d : _diagnostics) { - Object _get = d.getCode().get(); - boolean _matched = false; - if (Objects.equal(_get, TestLanguageValidator.INVALID_NAME)) { - _matched=true; - Either _forLeft = Either.forLeft(this.fixInvalidName(d, options)); - actions.add(_forLeft); - } - if (!_matched) { - if (Objects.equal(_get, TestLanguageValidator.UNSORTED_MEMBERS)) { - _matched=true; - Either _forRight = Either.forRight(this.fixUnsortedMembers(d, options)); - actions.add(_forRight); - } - } - } - return actions; - } - - private Command fixInvalidName(final Diagnostic d, final ICodeActionService2.Options options) { - final String string = options.getDocument().getSubstring(d.getRange()); - Command _command = new Command(); - final Procedure1 _function = (Command it) -> { - it.setCommand("my.textedit.command"); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("Make \'"); - _builder.append(string); - _builder.append("\' upper case"); - it.setTitle(_builder.toString()); - WorkspaceEdit _workspaceEdit = new WorkspaceEdit(); - final Procedure1 _function_1 = (WorkspaceEdit it_1) -> { - TextEdit _textEdit = new TextEdit(); - final Procedure1 _function_2 = (TextEdit it_2) -> { - it_2.setNewText(StringExtensions.toFirstUpper(string)); - it_2.setRange(d.getRange()); - }; - TextEdit _doubleArrow = ObjectExtensions.operator_doubleArrow(_textEdit, _function_2); - it_1.getChanges().put(options.getCodeActionParams().getTextDocument().getUri(), Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow))); - }; - WorkspaceEdit _doubleArrow = ObjectExtensions.operator_doubleArrow(_workspaceEdit, _function_1); - it.setArguments(Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow))); - }; - return ObjectExtensions.operator_doubleArrow(_command, _function); - } - - private CodeAction fixUnsortedMembers(final Diagnostic d, final ICodeActionService2.Options options) { - final IChangeSerializer.IModification _function = (Resource copiedResource) -> { - final Model model = IterableExtensions.head(Iterables.filter(copiedResource.getContents(), Model.class)); - Iterable _filter = Iterables.filter(model.getElements(), TypeDeclaration.class); - for (final TypeDeclaration type : _filter) { - final Comparator _function_1 = (Member a, Member b) -> { - String _name = a.getName(); - String _name_1 = b.getName(); - return (_name.compareTo(_name_1)); - }; - ECollections.sort(type.getMembers(), _function_1); - } - }; - final WorkspaceEdit wsEdit = this.recordWorkspaceEdit(options, _function); - CodeAction _codeAction = new CodeAction(); - final Procedure1 _function_1 = (CodeAction it) -> { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("Sort Members"); - it.setTitle(_builder.toString()); - it.setDiagnostics(Collections.unmodifiableList(CollectionLiterals.newArrayList(d))); - it.setEdit(wsEdit); - }; - return ObjectExtensions.operator_doubleArrow(_codeAction, _function_1); - } - - private WorkspaceEdit recordWorkspaceEdit(final ICodeActionService2.Options options, final IChangeSerializer.IModification mod) { - final ResourceSet rs = options.getLanguageServerAccess().newLiveScopeResourceSet(options.getResource().getURI()); - final Resource copy = rs.getResource(options.getResource().getURI(), true); - this.serializer.addModification(copy, mod); - final ArrayList documentchanges = CollectionLiterals.newArrayList(); - this.serializer.applyModifications(CollectionBasedAcceptor.of(documentchanges)); - WorkspaceEdit _workspaceEdit = new WorkspaceEdit(); - final Procedure1 _function = (WorkspaceEdit it) -> { - Iterable _filter = Iterables.filter(documentchanges, ITextDocumentChange.class); - for (final ITextDocumentChange documentchange : _filter) { - { - final Function1 _function_1 = (ITextReplacement replacement) -> { - TextEdit _textEdit = new TextEdit(); - final Procedure1 _function_2 = (TextEdit it_1) -> { - it_1.setNewText(replacement.getReplacementText()); - Position _position = options.getDocument().getPosition(replacement.getOffset()); - Position _position_1 = options.getDocument().getPosition(replacement.getEndOffset()); - Range _range = new Range(_position, _position_1); - it_1.setRange(_range); - }; - return ObjectExtensions.operator_doubleArrow(_textEdit, _function_2); - }; - final List edits = ListExtensions.map(documentchange.getReplacements(), _function_1); - it.getChanges().put(documentchange.getNewURI().toString(), edits); - } - } - }; - return ObjectExtensions.operator_doubleArrow(_workspaceEdit, _function); - } -} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java new file mode 100644 index 000000000..5abc24659 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java @@ -0,0 +1,332 @@ +/** + * Copyright (c) 2015, 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.formatting2.regionaccess.internal; + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.formatting2.regionaccess.IEObjectRegion; +import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion; +import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegionsFinder; +import org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess; +import org.eclipse.xtext.formatting2.regionaccess.ITextSegment; +import org.eclipse.xtext.formatting2.regionaccess.TextRegionAccessBuilder; +import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.AssignedAction; +import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Expression; +import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Mixed; +import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.RegionaccesstestlanguagePackage; +import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Root; +import org.eclipse.xtext.formatting2.regionaccess.internal.services.RegionAccessTestLanguageGrammarAccess; +import org.eclipse.xtext.formatting2.regionaccess.internal.tests.RegionAccessTestLanguageInjectorProvider; +import org.eclipse.xtext.resource.XtextResource; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.XtextRunner; +import org.eclipse.xtext.testing.util.ParseHelper; +import org.eclipse.xtext.testing.validation.ValidationTestHelper; +import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.lib.Pair; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import com.google.inject.Inject; +import com.google.inject.Provider; + +/** + * @author Moritz Eysholdt - Initial contribution and API + */ +@RunWith(XtextRunner.class) +@InjectWith(RegionAccessTestLanguageInjectorProvider.class) +public class SemanticRegionFinderTest { + @Inject + private ParseHelper parseHelper; + + @Inject + private Provider textRegionAccessBuilder; + + @Inject + private ValidationTestHelper validationTestHelper; + + @Inject + private RegionAccessTestLanguageGrammarAccess grammarAccess; + + @Test + public void regionForFeatureAttribute() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.feature(RegionaccesstestlanguagePackage.Literals.MIXED__NAME); + List actuals = finder.features(RegionaccesstestlanguagePackage.Literals.MIXED__NAME); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForFeatureCrossReference() throws Exception { + AssignedAction mixed = parseAs("6 (ref foo) action (foo) end", AssignedAction.class); + IEObjectRegion finder = toAccess(mixed).regionForEObject(mixed.getChild()); + ISemanticRegion actual = finder.getRegionFor().feature(RegionaccesstestlanguagePackage.Literals.MIXED__REF); + List actuals = finder.getRegionFor() + .features(RegionaccesstestlanguagePackage.Literals.MIXED__REF); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForFeatureContainmentReference() throws Exception { + AssignedAction mixed = parseAs("6 (foo) action", AssignedAction.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + try { + finder.feature(RegionaccesstestlanguagePackage.Literals.ASSIGNED_ACTION__CHILD); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + try { + finder.features(RegionaccesstestlanguagePackage.Literals.ASSIGNED_ACTION__CHILD); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + } + + @Test + public void regionForRuleCallUnassignedTerminal() throws Exception { + Mixed mixed = parseAs("6 (unassigned foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder + .ruleCall(grammarAccess.getMixedAccess().getIDTerminalRuleCall_1_1_0()); + List actuals = finder + .ruleCalls(grammarAccess.getMixedAccess().getIDTerminalRuleCall_1_1_0()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallToUnassignedTerminal() throws Exception { + Mixed mixed = parseAs("6 (unassigned foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCallTo(grammarAccess.getIDRule()); + List actuals = finder.ruleCallsTo(grammarAccess.getIDRule()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallUnassignedDataType() throws Exception { + Mixed mixed = parseAs("6 (unassigned datatype foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCall( + grammarAccess.getMixedAccess().getDatatypeParserRuleCall_1_1_1()); + List actuals = finder.ruleCalls( + grammarAccess.getMixedAccess().getDatatypeParserRuleCall_1_1_1()); + assertEquals("datatype foo", actual, actuals); + } + + @Test + public void regionForRuleCallToUnassignedDataType() throws Exception { + Mixed mixed = parseAs("6 (unassigned datatype foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCallTo(grammarAccess.getDatatypeRule()); + List actuals = finder + .ruleCallsTo(grammarAccess.getDatatypeRule()); + assertEquals("datatype foo", actual, actuals); + } + + @Test + public void regionForRuleCallAssignedTerminal() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCall( + grammarAccess.getMixedAccess().getNameIDTerminalRuleCall_2_2_0_0()); + ISemanticRegion actuals = finder.ruleCall( + grammarAccess.getMixedAccess().getNameIDTerminalRuleCall_2_2_0_0()); + Assert.assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallToAssignedTerminal() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCallTo(grammarAccess.getIDRule()); + ISemanticRegion actuals = finder.ruleCallTo(grammarAccess.getIDRule()); + Assert.assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallAssignedDataType() throws Exception { + Mixed mixed = parseAs("6 (datatype foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCall(grammarAccess.getMixedAccess() + .getDatatypeDatatypeParserRuleCall_2_2_2_0()); + ISemanticRegion actuals = finder.ruleCall(grammarAccess.getMixedAccess() + .getDatatypeDatatypeParserRuleCall_2_2_2_0()); + Assert.assertEquals("datatype foo", actual, actuals); + } + + @Test + public void regionForRuleCallToAssignedDataType() throws Exception { + Mixed mixed = parseAs("6 (datatype foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.ruleCallTo(grammarAccess.getDatatypeRule()); + ISemanticRegion actuals = finder.ruleCallTo(grammarAccess.getDatatypeRule()); + Assert.assertEquals("datatype foo", actual, actuals); + } + + @Test + public void regionForRuleCallCrossReference() throws Exception { + AssignedAction mixed = parseAs("6 (ref foo) action (foo) end", AssignedAction.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); + ISemanticRegion actual = finder.ruleCall(grammarAccess.getMixedAccess() + .getRefMixedIDTerminalRuleCall_2_2_3_1_0_1()); + List actuals = finder.ruleCalls(grammarAccess.getMixedAccess() + .getRefMixedIDTerminalRuleCall_2_2_3_1_0_1()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallToCrossReference() throws Exception { + AssignedAction mixed = parseAs("6 (ref foo) action (foo) end", AssignedAction.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); + ISemanticRegion actual = finder.ruleCallTo(grammarAccess.getIDRule()); + List actuals = finder.ruleCallsTo(grammarAccess.getIDRule()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForRuleCallEObjectParserRule() throws Exception { + Mixed mixed = parseAs("6 (child (foo))", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + try { + finder.ruleCall(grammarAccess.getMixedAccess() + .getEobjMixedParserRuleCall_2_2_1_1_0()); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + try { + finder.ruleCalls(grammarAccess.getMixedAccess() + .getEobjMixedParserRuleCall_2_2_1_1_0()); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + } + + @Test + public void regionForRuleCallToEObjectParserRule() throws Exception { + Mixed mixed = parseAs("6 (child (foo))", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + try { + finder.ruleCallTo(grammarAccess.getMixedRule()); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + try { + finder.ruleCallsTo(grammarAccess.getMixedRule()); + Assert.fail(); + } catch (IllegalStateException e) { + // ok + } + } + + @Test + public void regionForKeywordString() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder.keyword("("); + List actuals = finder.keywords("("); + assertEquals("(", actual, actuals); + } + + @Test + public void regionForKeyword() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder + .keyword(grammarAccess.getMixedAccess().getLeftParenthesisKeyword_0()); + List actuals = finder + .keywords(grammarAccess.getMixedAccess().getLeftParenthesisKeyword_0()); + assertEquals("(", actual, actuals); + } + + @Test + public void regionForCrossReference() throws Exception { + AssignedAction mixed = parseAs("6 (ref foo) action (foo) end", AssignedAction.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); + ISemanticRegion actual = finder.crossRef( + grammarAccess.getMixedAccess().getRefMixedCrossReference_2_2_3_1_0()); + List actuals = finder.crossRefs( + grammarAccess.getMixedAccess().getRefMixedCrossReference_2_2_3_1_0()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForAssignment() throws Exception { + Mixed mixed = parseAs("6 (foo)", Mixed.class); + ISemanticRegionsFinder finder = toAccess(mixed).regionForEObject(mixed).getRegionFor(); + ISemanticRegion actual = finder + .assignment(grammarAccess.getMixedAccess().getNameAssignment_2_2_0()); + List actuals = finder + .assignments(grammarAccess.getMixedAccess().getNameAssignment_2_2_0()); + assertEquals("foo", actual, actuals); + } + + @Test + public void regionForKeywordPairs() throws Exception { + @Extension + RegionAccessTestLanguageGrammarAccess.ParenthesizedElements rule = grammarAccess + .getParenthesizedAccess(); + Expression expr = parseAs("5 (foo)", Expression.class); + ISemanticRegionsFinder finder = toAccess(expr).regionForEObject(expr).getRegionFor(); + String actual1 = pairsToString(finder.keywordPairs("(", ")")); + String actual2 = pairsToString( + finder.keywordPairs(rule.getLeftParenthesisKeyword_0(), rule.getRightParenthesisKeyword_2())); + String expected = "(foo)"; + Assert.assertEquals(expected, actual1); + Assert.assertEquals(expected, actual2); + } + + @Test + public void regionForKeywordPairs2() throws Exception { + @Extension + RegionAccessTestLanguageGrammarAccess.ParenthesizedElements rule = grammarAccess + .getParenthesizedAccess(); + Expression expr = parseAs("5 (a + ((b) + c) + d)", Expression.class); + ISemanticRegionsFinder finder = toAccess(expr).regionForRootEObject().getAllRegionsFor(); + String actual1 = pairsToString(finder.keywordPairs("(", ")")); + String actual2 = pairsToString( + finder.keywordPairs(rule.getLeftParenthesisKeyword_0(), rule.getRightParenthesisKeyword_2())); + String expected = "(b); ((b) + c); (a + ((b) + c) + d)"; + Assert.assertEquals(expected, actual1); + Assert.assertEquals(expected, actual2); + } + + private String pairsToString(Iterable> pairs) { + return Joiner.on("; ") + .join(Iterables.transform(pairs, it -> it.getKey().merge(it.getValue()).getText())); + } + + private T parseAs(CharSequence seq, Class cls) throws Exception { + Root result = parseHelper.parse(seq); + validationTestHelper.assertNoErrors(result); + return cls.cast(result); + } + + private ITextRegionAccess toAccess(EObject obj) { + return textRegionAccessBuilder.get().forNodeModel((XtextResource) obj.eResource()).create(); + } + + private void assertEquals(String expected, ITextSegment single, Collection regions) { + Assert.assertEquals(expected, single.getText()); + Assert.assertEquals(1, regions.size()); + Assert.assertEquals(expected, Iterables.getFirst(regions, null).getText()); + Assert.assertTrue(regions instanceof ImmutableList); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.xtend deleted file mode 100644 index b0358792f..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.xtend +++ /dev/null @@ -1,263 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015, 2017 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.formatting2.regionaccess.internal - -import com.google.common.collect.ImmutableList -import com.google.inject.Inject -import com.google.inject.Provider -import java.util.Collection -import org.eclipse.emf.ecore.EObject -import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion -import org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess -import org.eclipse.xtext.formatting2.regionaccess.ITextSegment -import org.eclipse.xtext.formatting2.regionaccess.TextRegionAccessBuilder -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.AssignedAction -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Expression -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Mixed -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Root -import org.eclipse.xtext.formatting2.regionaccess.internal.services.RegionAccessTestLanguageGrammarAccess -import org.eclipse.xtext.formatting2.regionaccess.internal.tests.RegionAccessTestLanguageInjectorProvider -import org.eclipse.xtext.resource.XtextResource -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.XtextRunner -import org.eclipse.xtext.testing.util.ParseHelper -import org.eclipse.xtext.testing.validation.ValidationTestHelper -import org.junit.Test -import org.junit.runner.RunWith - -import static org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.RegionaccesstestlanguagePackage.Literals.* -import static org.junit.Assert.* - -/** - * @author Moritz Eysholdt - Initial contribution and API - */ -@RunWith(XtextRunner) -@InjectWith(RegionAccessTestLanguageInjectorProvider) -class SemanticRegionFinderTest { - @Inject extension ParseHelper parseHelper - @Inject Provider textRegionAccessBuilder - @Inject extension ValidationTestHelper validationTestHelper - @Inject extension RegionAccessTestLanguageGrammarAccess - - @Test def void regionForFeatureAttribute() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.feature(MIXED__NAME) - val actuals = finder.features(MIXED__NAME) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForFeatureCrossReference() { - val mixed = '''6 (ref foo) action (foo) end'''.parseAs(AssignedAction) - val finder = mixed.toAccess.regionForEObject(mixed.child) - val actual = finder.regionFor.feature(MIXED__REF) - val actuals = finder.regionFor.features(MIXED__REF) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForFeatureContainmentReference() { - val mixed = '''6 (foo) action'''.parseAs(AssignedAction) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - try { - finder.feature(ASSIGNED_ACTION__CHILD) - fail() - } catch (IllegalStateException e) { - } - try { - finder.features(ASSIGNED_ACTION__CHILD) - fail() - } catch (IllegalStateException e) { - } - } - - @Test def void regionForRuleCallUnassignedTerminal() { - val mixed = '''6 (unassigned foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCall(mixedAccess.IDTerminalRuleCall_1_1_0) - val actuals = finder.ruleCalls(mixedAccess.IDTerminalRuleCall_1_1_0) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallToUnassignedTerminal() { - val mixed = '''6 (unassigned foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCallTo(IDRule) - val actuals = finder.ruleCallsTo(IDRule) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallUnassignedDataType() { - val mixed = '''6 (unassigned datatype foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCall(mixedAccess.datatypeParserRuleCall_1_1_1) - val actuals = finder.ruleCalls(mixedAccess.datatypeParserRuleCall_1_1_1) - assertEquals("datatype foo", actual, actuals) - } - - @Test def void regionForRuleCallToUnassignedDataType() { - val mixed = '''6 (unassigned datatype foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCallTo(datatypeRule) - val actuals = finder.ruleCallsTo(datatypeRule) - assertEquals("datatype foo", actual, actuals) - } - - @Test def void regionForRuleCallAssignedTerminal() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCall(mixedAccess.nameIDTerminalRuleCall_2_2_0_0) - val actuals = finder.ruleCall(mixedAccess.nameIDTerminalRuleCall_2_2_0_0) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallToAssignedTerminal() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCallTo(IDRule) - val actuals = finder.ruleCallTo(IDRule) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallAssignedDataType() { - val mixed = '''6 (datatype foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCall(mixedAccess.datatypeDatatypeParserRuleCall_2_2_2_0) - val actuals = finder.ruleCall(mixedAccess.datatypeDatatypeParserRuleCall_2_2_2_0) - assertEquals("datatype foo", actual, actuals) - } - - @Test def void regionForRuleCallToAssignedDataType() { - val mixed = '''6 (datatype foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.ruleCallTo(datatypeRule) - val actuals = finder.ruleCallTo(datatypeRule) - assertEquals("datatype foo", actual, actuals) - } - - @Test def void regionForRuleCallCrossReference() { - val mixed = '''6 (ref foo) action (foo) end'''.parseAs(AssignedAction) - val finder = mixed.toAccess.regionForEObject(mixed.child).regionFor - val actual = finder.ruleCall(mixedAccess.refMixedIDTerminalRuleCall_2_2_3_1_0_1) - val actuals = finder.ruleCalls(mixedAccess.refMixedIDTerminalRuleCall_2_2_3_1_0_1) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallToCrossReference() { - val mixed = '''6 (ref foo) action (foo) end'''.parseAs(AssignedAction) - val finder = mixed.toAccess.regionForEObject(mixed.child).regionFor - val actual = finder.ruleCallTo(IDRule) - val actuals = finder.ruleCallsTo(IDRule) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForRuleCallEObjectParserRule() { - val mixed = '''6 (child (foo))'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - try { - finder.ruleCall(mixedAccess.eobjMixedParserRuleCall_2_2_1_1_0) - fail() - } catch (IllegalStateException e) { - } - try { - finder.ruleCalls(mixedAccess.eobjMixedParserRuleCall_2_2_1_1_0) - fail() - } catch (IllegalStateException e) { - } - } - - @Test def void regionForRuleCallToEObjectParserRule() { - val mixed = '''6 (child (foo))'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - try { - finder.ruleCallTo(mixedRule) - fail() - } catch (IllegalStateException e) { - } - try { - finder.ruleCallsTo(mixedRule) - fail() - } catch (IllegalStateException e) { - } - } - - @Test def void regionForKeywordString() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.keyword("(") - val actuals = finder.keywords("(") - assertEquals("(", actual, actuals) - } - - @Test def void regionForKeyword() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.keyword(mixedAccess.leftParenthesisKeyword_0) - val actuals = finder.keywords(mixedAccess.leftParenthesisKeyword_0) - assertEquals("(", actual, actuals) - } - - @Test def void regionForCrossReference() { - val mixed = '''6 (ref foo) action (foo) end'''.parseAs(AssignedAction) - val finder = mixed.toAccess.regionForEObject(mixed.child).regionFor - val actual = finder.crossRef(mixedAccess.refMixedCrossReference_2_2_3_1_0) - val actuals = finder.crossRefs(mixedAccess.refMixedCrossReference_2_2_3_1_0) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForAssignment() { - val mixed = '''6 (foo)'''.parseAs(Mixed) - val finder = mixed.toAccess.regionForEObject(mixed).regionFor - val actual = finder.assignment(mixedAccess.nameAssignment_2_2_0) - val actuals = finder.assignments(mixedAccess.nameAssignment_2_2_0) - assertEquals("foo", actual, actuals) - } - - @Test def void regionForKeywordPairs() { - val extension rule = parenthesizedAccess - val expr = '''5 (foo)'''.parseAs(Expression) - val finder = expr.toAccess.regionForEObject(expr).regionFor - val actual1 = finder.keywordPairs("(", ")").pairsToString - val actual2 = finder.keywordPairs(leftParenthesisKeyword_0, rightParenthesisKeyword_2).pairsToString - val expected = "(foo)" - assertEquals(expected, actual1) - assertEquals(expected, actual2) - } - - @Test def void regionForKeywordPairs2() { - val extension rule = parenthesizedAccess - val expr = '''5 (a + ((b) + c) + d)'''.parseAs(Expression) - val finder = expr.toAccess.regionForRootEObject.allRegionsFor - val actual1 = finder.keywordPairs("(", ")").pairsToString - val actual2 = finder.keywordPairs(leftParenthesisKeyword_0, rightParenthesisKeyword_2).pairsToString - val expected = "(b); ((b) + c); (a + ((b) + c) + d)" - assertEquals(expected, actual1) - assertEquals(expected, actual2) - } - - def private String pairsToString(Iterable> pairs) { - pairs.map[key.merge(value).text].join("; ") - } - - def private parseAs(CharSequence seq, Class cls) { - val result = seq.parse - result.assertNoErrors - return cls.cast(result) - } - - def private ITextRegionAccess toAccess(EObject obj) { - return textRegionAccessBuilder.get.forNodeModel(obj.eResource as XtextResource).create - } - - def private void assertEquals(String expected, ITextSegment single, Collection regions) { - assertEquals(expected, single.text) - assertEquals(1, regions.size) - assertEquals(expected, regions.head.text) - assertTrue(regions instanceof ImmutableList) - } -} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java new file mode 100644 index 000000000..2990c4d82 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java @@ -0,0 +1,194 @@ +/** + * Copyright (c) 2015, 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.parser.parameters; + +import org.eclipse.xtext.parser.parameters.parametersTestLanguage.ParserRuleParameters; +import org.eclipse.xtext.resource.XtextResource; +import org.eclipse.xtext.tests.AbstractXtextTests; +import org.junit.Assert; +import org.junit.Test; + +import com.google.common.collect.Iterables; +import com.google.inject.Injector; + +/** + * @author Sebastian Zarnekow - Initial contribution and API + */ +public abstract class AbstractParametersParsingTest extends AbstractXtextTests { + @Override + protected void setInjector(Injector injector) { + super.setInjector(injector); + injectMembers(this); + } + + @Override + protected boolean shouldTestSerializer(XtextResource resource) { + return false; + } + + @Override + public ParserRuleParameters getModel(String model) throws Exception { + return (ParserRuleParameters) super.getModel(model); + } + + protected ParserRuleParameters getModelWithErrors(String model) throws Exception { + return (ParserRuleParameters) getModelAndExpect(model, AbstractXtextTests.EXPECT_ERRORS); + } + + @Test + public void testScenario1_first() throws Exception { + ParserRuleParameters instance = getModel("#1 first"); + Assert.assertEquals("first", instance.getScenario().getFirst()); + } + + @Test + public void testScenario2_second() throws Exception { + ParserRuleParameters instance = getModel("#2 second"); + Assert.assertEquals("second", instance.getScenario().getSecond()); + } + + @Test + public void testScenario3_keyword() throws Exception { + ParserRuleParameters instance = getModel("#3 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getFirst()); + } + + @Test + public void testScenario3_id() throws Exception { + ParserRuleParameters instance = getModel("#3 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario4_keyword() throws Exception { + ParserRuleParameters instance = getModelWithErrors("#4 keyword"); + Assert.assertEquals(null, instance.getScenario().getFirst()); + Assert.assertEquals(1, instance.eResource().getErrors().size()); + Assert.assertEquals("mismatched input 'keyword' expecting RULE_ID", + Iterables.getFirst(instance.eResource().getErrors(), null).getMessage()); + } + + @Test + public void testScenario4_id() throws Exception { + ParserRuleParameters instance = getModel("#4 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario5_keyword() throws Exception { + ParserRuleParameters instance = getModel("#5 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getFirst()); + } + + @Test + public void testScenario5_id() throws Exception { + ParserRuleParameters instance = getModel("#5 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario6_keyword() throws Exception { + ParserRuleParameters instance = getModelWithErrors("#6 keyword"); + Assert.assertEquals(null, instance.getScenario()); + Assert.assertEquals("no viable alternative at input '#6'", + Iterables.getFirst(instance.eResource().getErrors(), null).getMessage()); + } + + @Test + public void testScenario6_id() throws Exception { + ParserRuleParameters instance = getModel("#6 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario7_keyword() throws Exception { + ParserRuleParameters instance = getModel("#7 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getFirst()); + } + + @Test + public void testScenario7_id() throws Exception { + ParserRuleParameters instance = getModel("#7 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario8_keyword() throws Exception { + ParserRuleParameters instance = getModel("#8 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getSecond()); + } + + @Test + public void testScenario8_id() throws Exception { + ParserRuleParameters instance = getModel("#8 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario9_keyword_keyword() throws Exception { + ParserRuleParameters instance = getModel("#9 keyword keyword"); + Assert.assertEquals("keyword", instance.getScenario().getSecond()); + } + + @Test + public void testScenario9_id_keyword() throws Exception { + ParserRuleParameters instance = getModel("#9 id keyword"); + Assert.assertEquals("id", instance.getScenario().getSecond()); + } + + @Test + public void testScenario9_id() throws Exception { + ParserRuleParameters instance = getModel("#9 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario9_keyword() throws Exception { + ParserRuleParameters instance = getModel("#9 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getFirst()); + } + + @Test + public void testScenario10_keyword_keyword() throws Exception { + ParserRuleParameters instance = getModel("#10 keyword keyword"); + Assert.assertEquals("keyword", instance.getScenario().getSecond()); + } + + @Test + public void testScenario10_id_keyword() throws Exception { + ParserRuleParameters instance = getModel("#10 id keyword"); + Assert.assertEquals("id", instance.getScenario().getSecond()); + } + + @Test + public void testScenario10_id() throws Exception { + ParserRuleParameters instance = getModel("#10 id"); + Assert.assertEquals("id", instance.getScenario().getFirst()); + } + + @Test + public void testScenario10_keyword() throws Exception { + ParserRuleParameters instance = getModelWithErrors("#10 keyword"); + Assert.assertEquals("keyword", instance.getScenario().getSecond()); + Assert.assertEquals("mismatched input '' expecting 'keyword'", + Iterables.getFirst(instance.eResource().getErrors(), null).getMessage()); + } + + @Test + public void testScenario11_keyword_keyword() throws Exception { + ParserRuleParameters instance = getModel("#11 keyword keyword"); + Assert.assertEquals("keyword", instance.getScenario().getFirst()); + } + + @Test + public void testScenario11_id_keyword() throws Exception { + ParserRuleParameters instance = getModel("#11 id keyword"); + Assert.assertEquals("id", instance.getScenario().getSecond()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.xtend deleted file mode 100644 index bc9247d48..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.xtend +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 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.parser.parameters - -import com.google.inject.Injector -import org.eclipse.xtext.parser.parameters.parametersTestLanguage.ParserRuleParameters -import org.eclipse.xtext.resource.XtextResource -import org.eclipse.xtext.tests.AbstractXtextTests -import org.junit.Test - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -abstract class AbstractParametersParsingTest extends AbstractXtextTests { - - override protected setInjector(Injector injector) { - super.setInjector(injector) - injectMembers(this) - } - - override protected shouldTestSerializer(XtextResource resource) { - // TODO implement serializer support for guard conditions - false - } - - override ParserRuleParameters getModel(String model) throws Exception { - return super.getModel(model) as ParserRuleParameters - } - - protected def getModelWithErrors(String model) throws Exception { - return getModelAndExpect(model, EXPECT_ERRORS) as ParserRuleParameters - } - - @Test - def void testScenario1_first() { - val instance = '#1 first'.model - assertEquals('first', instance.scenario.first) - } - - @Test - def void testScenario2_second() { - val instance = '#2 second'.model - assertEquals('second', instance.scenario.second) - } - - @Test - def void testScenario3_keyword() { - val instance = '#3 keyword'.model - assertEquals('keyword', instance.scenario.first) - } - - @Test - def void testScenario3_id() { - val instance = '#3 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario4_keyword() { - val instance = '#4 keyword'.modelWithErrors - assertEquals(null, instance.scenario.first) - assertEquals(1, instance.eResource.errors.size) - assertEquals("mismatched input 'keyword' expecting RULE_ID", instance.eResource.errors.head.message) - } - - @Test - def void testScenario4_id() { - val instance = '#4 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario5_keyword() { - val instance = '#5 keyword'.model - assertEquals('keyword', instance.scenario.first) - } - - @Test - def void testScenario5_id() { - val instance = '#5 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario6_keyword() { - val instance = '#6 keyword'.modelWithErrors - assertEquals(null, instance.scenario) - assertEquals("no viable alternative at input '#6'", instance.eResource.errors.head.message) - } - - @Test - def void testScenario6_id() { - val instance = '#6 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario7_keyword() { - val instance = '#7 keyword'.model - assertEquals('keyword', instance.scenario.first) - } - - @Test - def void testScenario7_id() { - val instance = '#7 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario8_keyword() { - val instance = '#8 keyword'.model - assertEquals('keyword', instance.scenario.second) - } - - @Test - def void testScenario8_id() { - val instance = '#8 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario9_keyword_keyword() { - val instance = '#9 keyword keyword'.model - assertEquals('keyword', instance.scenario.second) - } - - @Test - def void testScenario9_id_keyword() { - val instance = '#9 id keyword'.model - assertEquals('id', instance.scenario.second) - } - - @Test - def void testScenario9_id() { - val instance = '#9 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario9_keyword() { - val instance = '#9 keyword'.model - assertEquals('keyword', instance.scenario.first) - } - - @Test - def void testScenario10_keyword_keyword() { - val instance = '#10 keyword keyword'.model - assertEquals('keyword', instance.scenario.second) - } - - @Test - def void testScenario10_id_keyword() { - val instance = '#10 id keyword'.model - assertEquals('id', instance.scenario.second) - } - - @Test - def void testScenario10_id() { - val instance = '#10 id'.model - assertEquals('id', instance.scenario.first) - } - - @Test - def void testScenario10_keyword() { - val instance = '#10 keyword'.modelWithErrors - assertEquals('keyword', instance.scenario.second) - assertEquals("mismatched input '' expecting 'keyword'", instance.eResource.errors.head.message) - } - - @Test - def void testScenario11_keyword_keyword() { - val instance = '#11 keyword keyword'.model - assertEquals('keyword', instance.scenario.first) - } - - @Test - def void testScenario11_id_keyword() { - val instance = '#11 id keyword'.model - assertEquals('id', instance.scenario.second) - } -} \ No newline at end of file diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java new file mode 100644 index 000000000..46f9c7166 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015, 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.parser.parameters; + +/** + * @author Sebastian Zarnekow - Initial contribution and API + */ +public class NoParametersParsingTest extends AbstractParametersParsingTest { + @Override + public void setUp() throws Exception { + super.setUp(); + this.with(new NoParametersTestLanguageStandaloneSetup()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java new file mode 100644 index 000000000..c867a821d --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015, 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.parser.parameters; + +/** + * @author Sebastian Zarnekow - Initial contribution and API + */ +public class ParametersParsingTest extends AbstractParametersParsingTest { + + @Override + public void setUp() throws Exception { + super.setUp(); + with(new ParametersTestLanguageStandaloneSetup()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java new file mode 100644 index 000000000..00394ec77 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015, 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.parser.parameters; + +/** + * @author Sebastian Zarnekow - Initial contribution and API + */ +public class ParametersParsingTestEx extends AbstractParametersParsingTest { + @Override + public void setUp() throws Exception { + super.setUp(); + this.with(new ParametersTestLanguageExStandaloneSetup()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTests.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTests.xtend deleted file mode 100644 index 94deac353..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/ParametersParsingTests.xtend +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 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.parser.parameters - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -class ParametersParsingTest extends AbstractParametersParsingTest { - override void setUp() throws Exception { - super.setUp(); - with(new ParametersTestLanguageStandaloneSetup); - } -} - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -class TwoParametersParsingTest extends AbstractParametersParsingTest { - override void setUp() throws Exception { - super.setUp(); - with(new TwoParametersTestLanguageStandaloneSetup); - } -} - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -class ParametersParsingTestEx extends AbstractParametersParsingTest { - override void setUp() throws Exception { - super.setUp(); - with(new ParametersTestLanguageExStandaloneSetup); - } -} - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -class NoParametersParsingTest extends AbstractParametersParsingTest { - override void setUp() throws Exception { - super.setUp(); - with(new NoParametersTestLanguageStandaloneSetup); - } -} \ No newline at end of file diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java new file mode 100644 index 000000000..da81e169b --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2015, 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.parser.parameters; + +/** + * @author Sebastian Zarnekow - Initial contribution and API + */ +public class TwoParametersParsingTest extends AbstractParametersParsingTest { + @Override + public void setUp() throws Exception { + super.setUp(); + this.with(new TwoParametersTestLanguageStandaloneSetup()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/AbstractResourceSetTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/AbstractResourceSetTest.java new file mode 100644 index 000000000..6cfd303aa --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/AbstractResourceSetTest.java @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2012, 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.resource; + +import java.io.File; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.junit.Assert; +import org.junit.Test; + +import com.google.common.base.Objects; + +/** + * @author Sven Efftinge - Initial contribution and API + */ +public abstract class AbstractResourceSetTest { + protected abstract ResourceSetImpl createEmptyResourceSet(); + + @Test + public void testDemandLoadedResourcesAreInMap() { + ResourceSetImpl rs = this.createEmptyResourceSet(); + Resource.Factory nullFactory = new Resource.Factory() { + + @Override + public Resource createResource(URI uri) { + NullResource result = new NullResource(); + result.setURI(uri); + return result; + } + }; + rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", nullFactory); + Assert.assertEquals(0, rs.getURIResourceMap().size()); + URI uri = URI.createURI("file:/does/not/exist.xmi"); + Resource demandLoaded = rs.getResource(uri, true); + Assert.assertNotNull(demandLoaded); + Resource second = rs.getResource(uri, true); + Assert.assertSame(demandLoaded, second); + Assert.assertEquals(1, rs.getURIResourceMap().size()); + } + + @Test + public void testResourceLocatorIsUsed() { + ResourceSetImpl rs = this.createEmptyResourceSet(); + XtextResource resource = new XtextResource(); + resource.setURI(URI.createFileURI(new File("foo").getAbsolutePath())); + new ResourceSetImpl.ResourceLocator(rs) { + @Override + public Resource getResource(URI uri, boolean loadOnDemand) { + if (Objects.equal(uri, resource.getURI())) { + return resource; + } + throw new IllegalArgumentException(uri.toString()); + } + }; + Assert.assertSame(resource, rs.getResource(resource.getURI(), true)); + Assert.assertTrue(rs.getResources().isEmpty()); + Assert.assertNull(resource.getResourceSet()); + try { + rs.getResource(resource.getURI().appendSegment("doesNotExist"), true); + Assert.fail(); + } catch (IllegalArgumentException e) { + Assert.assertTrue(e.getMessage().endsWith("doesNotExist")); + } + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.java new file mode 100644 index 000000000..f1ce1f7dc --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2014, 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.resource; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.testlanguages.OptionalEmptyTestLanguageStandaloneSetup; +import org.eclipse.xtext.tests.AbstractXtextTests; +import org.eclipse.xtext.util.StringInputStream; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Jan Koehnlein - Initial contribution and API + */ +public class Bug451668Test extends AbstractXtextTests { + public static class TestResource extends DerivedStateAwareResource { + private int contentsCalls = 0; + + @Override + public synchronized EList getContents() { + contentsCalls++; + return super.getContents(); + } + } + + @Test + public void testUnloadAndGetContents() throws Exception { + with(OptionalEmptyTestLanguageStandaloneSetup.class); + Bug451668Test.TestResource r = get(Bug451668Test.TestResource.class); + r.setURI(URI.createURI("foo.dummy")); + r.load(new StringInputStream(""), null); + Assert.assertTrue(r.isLoaded()); + int callsBeforeUnload = r.contentsCalls; + r.unload(); + Assert.assertEquals(callsBeforeUnload, r.contentsCalls); + Assert.assertFalse(r.isLoaded()); + Assert.assertNull(r.getParseResult()); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.xtend deleted file mode 100644 index c17fcb9dd..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/Bug451668Test.xtend +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014, 2017 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.resource - -import java.io.IOException -import org.eclipse.emf.common.util.EList -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.EObject -import org.eclipse.xtext.testlanguages.OptionalEmptyTestLanguageStandaloneSetup -import org.eclipse.xtext.tests.AbstractXtextTests -import org.eclipse.xtext.util.StringInputStream -import org.junit.Test - -/** - * @author Jan Koehnlein - Initial contribution and API - */ -class Bug451668Test extends AbstractXtextTests { - - static class TestResource extends DerivedStateAwareResource { - int contentsCalls = 0 - - override synchronized EList getContents() { - contentsCalls++; - return super.getContents() - } - } - - @Test def void testUnloadAndGetContents() throws IOException { - with(OptionalEmptyTestLanguageStandaloneSetup) - var r = get(TestResource) - r.setURI(URI.createURI('foo.dummy')) - r.load(new StringInputStream(''), null) - assertTrue(r.isLoaded()) - val callsBeforeUnload = r.contentsCalls - r.unload() - assertEquals(callsBeforeUnload, r.contentsCalls) - assertFalse(r.isLoaded) - assertNull(r.parseResult) - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/NullResource.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/NullResource.java similarity index 71% rename from org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/NullResource.java rename to org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/NullResource.java index 5216f83a5..f63617170 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/NullResource.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/NullResource.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2012, 2018 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) 2012, 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. @@ -12,9 +12,8 @@ import java.io.IOException; import java.util.Map; import org.eclipse.emf.ecore.resource.impl.ResourceImpl; -@SuppressWarnings("all") public class NullResource extends ResourceImpl { - @Override - public void load(final Map options) throws IOException { - } + @Override + public void load(Map options) throws IOException { + } } diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/ResourceSetTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/ResourceSetTest.java new file mode 100644 index 000000000..76bc13544 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/ResourceSetTest.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2012, 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.resource; + +import java.util.HashMap; + +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +public class ResourceSetTest extends AbstractResourceSetTest { + @Override + protected ResourceSetImpl createEmptyResourceSet() { + ResourceSetImpl rs = new ResourceSetImpl(); + rs.setURIResourceMap(new HashMap<>()); + return rs; + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java new file mode 100644 index 000000000..8fd00969a --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io/) 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.resource; + +import java.util.Collections; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.xtext.ParserRule; +import org.eclipse.xtext.nodemodel.util.NodeModelUtils; +import org.eclipse.xtext.testlanguages.ActionTestLanguage3StandaloneSetup; +import org.eclipse.xtext.testlanguages.ReferenceGrammarTestLanguageStandaloneSetup; +import org.eclipse.xtext.testlanguages.services.ActionTestLanguage3GrammarAccess; +import org.eclipse.xtext.testlanguages.services.ReferenceGrammarTestLanguageGrammarAccess; +import org.eclipse.xtext.tests.AbstractXtextTests; +import org.eclipse.xtext.util.StringInputStream; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Moritz Eysholdt - Initial contribution and API + */ +public class SetEntryPointOnXtextResourceTest extends AbstractXtextTests { + @Test + public void test1() throws Exception { + with(ReferenceGrammarTestLanguageStandaloneSetup.class); + String model = "kind (Hugo 13)"; + ParserRule kindRule = get(ReferenceGrammarTestLanguageGrammarAccess.class).getKindRule(); + XtextResource resource = createResource(); + // test 1: parse and assume there are no errors + resource.setEntryPoint(kindRule); + resource.load(new StringInputStream(model), Collections.emptyMap()); + Assert.assertTrue(resource.getErrors().isEmpty()); + Assert.assertEquals(kindRule, NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode())); + // test 2: update and assume node model does not change + String originalNodeModel = NodeModelUtils.compactDump(resource.getParseResult().getRootNode(), false); + resource.update(0, model.length(), " " + model + " "); + String reparsedNodeModel = NodeModelUtils.compactDump(resource.getParseResult().getRootNode(), false); + Assert.assertEquals(originalNodeModel, reparsedNodeModel); + // test 3: change parser rule + ParserRule erwachsenerRule = get(ReferenceGrammarTestLanguageGrammarAccess.class).getErwachsenerRule(); + resource.setEntryPoint(erwachsenerRule); + resource.update(0, model.length(), "erwachsener (Peter 30)"); + Assert.assertEquals(erwachsenerRule, + NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode())); + } + + @Test + public void test2() throws Exception { + with(ActionTestLanguage3StandaloneSetup.class); + ParserRule rule = get(ActionTestLanguage3GrammarAccess.class).getProductionRule1Rule(); + String model = "X \"Y\" 42"; + XtextResource resource = createResource(); + resource.setEntryPoint(rule); + resource.load(new StringInputStream(model), Collections.emptyMap()); + Assert.assertTrue(resource.getErrors().isEmpty()); + ParserRule entryRule = NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode()); + Assert.assertEquals(rule, entryRule); + } + + @Test + public void test3() throws Exception { + with(ActionTestLanguage3StandaloneSetup.class); + ParserRule rule = get(ActionTestLanguage3GrammarAccess.class).getProductionRule2Rule(); + String model = "\"Y\" X42"; + XtextResource resource = createResource(); + resource.setEntryPoint(rule); + resource.load(new StringInputStream(model), Collections.emptyMap()); + Assert.assertTrue(resource.getErrors().isEmpty()); + ParserRule entryRule = NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode()); + Assert.assertEquals(rule, entryRule); + } + + private XtextResource createResource() { + return (XtextResource) get(IResourceFactory.class).createResource(URI.createURI("dummy." + getCurrentFileExtension())); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.xtend deleted file mode 100644 index a7d171e2f..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.xtend +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io/) 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.resource - -import org.eclipse.emf.common.util.URI -import org.eclipse.xtext.nodemodel.util.NodeModelUtils -import org.eclipse.xtext.testlanguages.ActionTestLanguage3StandaloneSetup -import org.eclipse.xtext.testlanguages.ReferenceGrammarTestLanguageStandaloneSetup -import org.eclipse.xtext.testlanguages.services.ReferenceGrammarTestLanguageGrammarAccess -import org.eclipse.xtext.tests.AbstractXtextTests -import org.eclipse.xtext.util.StringInputStream -import org.junit.Test -import org.eclipse.xtext.testlanguages.services.ActionTestLanguage3GrammarAccess - -/** - * @author Moritz Eysholdt - Initial contribution and API - */ -class SetEntryPointOnXtextResourceTest extends AbstractXtextTests { - - @Test def void test1() { - with(ReferenceGrammarTestLanguageStandaloneSetup) - val model = "kind (Hugo 13)" - - val kindRule = get(ReferenceGrammarTestLanguageGrammarAccess).kindRule - val resource = createResource() - - // test 1: parse and assume there are no errors - resource.entryPoint = kindRule - resource.load(new StringInputStream(model), emptyMap) - assertTrue(resource.errors.isEmpty) - assertEquals(kindRule, NodeModelUtils.getEntryParserRule(resource.parseResult.rootNode)) - - // test 2: update and assume node model does not change - val originalNodeModel = NodeModelUtils.compactDump(resource.parseResult.rootNode, false) - resource.update(0, model.length, " " + model + " ") - val reparsedNodeModel = NodeModelUtils.compactDump(resource.parseResult.rootNode, false) - assertEquals(originalNodeModel, reparsedNodeModel) - - // test 3: change parser rule - val erwachsenerRule = get(ReferenceGrammarTestLanguageGrammarAccess).erwachsenerRule - resource.entryPoint = erwachsenerRule - resource.update(0, model.length, "erwachsener (Peter 30)") - assertEquals(erwachsenerRule, NodeModelUtils.getEntryParserRule(resource.parseResult.rootNode)) - } - - @Test def void test2() { - with(ActionTestLanguage3StandaloneSetup) - val rule = get(ActionTestLanguage3GrammarAccess).productionRule1Rule - val model = "X \"Y\" 42" - val resource = createResource() - resource.entryPoint = rule - resource.load(new StringInputStream(model), emptyMap) - assertTrue(resource.errors.isEmpty) - val entryRule = NodeModelUtils.getEntryParserRule(resource.parseResult.rootNode) - assertEquals(rule, entryRule) - } - - @Test def void test3() { - with(ActionTestLanguage3StandaloneSetup) - val rule = get(ActionTestLanguage3GrammarAccess).productionRule2Rule - val model = "\"Y\" X42" - val resource = createResource() - resource.entryPoint = rule - resource.load(new StringInputStream(model), emptyMap) - assertTrue(resource.errors.isEmpty) - val entryRule = NodeModelUtils.getEntryParserRule(resource.parseResult.rootNode) - assertEquals(rule, entryRule) - } - - def private createResource() { - get(IResourceFactory).createResource(URI.createURI("dummy." + currentFileExtension)) as XtextResource - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/XtextResourceSetTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.java similarity index 52% rename from org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/XtextResourceSetTest.java rename to org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.java index 81ce700c0..51f655098 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/XtextResourceSetTest.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2012, 2018 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) 2012, 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. @@ -8,13 +8,9 @@ */ package org.eclipse.xtext.resource; -import org.eclipse.xtext.resource.AbstractXtextResourceSetTest; -import org.eclipse.xtext.resource.XtextResourceSet; - -@SuppressWarnings("all") public class XtextResourceSetTest extends AbstractXtextResourceSetTest { - @Override - protected XtextResourceSet createEmptyResourceSet() { - return new XtextResourceSet(); - } + @Override + protected XtextResourceSet createEmptyResourceSet() { + return new XtextResourceSet(); + } } diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.xtend index 47aa5bb67..f945fc76a 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.xtend +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/XtextResourceSetTest.xtend @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2018 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) 2012, 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. @@ -9,72 +9,11 @@ package org.eclipse.xtext.resource import java.io.File -import java.io.IOException -import java.util.Map import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.emf.ecore.resource.impl.ResourceImpl -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl import org.junit.Test import static org.junit.Assert.* -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.ResourceLocator - -/** - * @author Sven Efftinge - Initial contribution and API - */ -abstract class AbstractResourceSetTest { - - def protected ResourceSetImpl createEmptyResourceSet() - - @Test - def void testDemandLoadedResourcesAreInMap() { - val rs = createEmptyResourceSet - val Resource.Factory nullFactory = [ uri | - val result = new NullResource - result.URI = uri - result - ] - rs.resourceFactoryRegistry.extensionToFactoryMap.put('xmi', nullFactory) - assertEquals(0, rs.URIResourceMap.size) - val uri = URI.createURI('file:/does/not/exist.xmi') - val demandLoaded = rs.getResource(uri, true) - assertNotNull(demandLoaded) - val second = rs.getResource(uri, true) - assertSame(demandLoaded, second) - - assertEquals(1, rs.URIResourceMap.size) - } - - @Test - def void testResourceLocatorIsUsed() { - val rs = createEmptyResourceSet - - val resource = new XtextResource - resource.URI = URI.createFileURI(new File('foo').absolutePath) - - // resource locators register themselves on the resource set as a side effect in their constructor - new ResourceLocator(rs) { - override getResource(URI uri, boolean loadOnDemand) { - if (uri == resource.URI) { - return resource; - } - throw new IllegalArgumentException(uri.toString) - } - } - assertSame(resource, rs.getResource(resource.URI, true)) - assertTrue(rs.resources.isEmpty) - assertNull(resource.resourceSet) - - try { - rs.getResource(resource.URI.appendSegment("doesNotExist"), true) - fail() - } catch(IllegalArgumentException e) { - assertTrue(e.message.endsWith("doesNotExist")) - } - } - -} abstract class AbstractXtextResourceSetTest extends AbstractResourceSetTest { @@ -320,30 +259,6 @@ abstract class AbstractXtextResourceSetTest extends AbstractResourceSetTest { } } -class NullResource extends ResourceImpl { - - override load(Map options) throws IOException { - // don't try to load me - } - -} - -class ResourceSetTest extends AbstractResourceSetTest { - - override protected createEmptyResourceSet() { - return new ResourceSetImpl => [ URIResourceMap = newHashMap ] - } - -} - -class XtextResourceSetTest extends AbstractXtextResourceSetTest { - - override protected createEmptyResourceSet() { - new XtextResourceSet - } - -} - class SynchronizedXtextResourceSetTest extends AbstractXtextResourceSetTest { override protected createEmptyResourceSet() { diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java new file mode 100644 index 000000000..7db835f63 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java @@ -0,0 +1,139 @@ +/** + * Copyright (c) 2014, 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.resource.persistence; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.xtext.naming.QualifiedName; +import org.junit.Assert; +import org.junit.Test; + +import com.google.common.collect.Lists; + +/** + * @author Sven Efftinge - Initial contribution and API + */ +public class SerializableResourceDescriptionTest { + @Test + public void testSerialization() throws Exception { + URI uri = URI.createURI("file:/foo/bar.baz.foo"); + SerializableResourceDescription before = new SerializableResourceDescription(); + before.setURI(uri); + SerializableReferenceDescription rd1 = new SerializableReferenceDescription(); + rd1.setSourceEObjectUri(uri.appendFragment("foo")); + rd1.setTargetEObjectUri(uri.appendFragment("hubble")); + rd1.setContainerEObjectURI(uri.appendFragment("baz")); + rd1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd1.setIndexInList(1); + SerializableReferenceDescription rd2 = new SerializableReferenceDescription(); + rd2.setSourceEObjectUri(uri.appendFragment("foo2")); + rd2.setTargetEObjectUri(uri.appendFragment("hubble2")); + rd2.setContainerEObjectURI(uri.appendFragment("baz2")); + rd2.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd2.setIndexInList(2); + before.setReferences(Lists.newArrayList(rd1, rd2)); + SerializableEObjectDescription od1 = new SerializableEObjectDescription(); + od1.setEObjectURI(uri.appendFragment("baz")); + od1.qualifiedName = QualifiedName.create("foo", "baz"); + od1.setEClass(EcorePackage.eINSTANCE.getEAttribute()); + od1.userData = new HashMap<>(); + od1.userData.put("myKey", "myValue"); + before.setDescriptions(Lists.newArrayList(od1)); + before.setImportedNames(Lists.newArrayList(QualifiedName.create("foo"), QualifiedName.create("foo", "bar"))); + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream objectOut = new ObjectOutputStream(bout); + objectOut.writeObject(before); + ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray())); + SerializableResourceDescription after = (SerializableResourceDescription) in.readObject(); + assertDescriptionsEqual(before, after); + } + + public void assertDescriptionsEqual(SerializableResourceDescription before, SerializableResourceDescription after) { + Assert.assertEquals(before.getURI(), after.getURI()); + Assert.assertEquals(before.getImportedNames(), after.getImportedNames()); + Assert.assertEquals(before.getReferences().size(), after.getReferences().size()); + for (int i = 0; i < before.getReferences().size(); i++) { + SerializableReferenceDescription beforeRef = before.getReferences().get(i); + SerializableReferenceDescription afterRef = after.getReferences().get(i); + Assert.assertEquals(beforeRef.getContainerEObjectURI(), afterRef.getContainerEObjectURI()); + Assert.assertEquals(beforeRef.getSourceEObjectUri(), afterRef.getSourceEObjectUri()); + Assert.assertEquals(beforeRef.getTargetEObjectUri(), afterRef.getTargetEObjectUri()); + Assert.assertEquals(beforeRef.getEReference(), afterRef.getEReference()); + Assert.assertEquals(beforeRef.getIndexInList(), afterRef.getIndexInList()); + } + Assert.assertEquals(before.getDescriptions().size(), after.getDescriptions().size()); + for (int i_1 = 0; i_1 < before.getDescriptions().size(); i_1++) { + SerializableEObjectDescription beforeDesc = before.getDescriptions().get(i_1); + SerializableEObjectDescription afterDesc = after.getDescriptions().get(i_1); + Assert.assertEquals(beforeDesc.getEClass(), afterDesc.getEClass()); + Assert.assertEquals(beforeDesc.getName(), afterDesc.getName()); + Assert.assertEquals(beforeDesc.qualifiedName, afterDesc.qualifiedName); + Assert.assertEquals(beforeDesc.userData, afterDesc.userData); + Assert.assertEquals(beforeDesc.getEObjectURI(), afterDesc.getEObjectURI()); + } + } + + @Test + public void testNullSafeSerialization() throws Exception { + URI uri = URI.createURI("file:/foo/bar.baz.foo"); + SerializableResourceDescription before = new SerializableResourceDescription(); + before.setURI(uri); + SerializableReferenceDescription rd1 = new SerializableReferenceDescription(); + rd1.setSourceEObjectUri(uri.appendFragment("foo")); + rd1.setTargetEObjectUri(null); + rd1.setContainerEObjectURI(uri.appendFragment("baz")); + rd1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd1.setIndexInList(1); + SerializableReferenceDescription rd2 = new SerializableReferenceDescription(); + rd2.setSourceEObjectUri(null); + rd2.setTargetEObjectUri(uri.appendFragment("hubble2")); + rd2.setContainerEObjectURI(uri.appendFragment("baz2")); + rd2.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd2.setIndexInList(2); + SerializableReferenceDescription rd3 = new SerializableReferenceDescription(); + rd3.setSourceEObjectUri(uri.appendFragment("foo")); + rd3.setTargetEObjectUri(uri.appendFragment("hubble2")); + rd3.setContainerEObjectURI(null); + rd3.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd3.setIndexInList(2); + SerializableReferenceDescription rd4 = new SerializableReferenceDescription(); + rd4.setSourceEObjectUri(uri.appendFragment("foo")); + rd4.setTargetEObjectUri(null); + rd4.setContainerEObjectURI(null); + rd4.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd4.setIndexInList(2); + SerializableReferenceDescription rd5 = new SerializableReferenceDescription(); + rd5.setSourceEObjectUri(null); + rd5.setTargetEObjectUri(null); + rd5.setContainerEObjectURI(null); + rd5.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); + rd5.setIndexInList(2); + before.setReferences(Lists.newArrayList(rd1, rd2, rd3, rd4, rd5)); + SerializableEObjectDescription od1 = new SerializableEObjectDescription(); + od1.setEObjectURI(uri.appendFragment("baz")); + od1.qualifiedName = QualifiedName.create("foo", "baz"); + od1.setEClass(EcorePackage.eINSTANCE.getEAttribute()); + od1.userData = new HashMap<>(); + od1.userData.put("myKey", "myValue"); + before.setDescriptions(Lists.newArrayList(od1)); + before.setImportedNames(Lists.newArrayList(QualifiedName.create("foo"), QualifiedName.create("foo", "bar"))); + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + ObjectOutputStream objectOut = new ObjectOutputStream(bout); + objectOut.writeObject(before); + ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray())); + SerializableResourceDescription after = (SerializableResourceDescription) in.readObject(); + assertDescriptionsEqual(before, after); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.xtend deleted file mode 100644 index 092d7097e..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.xtend +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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.resource.persistence - -import java.io.ByteArrayInputStream -import java.io.ByteArrayOutputStream -import java.io.ObjectInputStream -import java.io.ObjectOutputStream -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.EcorePackage -import org.eclipse.xtext.naming.QualifiedName -import org.junit.Test - -import static org.junit.Assert.* - -/** - * @author Sven Efftinge - Initial contribution and API - */ -class SerializableResourceDescriptionTest { - - @Test def void testSerialization() { - val uri = URI::createURI("file:/foo/bar.baz.foo") - val before = new SerializableResourceDescription => [ - URI = uri - references = #[ - new SerializableReferenceDescription => [ - sourceEObjectUri = uri.appendFragment('foo') - targetEObjectUri = uri.appendFragment('hubble') - containerEObjectURI = uri.appendFragment('baz') - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 1 - ], - new SerializableReferenceDescription => [ - sourceEObjectUri = uri.appendFragment('foo2') - targetEObjectUri = uri.appendFragment('hubble2') - containerEObjectURI = uri.appendFragment('baz2') - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 2 - ] - ] - descriptions = #[ - new SerializableEObjectDescription => [ - EObjectURI = uri.appendFragment('baz') - qualifiedName = QualifiedName.create('foo','baz') - EClass = EcorePackage.eINSTANCE.EAttribute - userData = newHashMap('myKey' -> 'myValue') - ] - ] - importedNames = #[QualifiedName.create('foo'), QualifiedName.create('foo','bar')] - ] - - val bout = new ByteArrayOutputStream() - val objectOut = new ObjectOutputStream(bout) - objectOut.writeObject(before) - val in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray)) - val after = in.readObject as SerializableResourceDescription - - assertDescriptionsEqual(before, after) - } - - def void assertDescriptionsEqual(SerializableResourceDescription before, SerializableResourceDescription after) { - assertEquals(before.URI, after.URI) - assertEquals(before.importedNames, after.importedNames) - - assertEquals(before.references.size, after.references.size) - for (int i : 0.. [ - URI = uri - references = #[ - new SerializableReferenceDescription => [ - sourceEObjectUri = uri.appendFragment('foo') - targetEObjectUri = null - containerEObjectURI = uri.appendFragment('baz') - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 1 - ], - new SerializableReferenceDescription => [ - sourceEObjectUri = null - targetEObjectUri = uri.appendFragment('hubble2') - containerEObjectURI = uri.appendFragment('baz2') - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 2 - ], - new SerializableReferenceDescription => [ - sourceEObjectUri = uri.appendFragment('foo') - targetEObjectUri = uri.appendFragment('hubble2') - containerEObjectURI = null - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 2 - ], - new SerializableReferenceDescription => [ - sourceEObjectUri = uri.appendFragment('foo') - targetEObjectUri = null - containerEObjectURI = null - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 2 - ], - new SerializableReferenceDescription => [ - sourceEObjectUri = null - targetEObjectUri = null - containerEObjectURI = null - EReference = EcorePackage.eINSTANCE.EAnnotation_Contents - indexInList = 2 - ] - ] - descriptions = #[ - new SerializableEObjectDescription => [ - EObjectURI = uri.appendFragment('baz') - qualifiedName = QualifiedName.create('foo','baz') - EClass = EcorePackage.eINSTANCE.EAttribute - userData = newHashMap('myKey' -> 'myValue') - ] - ] - importedNames = #[QualifiedName.create('foo'), QualifiedName.create('foo','bar')] - ] - - val bout = new ByteArrayOutputStream() - val objectOut = new ObjectOutputStream(bout) - objectOut.writeObject(before) - val in = new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray)) - val after = in.readObject as SerializableResourceDescription - assertDescriptionsEqual(before, after) - } -} \ No newline at end of file diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.java new file mode 100644 index 000000000..0518fc4d6 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.java @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2017, 2020 TypeFox GmbH (http://www.typefox.io) 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.serializer; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtext.resource.DefaultFragmentProvider; +import org.eclipse.xtext.resource.FileExtensionProvider; +import org.eclipse.xtext.resource.IFragmentProvider; +import org.eclipse.xtext.resource.XtextResource; +import org.eclipse.xtext.resource.XtextResourceSet; +import org.eclipse.xtext.serializer.syntacticsequencertest.Model; +import org.eclipse.xtext.serializer.syntacticsequencertest.SingleCrossReference; +import org.eclipse.xtext.serializer.syntacticsequencertest.SyntacticsequencertestFactory; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.XtextRunner; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +@RunWith(XtextRunner.class) +@InjectWith(SyntacticSequencerTestLanguageInjectorProvider.class) +public class TokenSerializerTest { + @Inject + private ISerializer serializer; + + @Inject + private FileExtensionProvider fileExtensionProvider; + + @Inject + private Provider resourceSetProvider; + + private SyntacticsequencertestFactory factory = SyntacticsequencertestFactory.eINSTANCE; + + private void assertSerializesTo(Model model, CharSequence expectation) { + Assert.assertEquals(expectation.toString().trim(), serializer.serialize(model).trim()); + } + + private URI getFileURI(String name) { + return URI.createFileURI(name + "." + fileExtensionProvider.getPrimaryFileExtension()); + } + + @Test + public void testConstructedCrossReferenceWithProxy() { + XtextResourceSet resourceSet = resourceSetProvider.get(); + XtextResource resource = (XtextResource) resourceSet.createResource(getFileURI("dummy")); + Model model = factory.createModel(); + SingleCrossReference myRef = factory.createSingleCrossReference(); + myRef.setName("myref"); + model.setX5(myRef); + resource.getContents().add(model); + SingleCrossReference singleRef = model.getX5(); + SingleCrossReference fooProxyRef = factory.createSingleCrossReference(); + ((InternalEObject) fooProxyRef).eSetProxyURI(resource.getURI().appendFragment("foo")); + singleRef.setRef3(fooProxyRef); + resource.setFragmentProvider(new DefaultFragmentProvider() { + @Override + public EObject getEObject(Resource resource, String fragment, IFragmentProvider.Fallback fallback) { + if ("foo".equals(fragment)) { + return model.getX5(); + } else { + return super.getEObject(resource, fragment, fallback); + } + } + }); + assertSerializesTo(model, "#5 myref kw3 myref"); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.xtend deleted file mode 100644 index 2563e9ddd..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/serializer/TokenSerializerTest.xtend +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.serializer - -import com.google.inject.Inject -import com.google.inject.Provider -import org.eclipse.emf.common.util.URI -import org.eclipse.emf.ecore.InternalEObject -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.xtext.resource.DefaultFragmentProvider -import org.eclipse.xtext.resource.FileExtensionProvider -import org.eclipse.xtext.resource.XtextResource -import org.eclipse.xtext.resource.XtextResourceSet -import org.eclipse.xtext.serializer.syntacticsequencertest.Model -import org.eclipse.xtext.serializer.syntacticsequencertest.SyntacticsequencertestFactory -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.XtextRunner -import org.junit.Test -import org.junit.runner.RunWith - -import static org.junit.Assert.* - -@RunWith(XtextRunner) -@InjectWith(SyntacticSequencerTestLanguageInjectorProvider) -class TokenSerializerTest { - - @Inject extension ISerializer - - @Inject FileExtensionProvider fileExtensionProvider - - @Inject Provider resourceSetProvider - - val factory = SyntacticsequencertestFactory.eINSTANCE - - private def assertSerializesTo(Model model, CharSequence expectation) { - assertEquals(expectation.toString.trim, model.serialize.trim) - } - - private def getFileURI(String name) { - URI.createFileURI(name + '.' + fileExtensionProvider.primaryFileExtension) - } - - @Test - def void testConstructedCrossReferenceWithProxy() { - val resourceSet = resourceSetProvider.get - val resource = resourceSet.createResource('dummy'.fileURI) as XtextResource - val model = factory.createModel => [ - x5 = factory.createSingleCrossReference => [ - name = 'myref' - ] - ] - resource.contents += model - model.x5.ref3 = factory.createSingleCrossReference => [ - (it as InternalEObject).eSetProxyURI(resource.URI.appendFragment('foo')) - ] - resource.fragmentProvider = new DefaultFragmentProvider { - override getEObject(Resource resource, String fragment, Fallback fallback) { - if (fragment == 'foo') - model.x5 - else - super.getEObject(resource, fragment, fallback) - } - } - model.assertSerializesTo(''' - #5 myref kw3 myref - ''') - } - -} \ No newline at end of file diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java new file mode 100644 index 000000000..e000398e9 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2014, 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.tasks; + +import java.util.List; + +import org.eclipse.xtext.preferences.IPreferenceValuesProvider; +import org.eclipse.xtext.preferences.MapBasedPreferenceValues; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.junit.Assert; +import org.junit.Test; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + +/** + * @author Stefan Oehme - Initial contribution and API + */ +public class PreferenceTaskTagProviderTest { + @Test + public void test() { + TaskTag taskTag1 = new TaskTag(); + taskTag1.setName("Foo"); + taskTag1.setPriority(Priority.LOW); + TaskTag taskTag2 = new TaskTag(); + taskTag2.setName("BAR"); + taskTag2.setPriority(Priority.NORMAL); + TaskTag taskTag3 = new TaskTag(); + taskTag3.setName("baZ"); + taskTag3.setPriority(Priority.HIGH); + List tags = Lists.newArrayList(taskTag1, taskTag2, taskTag3); + String names = PreferenceTaskTagProvider.serializeTags(tags); + String prios = PreferenceTaskTagProvider.serializePriorities(tags); + IPreferenceValuesProvider.SingletonPreferenceValuesProvider valueProvider = new IPreferenceValuesProvider.SingletonPreferenceValuesProvider(); + MapBasedPreferenceValues values = valueProvider.getPreferenceValues(null); + values.put(PreferenceTaskTagProvider.TAGS_KEY.getId(), names); + values.put(PreferenceTaskTagProvider.PRIORITIES_KEY.getId(), prios); + values.put(PreferenceTaskTagProvider.CASE_SENSITIVE_KEY.getId(), "false"); + PreferenceTaskTagProvider tagProvider = new PreferenceTaskTagProvider(); + tagProvider.setPreferenceValuesProvider(valueProvider); + TaskTags parsedTags = tagProvider.getTaskTags(null); + Assert.assertEquals(Boolean.valueOf(false), Boolean.valueOf(parsedTags.isCaseSensitive())); + Assert.assertEquals(tags.size(), IterableExtensions.size(parsedTags)); + int _size = tags.size(); + for (int i = 0; i < _size; i++) { + Assert.assertEquals(tags.get(i), Iterables.get(parsedTags, i)); + } + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.xtend deleted file mode 100644 index f6083795f..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.xtend +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 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.tasks - -import org.eclipse.xtext.preferences.IPreferenceValuesProvider.SingletonPreferenceValuesProvider -import org.junit.Test - -import static org.junit.Assert.* - -/** - * @author Stefan Oehme - Initial contribution and API - */ -class PreferenceTaskTagProviderTest { - @Test - def void test() { - val tags = #[ - new TaskTag => [ - name = "Foo" - priority = Priority.LOW - ], - new TaskTag => [ - name = "BAR" - priority = Priority.NORMAL - ], - new TaskTag => [ - name = "baZ" - priority = Priority.HIGH - ] - ] - val names = PreferenceTaskTagProvider.serializeTags(tags) - val prios = PreferenceTaskTagProvider.serializePriorities(tags) - - val valueProvider = new SingletonPreferenceValuesProvider - val values = valueProvider.getPreferenceValues(null) - - values.put(PreferenceTaskTagProvider.TAGS_KEY.id, names) - values.put(PreferenceTaskTagProvider.PRIORITIES_KEY.id, prios) - values.put(PreferenceTaskTagProvider.CASE_SENSITIVE_KEY.id, "false") - - val tagProvider = new PreferenceTaskTagProvider - tagProvider.preferenceValuesProvider = valueProvider - - val parsedTags = tagProvider.getTaskTags(null) - - assertEquals(false, parsedTags.caseSensitive) - assertEquals(tags.size, parsedTags.size) - for (i : 0 ..< tags.size) { - assertEquals(tags.get(i), parsedTags.get(i)) - } - } -} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.java new file mode 100644 index 000000000..863d02ee1 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.java @@ -0,0 +1,169 @@ +/** + * Copyright (c) 2019, 2020 Malardalen University (http://www.mdh.se) 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.xtext; + +import org.eclipse.xtext.Grammar; +import org.eclipse.xtext.XtextPackage; +import org.eclipse.xtext.XtextRuntimeModule; +import org.eclipse.xtext.XtextStandaloneSetup; +import org.eclipse.xtext.diagnostics.Severity; +import org.eclipse.xtext.preferences.IPreferenceValuesProvider; +import org.eclipse.xtext.preferences.MapBasedPreferenceValues; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.XtextRunner; +import org.eclipse.xtext.testing.util.ParseHelper; +import org.eclipse.xtext.testing.validation.ValidationTestHelper; +import org.eclipse.xtext.tests.AbstractXtextTests; +import org.eclipse.xtext.tests.XtextInjectorProvider; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.google.inject.Guice; +import com.google.inject.Inject; +import com.google.inject.Injector; + +/** + * @author Lorenzo Addazi - Initial contribution and API + */ +@RunWith(XtextRunner.class) +@InjectWith(XtextInjectorProvider.class) +public class Issue1161Test extends AbstractXtextTests { + /** + * @author Lorenzo Addazi - Initial contribution and API + */ + public static class Issue1161StandaloneSetup extends XtextStandaloneSetup { + @Override + public Injector createInjector() { + XtextRuntimeModule module = new XtextRuntimeModule() { + @SuppressWarnings("unused") + public Class bindIPreferenceValuesProvider() { + return IPreferenceValuesProvider.SingletonPreferenceValuesProvider.class; + } + }; + return Guice.createInjector(module); + } + } + + @Inject + private ValidationTestHelper validationTestHelper; + + @Inject + private ParseHelper parseHelper; + + @Inject + private MapBasedPreferenceValues preferences; + + @Override + public void setUp() throws Exception { + super.setUp(); + with(Issue1161Test.Issue1161StandaloneSetup.class); + } + + @Before + public void setPreferences() { + preferences = get(IPreferenceValuesProvider.SingletonPreferenceValuesProvider.class).getPreferenceValues(null); + } + + @After + public void clearPreferences() { + preferences.clear(); + } + + @Test + public void testValidJavaPackageNamingConventionsWithIgnoreSeverity() throws Exception { + assertNoIssue(grammarWithValidJavaPackageNamingConventions()); + } + + @Test + public void testInvalidJavaPackageNamingConventionsWithIgnoreSeverity() throws Exception { + assertNoIssue(grammarWithInvalidJavaPackageNamingConventions()); + } + + @Test + public void testValidJavaPackageNamingConventionsWithErrorSeverity() throws Exception { + setSeverity("error"); + assertNoIssue(grammarWithValidJavaPackageNamingConventions()); + } + + @Test + public void testInvalidJavaPackageNamingConventionsWithErrorSeverity() throws Exception { + setSeverity("error"); + assertError(grammarWithInvalidJavaPackageNamingConventions()); + } + + @Test + public void testValidJavaPackageNamingConventionsWithWarningSeverity() throws Exception { + setSeverity("warning"); + assertNoIssue(grammarWithValidJavaPackageNamingConventions()); + } + + @Test + public void testInvalidJavaPackageNamingConventionsWithWarningSeverity() throws Exception { + setSeverity("warning"); + assertWarning(grammarWithInvalidJavaPackageNamingConventions()); + } + + @Test + public void testValidJavaPackageNamingConventionsWithInfoSeverity() throws Exception { + setSeverity("info"); + assertNoIssue(grammarWithValidJavaPackageNamingConventions()); + } + + @Test + public void testInvalidJavaPackageNamingConventionsWithInfoSeverity() throws Exception { + setSeverity("info"); + assertInfo(grammarWithInvalidJavaPackageNamingConventions()); + } + + private void assertError(final CharSequence grammar) throws Exception { + assertIssue(grammar, Severity.ERROR); + } + + private void assertWarning(final CharSequence grammar) throws Exception { + assertIssue(grammar, Severity.WARNING); + } + + private void assertInfo(final CharSequence grammar) throws Exception { + assertIssue(grammar, Severity.INFO); + } + + private void assertIssue(final CharSequence grammar, final Severity severity) throws Exception { + validationTestHelper.assertIssue(parseHelper.parse(grammar), XtextPackage.Literals.GENERATED_METAMODEL, + XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity); + } + + private void assertNoIssue(final CharSequence grammar) throws Exception { + validationTestHelper.assertNoIssue(parseHelper.parse(grammar), XtextPackage.Literals.GENERATED_METAMODEL, + XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME); + } + + private CharSequence grammarWithValidJavaPackageNamingConventions() { + return grammarWithGeneratedMetamodelName("testissue1161"); + } + + private CharSequence grammarWithInvalidJavaPackageNamingConventions() { + return grammarWithGeneratedMetamodelName("testIssue1161"); + } + + private CharSequence grammarWithGeneratedMetamodelName(final String generatedMetamodelName) { + // @formatter:off + String model = + "grammar test.Issue1161 with org.eclipse.xtext.common.Terminals\n" + + "generate " + generatedMetamodelName + " 'http://issue1161'n" + + "A : {A};"; + // @formatter:on + return model; + } + + private void setSeverity(final String severity) { + preferences.put(XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity); + } +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.xtend deleted file mode 100644 index c7cbe5a77..000000000 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/Issue1161Test.xtend +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Malardalen University (http://www.mdh.se) 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.xtext - -import com.google.inject.Guice -import com.google.inject.Inject -import org.eclipse.xtext.Grammar -import org.eclipse.xtext.XtextPackage -import org.eclipse.xtext.XtextRuntimeModule -import org.eclipse.xtext.XtextStandaloneSetup -import org.eclipse.xtext.diagnostics.Severity -import org.eclipse.xtext.preferences.IPreferenceValuesProvider -import org.eclipse.xtext.preferences.IPreferenceValuesProvider.SingletonPreferenceValuesProvider -import org.eclipse.xtext.preferences.MapBasedPreferenceValues -import org.eclipse.xtext.testing.InjectWith -import org.eclipse.xtext.testing.XtextRunner -import org.eclipse.xtext.testing.util.ParseHelper -import org.eclipse.xtext.testing.validation.ValidationTestHelper -import org.eclipse.xtext.tests.AbstractXtextTests -import org.eclipse.xtext.tests.XtextInjectorProvider -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith - -/** - * @author Lorenzo Addazi - Initial contribution and API - */ -@RunWith(XtextRunner) -@InjectWith(XtextInjectorProvider) -class Issue1161Test extends AbstractXtextTests { - - @Inject extension ValidationTestHelper - @Inject extension ParseHelper - - @Inject MapBasedPreferenceValues preferences - - override setUp() throws Exception { - super.setUp(); - with(Issue1161StandaloneSetup) - } - - @Before def void setPreferences() { - preferences = get(SingletonPreferenceValuesProvider).getPreferenceValues(null) - } - - @After def void clearPreferences() { - preferences.clear - } - - @Test def void testValidJavaPackageNamingConventionsWithIgnoreSeverity() { - grammarWithValidJavaPackageNamingConventions.assertNoIssue - } - - @Test def void testInvalidJavaPackageNamingConventionsWithIgnoreSeverity() { - grammarWithInvalidJavaPackageNamingConventions.assertNoIssue - } - - @Test def void testValidJavaPackageNamingConventionsWithErrorSeverity() { - severity = "error" - grammarWithValidJavaPackageNamingConventions.assertNoIssue - - } - - @Test def void testInvalidJavaPackageNamingConventionsWithErrorSeverity() { - severity = "error" - grammarWithInvalidJavaPackageNamingConventions.assertError - } - - @Test def void testValidJavaPackageNamingConventionsWithWarningSeverity() { - severity = "warning" - grammarWithValidJavaPackageNamingConventions.assertNoIssue - - } - - @Test def void testInvalidJavaPackageNamingConventionsWithWarningSeverity() { - severity = "warning" - grammarWithInvalidJavaPackageNamingConventions.assertWarning - } - - @Test def void testValidJavaPackageNamingConventionsWithInfoSeverity() { - severity = "info" - grammarWithValidJavaPackageNamingConventions.assertNoIssue - - } - - @Test def void testInvalidJavaPackageNamingConventionsWithInfoSeverity() { - severity = "info" - grammarWithInvalidJavaPackageNamingConventions.assertInfo - } - - private def assertError(CharSequence grammar) { - grammar.assertIssue(Severity.ERROR) - } - - private def assertWarning(CharSequence grammar) { - grammar.assertIssue(Severity.WARNING) - } - - private def assertInfo(CharSequence grammar) { - grammar.assertIssue(Severity.INFO) - } - - private def assertIssue(CharSequence grammar, Severity severity) { - grammar.parse.assertIssue(XtextPackage.Literals.GENERATED_METAMODEL, - XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity) - } - - private def assertNoIssue(CharSequence grammar) { - grammar.parse.assertNoIssue(XtextPackage.Literals.GENERATED_METAMODEL, - XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME) - } - - private def grammarWithValidJavaPackageNamingConventions() { - grammarWithGeneratedMetamodelName("testissue1161") - } - - private def grammarWithInvalidJavaPackageNamingConventions() { - grammarWithGeneratedMetamodelName("testIssue1161") - } - - private def grammarWithGeneratedMetamodelName(String generatedMetamodelName) ''' - grammar test.Issue1161 with org.eclipse.xtext.common.Terminals - generate «generatedMetamodelName» "http://issue1161" - A : {A}; - ''' - - private def setSeverity(String severity) { - preferences.put(XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity) - } - - /** - * @author Lorenzo Addazi - Initial contribution and API - */ - static class Issue1161StandaloneSetup extends XtextStandaloneSetup { - override createInjector() { - return Guice.createInjector(new XtextRuntimeModule() { - def Class bindIPreferenceValuesProvider() { - SingletonPreferenceValuesProvider - } - }); - } - } - -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java deleted file mode 100644 index ef07b1487..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/SemanticRegionFinderTest.java +++ /dev/null @@ -1,380 +0,0 @@ -/** - * Copyright (c) 2015, 2017 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.formatting2.regionaccess.internal; - -import com.google.common.collect.ImmutableList; -import com.google.inject.Inject; -import com.google.inject.Provider; -import java.util.Collection; -import java.util.List; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.formatting2.regionaccess.IEObjectRegion; -import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion; -import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegionsFinder; -import org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess; -import org.eclipse.xtext.formatting2.regionaccess.ITextSegment; -import org.eclipse.xtext.formatting2.regionaccess.TextRegionAccessBuilder; -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.AssignedAction; -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Expression; -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Mixed; -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.RegionaccesstestlanguagePackage; -import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Root; -import org.eclipse.xtext.formatting2.regionaccess.internal.services.RegionAccessTestLanguageGrammarAccess; -import org.eclipse.xtext.formatting2.regionaccess.internal.tests.RegionAccessTestLanguageInjectorProvider; -import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.XtextRunner; -import org.eclipse.xtext.testing.util.ParseHelper; -import org.eclipse.xtext.testing.validation.ValidationTestHelper; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.Extension; -import org.eclipse.xtext.xbase.lib.Functions.Function1; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.eclipse.xtext.xbase.lib.Pair; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * @author Moritz Eysholdt - Initial contribution and API - */ -@RunWith(XtextRunner.class) -@InjectWith(RegionAccessTestLanguageInjectorProvider.class) -@SuppressWarnings("all") -public class SemanticRegionFinderTest { - @Inject - @Extension - private ParseHelper parseHelper; - - @Inject - private Provider textRegionAccessBuilder; - - @Inject - @Extension - private ValidationTestHelper validationTestHelper; - - @Inject - @Extension - private RegionAccessTestLanguageGrammarAccess _regionAccessTestLanguageGrammarAccess; - - @Test - public void regionForFeatureAttribute() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.feature(RegionaccesstestlanguagePackage.Literals.MIXED__NAME); - final List actuals = finder.features(RegionaccesstestlanguagePackage.Literals.MIXED__NAME); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForFeatureCrossReference() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (ref foo) action (foo) end"); - final AssignedAction mixed = this.parseAs(_builder, AssignedAction.class); - final IEObjectRegion finder = this.toAccess(mixed).regionForEObject(mixed.getChild()); - final ISemanticRegion actual = finder.getRegionFor().feature(RegionaccesstestlanguagePackage.Literals.MIXED__REF); - final List actuals = finder.getRegionFor().features(RegionaccesstestlanguagePackage.Literals.MIXED__REF); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForFeatureContainmentReference() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo) action"); - final AssignedAction mixed = this.parseAs(_builder, AssignedAction.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - try { - finder.feature(RegionaccesstestlanguagePackage.Literals.ASSIGNED_ACTION__CHILD); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - try { - finder.features(RegionaccesstestlanguagePackage.Literals.ASSIGNED_ACTION__CHILD); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - } - - @Test - public void regionForRuleCallUnassignedTerminal() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (unassigned foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getIDTerminalRuleCall_1_1_0()); - final List actuals = finder.ruleCalls(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getIDTerminalRuleCall_1_1_0()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallToUnassignedTerminal() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (unassigned foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - final List actuals = finder.ruleCallsTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallUnassignedDataType() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (unassigned datatype foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getDatatypeParserRuleCall_1_1_1()); - final List actuals = finder.ruleCalls(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getDatatypeParserRuleCall_1_1_1()); - this.assertEquals("datatype foo", actual, actuals); - } - - @Test - public void regionForRuleCallToUnassignedDataType() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (unassigned datatype foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getDatatypeRule()); - final List actuals = finder.ruleCallsTo(this._regionAccessTestLanguageGrammarAccess.getDatatypeRule()); - this.assertEquals("datatype foo", actual, actuals); - } - - @Test - public void regionForRuleCallAssignedTerminal() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getNameIDTerminalRuleCall_2_2_0_0()); - final ISemanticRegion actuals = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getNameIDTerminalRuleCall_2_2_0_0()); - Assert.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallToAssignedTerminal() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - final ISemanticRegion actuals = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - Assert.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallAssignedDataType() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (datatype foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getDatatypeDatatypeParserRuleCall_2_2_2_0()); - final ISemanticRegion actuals = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getDatatypeDatatypeParserRuleCall_2_2_2_0()); - Assert.assertEquals("datatype foo", actual, actuals); - } - - @Test - public void regionForRuleCallToAssignedDataType() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (datatype foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getDatatypeRule()); - final ISemanticRegion actuals = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getDatatypeRule()); - Assert.assertEquals("datatype foo", actual, actuals); - } - - @Test - public void regionForRuleCallCrossReference() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (ref foo) action (foo) end"); - final AssignedAction mixed = this.parseAs(_builder, AssignedAction.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); - final ISemanticRegion actual = finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getRefMixedIDTerminalRuleCall_2_2_3_1_0_1()); - final List actuals = finder.ruleCalls(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getRefMixedIDTerminalRuleCall_2_2_3_1_0_1()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallToCrossReference() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (ref foo) action (foo) end"); - final AssignedAction mixed = this.parseAs(_builder, AssignedAction.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); - final ISemanticRegion actual = finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - final List actuals = finder.ruleCallsTo(this._regionAccessTestLanguageGrammarAccess.getIDRule()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForRuleCallEObjectParserRule() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (child (foo))"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - try { - finder.ruleCall(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getEobjMixedParserRuleCall_2_2_1_1_0()); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - try { - finder.ruleCalls(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getEobjMixedParserRuleCall_2_2_1_1_0()); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - } - - @Test - public void regionForRuleCallToEObjectParserRule() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (child (foo))"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - try { - finder.ruleCallTo(this._regionAccessTestLanguageGrammarAccess.getMixedRule()); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - try { - finder.ruleCallsTo(this._regionAccessTestLanguageGrammarAccess.getMixedRule()); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalStateException) { - } else { - throw Exceptions.sneakyThrow(_t); - } - } - } - - @Test - public void regionForKeywordString() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.keyword("("); - final List actuals = finder.keywords("("); - this.assertEquals("(", actual, actuals); - } - - @Test - public void regionForKeyword() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.keyword(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getLeftParenthesisKeyword_0()); - final List actuals = finder.keywords(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getLeftParenthesisKeyword_0()); - this.assertEquals("(", actual, actuals); - } - - @Test - public void regionForCrossReference() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (ref foo) action (foo) end"); - final AssignedAction mixed = this.parseAs(_builder, AssignedAction.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed.getChild()).getRegionFor(); - final ISemanticRegion actual = finder.crossRef(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getRefMixedCrossReference_2_2_3_1_0()); - final List actuals = finder.crossRefs(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getRefMixedCrossReference_2_2_3_1_0()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForAssignment() { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("6 (foo)"); - final Mixed mixed = this.parseAs(_builder, Mixed.class); - final ISemanticRegionsFinder finder = this.toAccess(mixed).regionForEObject(mixed).getRegionFor(); - final ISemanticRegion actual = finder.assignment(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getNameAssignment_2_2_0()); - final List actuals = finder.assignments(this._regionAccessTestLanguageGrammarAccess.getMixedAccess().getNameAssignment_2_2_0()); - this.assertEquals("foo", actual, actuals); - } - - @Test - public void regionForKeywordPairs() { - @Extension - final RegionAccessTestLanguageGrammarAccess.ParenthesizedElements rule = this._regionAccessTestLanguageGrammarAccess.getParenthesizedAccess(); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("5 (foo)"); - final Expression expr = this.parseAs(_builder, Expression.class); - final ISemanticRegionsFinder finder = this.toAccess(expr).regionForEObject(expr).getRegionFor(); - final String actual1 = this.pairsToString(finder.keywordPairs("(", ")")); - final String actual2 = this.pairsToString(finder.keywordPairs(rule.getLeftParenthesisKeyword_0(), rule.getRightParenthesisKeyword_2())); - final String expected = "(foo)"; - Assert.assertEquals(expected, actual1); - Assert.assertEquals(expected, actual2); - } - - @Test - public void regionForKeywordPairs2() { - @Extension - final RegionAccessTestLanguageGrammarAccess.ParenthesizedElements rule = this._regionAccessTestLanguageGrammarAccess.getParenthesizedAccess(); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("5 (a + ((b) + c) + d)"); - final Expression expr = this.parseAs(_builder, Expression.class); - final ISemanticRegionsFinder finder = this.toAccess(expr).regionForRootEObject().getAllRegionsFor(); - final String actual1 = this.pairsToString(finder.keywordPairs("(", ")")); - final String actual2 = this.pairsToString(finder.keywordPairs(rule.getLeftParenthesisKeyword_0(), rule.getRightParenthesisKeyword_2())); - final String expected = "(b); ((b) + c); (a + ((b) + c) + d)"; - Assert.assertEquals(expected, actual1); - Assert.assertEquals(expected, actual2); - } - - private String pairsToString(final Iterable> pairs) { - final Function1, String> _function = (Pair it) -> { - return it.getKey().merge(it.getValue()).getText(); - }; - return IterableExtensions.join(IterableExtensions., String>map(pairs, _function), "; "); - } - - private T parseAs(final CharSequence seq, final Class cls) { - try { - final Root result = this.parseHelper.parse(seq); - this.validationTestHelper.assertNoErrors(result); - return cls.cast(result); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - private ITextRegionAccess toAccess(final EObject obj) { - Resource _eResource = obj.eResource(); - return this.textRegionAccessBuilder.get().forNodeModel(((XtextResource) _eResource)).create(); - } - - private void assertEquals(final String expected, final ITextSegment single, final Collection regions) { - Assert.assertEquals(expected, single.getText()); - Assert.assertEquals(1, regions.size()); - Assert.assertEquals(expected, IterableExtensions.head(regions).getText()); - Assert.assertTrue((regions instanceof ImmutableList)); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java deleted file mode 100644 index acd6baedf..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/AbstractParametersParsingTest.java +++ /dev/null @@ -1,292 +0,0 @@ -/** - * Copyright (c) 2015 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.parser.parameters; - -import com.google.inject.Injector; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtext.parser.parameters.parametersTestLanguage.ParserRuleParameters; -import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.tests.AbstractXtextTests; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -@SuppressWarnings("all") -public abstract class AbstractParametersParsingTest extends AbstractXtextTests { - @Override - protected void setInjector(final Injector injector) { - super.setInjector(injector); - this.injectMembers(this); - } - - @Override - protected boolean shouldTestSerializer(final XtextResource resource) { - return false; - } - - @Override - public ParserRuleParameters getModel(final String model) throws Exception { - EObject _model = super.getModel(model); - return ((ParserRuleParameters) _model); - } - - protected ParserRuleParameters getModelWithErrors(final String model) throws Exception { - EObject _modelAndExpect = this.getModelAndExpect(model, AbstractXtextTests.EXPECT_ERRORS); - return ((ParserRuleParameters) _modelAndExpect); - } - - @Test - public void testScenario1_first() { - try { - final ParserRuleParameters instance = this.getModel("#1 first"); - Assert.assertEquals("first", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario2_second() { - try { - final ParserRuleParameters instance = this.getModel("#2 second"); - Assert.assertEquals("second", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario3_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#3 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario3_id() { - try { - final ParserRuleParameters instance = this.getModel("#3 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario4_keyword() { - try { - final ParserRuleParameters instance = this.getModelWithErrors("#4 keyword"); - Assert.assertEquals(null, instance.getScenario().getFirst()); - Assert.assertEquals(1, instance.eResource().getErrors().size()); - Assert.assertEquals("mismatched input \'keyword\' expecting RULE_ID", IterableExtensions.head(instance.eResource().getErrors()).getMessage()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario4_id() { - try { - final ParserRuleParameters instance = this.getModel("#4 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario5_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#5 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario5_id() { - try { - final ParserRuleParameters instance = this.getModel("#5 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario6_keyword() { - try { - final ParserRuleParameters instance = this.getModelWithErrors("#6 keyword"); - Assert.assertEquals(null, instance.getScenario()); - Assert.assertEquals("no viable alternative at input \'#6\'", IterableExtensions.head(instance.eResource().getErrors()).getMessage()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario6_id() { - try { - final ParserRuleParameters instance = this.getModel("#6 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario7_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#7 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario7_id() { - try { - final ParserRuleParameters instance = this.getModel("#7 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario8_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#8 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario8_id() { - try { - final ParserRuleParameters instance = this.getModel("#8 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario9_keyword_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#9 keyword keyword"); - Assert.assertEquals("keyword", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario9_id_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#9 id keyword"); - Assert.assertEquals("id", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario9_id() { - try { - final ParserRuleParameters instance = this.getModel("#9 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario9_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#9 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario10_keyword_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#10 keyword keyword"); - Assert.assertEquals("keyword", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario10_id_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#10 id keyword"); - Assert.assertEquals("id", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario10_id() { - try { - final ParserRuleParameters instance = this.getModel("#10 id"); - Assert.assertEquals("id", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario10_keyword() { - try { - final ParserRuleParameters instance = this.getModelWithErrors("#10 keyword"); - Assert.assertEquals("keyword", instance.getScenario().getSecond()); - Assert.assertEquals("mismatched input \'\' expecting \'keyword\'", IterableExtensions.head(instance.eResource().getErrors()).getMessage()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario11_keyword_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#11 keyword keyword"); - Assert.assertEquals("keyword", instance.getScenario().getFirst()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void testScenario11_id_keyword() { - try { - final ParserRuleParameters instance = this.getModel("#11 id keyword"); - Assert.assertEquals("id", instance.getScenario().getSecond()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java deleted file mode 100644 index 0736003e3..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/NoParametersParsingTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2015 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.parser.parameters; - -import org.eclipse.xtext.parser.parameters.AbstractParametersParsingTest; -import org.eclipse.xtext.parser.parameters.NoParametersTestLanguageStandaloneSetup; - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -@SuppressWarnings("all") -public class NoParametersParsingTest extends AbstractParametersParsingTest { - @Override - public void setUp() throws Exception { - super.setUp(); - NoParametersTestLanguageStandaloneSetup _noParametersTestLanguageStandaloneSetup = new NoParametersTestLanguageStandaloneSetup(); - this.with(_noParametersTestLanguageStandaloneSetup); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java deleted file mode 100644 index bf5303dc0..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2015 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.parser.parameters; - -import org.eclipse.xtext.parser.parameters.AbstractParametersParsingTest; -import org.eclipse.xtext.parser.parameters.ParametersTestLanguageStandaloneSetup; - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -@SuppressWarnings("all") -public class ParametersParsingTest extends AbstractParametersParsingTest { - @Override - public void setUp() throws Exception { - super.setUp(); - ParametersTestLanguageStandaloneSetup _parametersTestLanguageStandaloneSetup = new ParametersTestLanguageStandaloneSetup(); - this.with(_parametersTestLanguageStandaloneSetup); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java deleted file mode 100644 index 3e3d82f2c..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/ParametersParsingTestEx.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2015 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.parser.parameters; - -import org.eclipse.xtext.parser.parameters.AbstractParametersParsingTest; -import org.eclipse.xtext.parser.parameters.ParametersTestLanguageExStandaloneSetup; - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -@SuppressWarnings("all") -public class ParametersParsingTestEx extends AbstractParametersParsingTest { - @Override - public void setUp() throws Exception { - super.setUp(); - ParametersTestLanguageExStandaloneSetup _parametersTestLanguageExStandaloneSetup = new ParametersTestLanguageExStandaloneSetup(); - this.with(_parametersTestLanguageExStandaloneSetup); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java deleted file mode 100644 index cd42da0e2..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/parser/parameters/TwoParametersParsingTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2015 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.parser.parameters; - -import org.eclipse.xtext.parser.parameters.AbstractParametersParsingTest; -import org.eclipse.xtext.parser.parameters.TwoParametersTestLanguageStandaloneSetup; - -/** - * @author Sebastian Zarnekow - Initial contribution and API - */ -@SuppressWarnings("all") -public class TwoParametersParsingTest extends AbstractParametersParsingTest { - @Override - public void setUp() throws Exception { - super.setUp(); - TwoParametersTestLanguageStandaloneSetup _twoParametersTestLanguageStandaloneSetup = new TwoParametersTestLanguageStandaloneSetup(); - this.with(_twoParametersTestLanguageStandaloneSetup); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractResourceSetTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractResourceSetTest.java deleted file mode 100644 index 86c10c695..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractResourceSetTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (c) 2012, 2018 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.resource; - -import com.google.common.base.Objects; -import java.io.File; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; -import org.eclipse.xtext.resource.NullResource; -import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Sven Efftinge - Initial contribution and API - */ -@SuppressWarnings("all") -public abstract class AbstractResourceSetTest { - protected abstract ResourceSetImpl createEmptyResourceSet(); - - @Test - public void testDemandLoadedResourcesAreInMap() { - final ResourceSetImpl rs = this.createEmptyResourceSet(); - final Resource.Factory _function = (URI uri) -> { - NullResource _xblockexpression = null; - { - final NullResource result = new NullResource(); - result.setURI(uri); - _xblockexpression = result; - } - return _xblockexpression; - }; - final Resource.Factory nullFactory = _function; - rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", nullFactory); - Assert.assertEquals(0, rs.getURIResourceMap().size()); - final URI uri = URI.createURI("file:/does/not/exist.xmi"); - final Resource demandLoaded = rs.getResource(uri, true); - Assert.assertNotNull(demandLoaded); - final Resource second = rs.getResource(uri, true); - Assert.assertSame(demandLoaded, second); - Assert.assertEquals(1, rs.getURIResourceMap().size()); - } - - @Test - public void testResourceLocatorIsUsed() { - final ResourceSetImpl rs = this.createEmptyResourceSet(); - final XtextResource resource = new XtextResource(); - resource.setURI(URI.createFileURI(new File("foo").getAbsolutePath())); - new ResourceSetImpl.ResourceLocator(rs) { - @Override - public Resource getResource(final URI uri, final boolean loadOnDemand) { - URI _uRI = resource.getURI(); - boolean _equals = Objects.equal(uri, _uRI); - if (_equals) { - return resource; - } - String _string = uri.toString(); - throw new IllegalArgumentException(_string); - } - }; - Assert.assertSame(resource, rs.getResource(resource.getURI(), true)); - Assert.assertTrue(rs.getResources().isEmpty()); - Assert.assertNull(resource.getResourceSet()); - try { - rs.getResource(resource.getURI().appendSegment("doesNotExist"), true); - Assert.fail(); - } catch (final Throwable _t) { - if (_t instanceof IllegalArgumentException) { - final IllegalArgumentException e = (IllegalArgumentException)_t; - Assert.assertTrue(e.getMessage().endsWith("doesNotExist")); - } else { - throw Exceptions.sneakyThrow(_t); - } - } - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractXtextResourceSetTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractXtextResourceSetTest.java index 36c72f738..30d977677 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractXtextResourceSetTest.java +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/AbstractXtextResourceSetTest.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2012, 2018 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) 2012, 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. diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/Bug451668Test.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/Bug451668Test.java deleted file mode 100644 index 920e6ea80..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/Bug451668Test.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2014, 2017 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.resource; - -import java.io.IOException; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.xtext.resource.DerivedStateAwareResource; -import org.eclipse.xtext.testlanguages.OptionalEmptyTestLanguageStandaloneSetup; -import org.eclipse.xtext.tests.AbstractXtextTests; -import org.eclipse.xtext.util.StringInputStream; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Jan Koehnlein - Initial contribution and API - */ -@SuppressWarnings("all") -public class Bug451668Test extends AbstractXtextTests { - public static class TestResource extends DerivedStateAwareResource { - private int contentsCalls = 0; - - @Override - public synchronized EList getContents() { - this.contentsCalls++; - return super.getContents(); - } - } - - @Test - public void testUnloadAndGetContents() throws IOException { - try { - this.with(OptionalEmptyTestLanguageStandaloneSetup.class); - Bug451668Test.TestResource r = this.get(Bug451668Test.TestResource.class); - r.setURI(URI.createURI("foo.dummy")); - StringInputStream _stringInputStream = new StringInputStream(""); - r.load(_stringInputStream, null); - Assert.assertTrue(r.isLoaded()); - final int callsBeforeUnload = r.contentsCalls; - r.unload(); - Assert.assertEquals(callsBeforeUnload, r.contentsCalls); - Assert.assertFalse(r.isLoaded()); - Assert.assertNull(r.getParseResult()); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/ResourceSetTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/ResourceSetTest.java deleted file mode 100644 index 21ad1be9c..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/ResourceSetTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2012, 2018 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.resource; - -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; -import org.eclipse.xtext.resource.AbstractResourceSetTest; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; - -@SuppressWarnings("all") -public class ResourceSetTest extends AbstractResourceSetTest { - @Override - protected ResourceSetImpl createEmptyResourceSet() { - ResourceSetImpl _resourceSetImpl = new ResourceSetImpl(); - final Procedure1 _function = (ResourceSetImpl it) -> { - it.setURIResourceMap(CollectionLiterals.newHashMap()); - }; - return ObjectExtensions.operator_doubleArrow(_resourceSetImpl, _function); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java deleted file mode 100644 index c19e42e9c..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SetEntryPointOnXtextResourceTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright (c) 2016, 2020 TypeFox GmbH (http://www.typefox.io/) 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.resource; - -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtext.ParserRule; -import org.eclipse.xtext.nodemodel.util.NodeModelUtils; -import org.eclipse.xtext.resource.IResourceFactory; -import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.testlanguages.ActionTestLanguage3StandaloneSetup; -import org.eclipse.xtext.testlanguages.ReferenceGrammarTestLanguageStandaloneSetup; -import org.eclipse.xtext.testlanguages.services.ActionTestLanguage3GrammarAccess; -import org.eclipse.xtext.testlanguages.services.ReferenceGrammarTestLanguageGrammarAccess; -import org.eclipse.xtext.tests.AbstractXtextTests; -import org.eclipse.xtext.util.StringInputStream; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Moritz Eysholdt - Initial contribution and API - */ -@SuppressWarnings("all") -public class SetEntryPointOnXtextResourceTest extends AbstractXtextTests { - @Test - public void test1() { - try { - this.with(ReferenceGrammarTestLanguageStandaloneSetup.class); - final String model = "kind (Hugo 13)"; - final ParserRule kindRule = this.get(ReferenceGrammarTestLanguageGrammarAccess.class).getKindRule(); - final XtextResource resource = this.createResource(); - resource.setEntryPoint(kindRule); - StringInputStream _stringInputStream = new StringInputStream(model); - resource.load(_stringInputStream, CollectionLiterals.emptyMap()); - Assert.assertTrue(resource.getErrors().isEmpty()); - Assert.assertEquals(kindRule, NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode())); - final String originalNodeModel = NodeModelUtils.compactDump(resource.getParseResult().getRootNode(), false); - resource.update(0, model.length(), ((" " + model) + " ")); - final String reparsedNodeModel = NodeModelUtils.compactDump(resource.getParseResult().getRootNode(), false); - Assert.assertEquals(originalNodeModel, reparsedNodeModel); - final ParserRule erwachsenerRule = this.get(ReferenceGrammarTestLanguageGrammarAccess.class).getErwachsenerRule(); - resource.setEntryPoint(erwachsenerRule); - resource.update(0, model.length(), "erwachsener (Peter 30)"); - Assert.assertEquals(erwachsenerRule, NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode())); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void test2() { - try { - this.with(ActionTestLanguage3StandaloneSetup.class); - final ParserRule rule = this.get(ActionTestLanguage3GrammarAccess.class).getProductionRule1Rule(); - final String model = "X \"Y\" 42"; - final XtextResource resource = this.createResource(); - resource.setEntryPoint(rule); - StringInputStream _stringInputStream = new StringInputStream(model); - resource.load(_stringInputStream, CollectionLiterals.emptyMap()); - Assert.assertTrue(resource.getErrors().isEmpty()); - final ParserRule entryRule = NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode()); - Assert.assertEquals(rule, entryRule); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - @Test - public void test3() { - try { - this.with(ActionTestLanguage3StandaloneSetup.class); - final ParserRule rule = this.get(ActionTestLanguage3GrammarAccess.class).getProductionRule2Rule(); - final String model = "\"Y\" X42"; - final XtextResource resource = this.createResource(); - resource.setEntryPoint(rule); - StringInputStream _stringInputStream = new StringInputStream(model); - resource.load(_stringInputStream, CollectionLiterals.emptyMap()); - Assert.assertTrue(resource.getErrors().isEmpty()); - final ParserRule entryRule = NodeModelUtils.getEntryParserRule(resource.getParseResult().getRootNode()); - Assert.assertEquals(rule, entryRule); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - private XtextResource createResource() { - String _currentFileExtension = this.getCurrentFileExtension(); - String _plus = ("dummy." + _currentFileExtension); - Resource _createResource = this.get(IResourceFactory.class).createResource(URI.createURI(_plus)); - return ((XtextResource) _createResource); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SynchronizedXtextResourceSetTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SynchronizedXtextResourceSetTest.java index f9a56dee4..8d707366f 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SynchronizedXtextResourceSetTest.java +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/SynchronizedXtextResourceSetTest.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2012, 2018 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) 2012, 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. diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java deleted file mode 100644 index becb6b01b..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/resource/persistence/SerializableResourceDescriptionTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/** - * Copyright (c) 2014 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.resource.persistence; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.Collections; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EcorePackage; -import org.eclipse.xtext.naming.QualifiedName; -import org.eclipse.xtext.resource.persistence.SerializableEObjectDescription; -import org.eclipse.xtext.resource.persistence.SerializableReferenceDescription; -import org.eclipse.xtext.resource.persistence.SerializableResourceDescription; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.ExclusiveRange; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Pair; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Sven Efftinge - Initial contribution and API - */ -@SuppressWarnings("all") -public class SerializableResourceDescriptionTest { - @Test - public void testSerialization() { - try { - final URI uri = URI.createURI("file:/foo/bar.baz.foo"); - SerializableResourceDescription _serializableResourceDescription = new SerializableResourceDescription(); - final Procedure1 _function = (SerializableResourceDescription it) -> { - it.setURI(uri); - SerializableReferenceDescription _serializableReferenceDescription = new SerializableReferenceDescription(); - final Procedure1 _function_1 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(uri.appendFragment("foo")); - it_1.setTargetEObjectUri(uri.appendFragment("hubble")); - it_1.setContainerEObjectURI(uri.appendFragment("baz")); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(1); - }; - SerializableReferenceDescription _doubleArrow = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription, _function_1); - SerializableReferenceDescription _serializableReferenceDescription_1 = new SerializableReferenceDescription(); - final Procedure1 _function_2 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(uri.appendFragment("foo2")); - it_1.setTargetEObjectUri(uri.appendFragment("hubble2")); - it_1.setContainerEObjectURI(uri.appendFragment("baz2")); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(2); - }; - SerializableReferenceDescription _doubleArrow_1 = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription_1, _function_2); - it.setReferences(Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow, _doubleArrow_1))); - SerializableEObjectDescription _serializableEObjectDescription = new SerializableEObjectDescription(); - final Procedure1 _function_3 = (SerializableEObjectDescription it_1) -> { - it_1.setEObjectURI(uri.appendFragment("baz")); - it_1.qualifiedName = QualifiedName.create("foo", "baz"); - it_1.setEClass(EcorePackage.eINSTANCE.getEAttribute()); - Pair _mappedTo = Pair.of("myKey", "myValue"); - it_1.userData = CollectionLiterals.newHashMap(_mappedTo); - }; - SerializableEObjectDescription _doubleArrow_2 = ObjectExtensions.operator_doubleArrow(_serializableEObjectDescription, _function_3); - it.setDescriptions(Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow_2))); - QualifiedName _create = QualifiedName.create("foo"); - QualifiedName _create_1 = QualifiedName.create("foo", "bar"); - it.setImportedNames(Collections.unmodifiableList(CollectionLiterals.newArrayList(_create, _create_1))); - }; - final SerializableResourceDescription before = ObjectExtensions.operator_doubleArrow(_serializableResourceDescription, _function); - final ByteArrayOutputStream bout = new ByteArrayOutputStream(); - final ObjectOutputStream objectOut = new ObjectOutputStream(bout); - objectOut.writeObject(before); - byte[] _byteArray = bout.toByteArray(); - ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray); - final ObjectInputStream in = new ObjectInputStream(_byteArrayInputStream); - Object _readObject = in.readObject(); - final SerializableResourceDescription after = ((SerializableResourceDescription) _readObject); - this.assertDescriptionsEqual(before, after); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - public void assertDescriptionsEqual(final SerializableResourceDescription before, final SerializableResourceDescription after) { - Assert.assertEquals(before.getURI(), after.getURI()); - Assert.assertEquals(before.getImportedNames(), after.getImportedNames()); - Assert.assertEquals(before.getReferences().size(), after.getReferences().size()); - int _size = before.getReferences().size(); - ExclusiveRange _doubleDotLessThan = new ExclusiveRange(0, _size, true); - for (final int i : _doubleDotLessThan) { - { - final SerializableReferenceDescription beforeRef = before.getReferences().get(i); - final SerializableReferenceDescription afterRef = after.getReferences().get(i); - Assert.assertEquals(beforeRef.getContainerEObjectURI(), afterRef.getContainerEObjectURI()); - Assert.assertEquals(beforeRef.getSourceEObjectUri(), afterRef.getSourceEObjectUri()); - Assert.assertEquals(beforeRef.getTargetEObjectUri(), afterRef.getTargetEObjectUri()); - Assert.assertEquals(beforeRef.getEReference(), afterRef.getEReference()); - Assert.assertEquals(beforeRef.getIndexInList(), afterRef.getIndexInList()); - } - } - Assert.assertEquals(before.getDescriptions().size(), after.getDescriptions().size()); - int _size_1 = before.getDescriptions().size(); - ExclusiveRange _doubleDotLessThan_1 = new ExclusiveRange(0, _size_1, true); - for (final int i_1 : _doubleDotLessThan_1) { - { - final SerializableEObjectDescription beforeDesc = before.getDescriptions().get(i_1); - final SerializableEObjectDescription afterDesc = after.getDescriptions().get(i_1); - Assert.assertEquals(beforeDesc.getEClass(), afterDesc.getEClass()); - Assert.assertEquals(beforeDesc.getName(), afterDesc.getName()); - Assert.assertEquals(beforeDesc.qualifiedName, afterDesc.qualifiedName); - Assert.assertEquals(beforeDesc.userData, afterDesc.userData); - Assert.assertEquals(beforeDesc.getEObjectURI(), afterDesc.getEObjectURI()); - } - } - } - - @Test - public void testNullSafeSerialization() { - try { - final URI uri = URI.createURI("file:/foo/bar.baz.foo"); - SerializableResourceDescription _serializableResourceDescription = new SerializableResourceDescription(); - final Procedure1 _function = (SerializableResourceDescription it) -> { - it.setURI(uri); - SerializableReferenceDescription _serializableReferenceDescription = new SerializableReferenceDescription(); - final Procedure1 _function_1 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(uri.appendFragment("foo")); - it_1.setTargetEObjectUri(null); - it_1.setContainerEObjectURI(uri.appendFragment("baz")); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(1); - }; - SerializableReferenceDescription _doubleArrow = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription, _function_1); - SerializableReferenceDescription _serializableReferenceDescription_1 = new SerializableReferenceDescription(); - final Procedure1 _function_2 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(null); - it_1.setTargetEObjectUri(uri.appendFragment("hubble2")); - it_1.setContainerEObjectURI(uri.appendFragment("baz2")); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(2); - }; - SerializableReferenceDescription _doubleArrow_1 = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription_1, _function_2); - SerializableReferenceDescription _serializableReferenceDescription_2 = new SerializableReferenceDescription(); - final Procedure1 _function_3 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(uri.appendFragment("foo")); - it_1.setTargetEObjectUri(uri.appendFragment("hubble2")); - it_1.setContainerEObjectURI(null); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(2); - }; - SerializableReferenceDescription _doubleArrow_2 = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription_2, _function_3); - SerializableReferenceDescription _serializableReferenceDescription_3 = new SerializableReferenceDescription(); - final Procedure1 _function_4 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(uri.appendFragment("foo")); - it_1.setTargetEObjectUri(null); - it_1.setContainerEObjectURI(null); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(2); - }; - SerializableReferenceDescription _doubleArrow_3 = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription_3, _function_4); - SerializableReferenceDescription _serializableReferenceDescription_4 = new SerializableReferenceDescription(); - final Procedure1 _function_5 = (SerializableReferenceDescription it_1) -> { - it_1.setSourceEObjectUri(null); - it_1.setTargetEObjectUri(null); - it_1.setContainerEObjectURI(null); - it_1.setEReference(EcorePackage.eINSTANCE.getEAnnotation_Contents()); - it_1.setIndexInList(2); - }; - SerializableReferenceDescription _doubleArrow_4 = ObjectExtensions.operator_doubleArrow(_serializableReferenceDescription_4, _function_5); - it.setReferences(Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow, _doubleArrow_1, _doubleArrow_2, _doubleArrow_3, _doubleArrow_4))); - SerializableEObjectDescription _serializableEObjectDescription = new SerializableEObjectDescription(); - final Procedure1 _function_6 = (SerializableEObjectDescription it_1) -> { - it_1.setEObjectURI(uri.appendFragment("baz")); - it_1.qualifiedName = QualifiedName.create("foo", "baz"); - it_1.setEClass(EcorePackage.eINSTANCE.getEAttribute()); - Pair _mappedTo = Pair.of("myKey", "myValue"); - it_1.userData = CollectionLiterals.newHashMap(_mappedTo); - }; - SerializableEObjectDescription _doubleArrow_5 = ObjectExtensions.operator_doubleArrow(_serializableEObjectDescription, _function_6); - it.setDescriptions(Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow_5))); - QualifiedName _create = QualifiedName.create("foo"); - QualifiedName _create_1 = QualifiedName.create("foo", "bar"); - it.setImportedNames(Collections.unmodifiableList(CollectionLiterals.newArrayList(_create, _create_1))); - }; - final SerializableResourceDescription before = ObjectExtensions.operator_doubleArrow(_serializableResourceDescription, _function); - final ByteArrayOutputStream bout = new ByteArrayOutputStream(); - final ObjectOutputStream objectOut = new ObjectOutputStream(bout); - objectOut.writeObject(before); - byte[] _byteArray = bout.toByteArray(); - ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray); - final ObjectInputStream in = new ObjectInputStream(_byteArrayInputStream); - Object _readObject = in.readObject(); - final SerializableResourceDescription after = ((SerializableResourceDescription) _readObject); - this.assertDescriptionsEqual(before, after); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/serializer/TokenSerializerTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/serializer/TokenSerializerTest.java deleted file mode 100644 index 10fc2e8cc..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/serializer/TokenSerializerTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.serializer; - -import com.google.common.base.Objects; -import com.google.inject.Inject; -import com.google.inject.Provider; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.resource.DefaultFragmentProvider; -import org.eclipse.xtext.resource.FileExtensionProvider; -import org.eclipse.xtext.resource.IFragmentProvider; -import org.eclipse.xtext.resource.XtextResource; -import org.eclipse.xtext.resource.XtextResourceSet; -import org.eclipse.xtext.serializer.ISerializer; -import org.eclipse.xtext.serializer.SyntacticSequencerTestLanguageInjectorProvider; -import org.eclipse.xtext.serializer.syntacticsequencertest.Model; -import org.eclipse.xtext.serializer.syntacticsequencertest.SingleCrossReference; -import org.eclipse.xtext.serializer.syntacticsequencertest.SyntacticsequencertestFactory; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.XtextRunner; -import org.eclipse.xtext.xbase.lib.Extension; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(XtextRunner.class) -@InjectWith(SyntacticSequencerTestLanguageInjectorProvider.class) -@SuppressWarnings("all") -public class TokenSerializerTest { - @Inject - @Extension - private ISerializer _iSerializer; - - @Inject - private FileExtensionProvider fileExtensionProvider; - - @Inject - private Provider resourceSetProvider; - - private final SyntacticsequencertestFactory factory = SyntacticsequencertestFactory.eINSTANCE; - - private void assertSerializesTo(final Model model, final CharSequence expectation) { - Assert.assertEquals(expectation.toString().trim(), this._iSerializer.serialize(model).trim()); - } - - private URI getFileURI(final String name) { - String _primaryFileExtension = this.fileExtensionProvider.getPrimaryFileExtension(); - String _plus = ((name + ".") + _primaryFileExtension); - return URI.createFileURI(_plus); - } - - @Test - public void testConstructedCrossReferenceWithProxy() { - final XtextResourceSet resourceSet = this.resourceSetProvider.get(); - Resource _createResource = resourceSet.createResource(this.getFileURI("dummy")); - final XtextResource resource = ((XtextResource) _createResource); - Model _createModel = this.factory.createModel(); - final Procedure1 _function = (Model it) -> { - SingleCrossReference _createSingleCrossReference = this.factory.createSingleCrossReference(); - final Procedure1 _function_1 = (SingleCrossReference it_1) -> { - it_1.setName("myref"); - }; - SingleCrossReference _doubleArrow = ObjectExtensions.operator_doubleArrow(_createSingleCrossReference, _function_1); - it.setX5(_doubleArrow); - }; - final Model model = ObjectExtensions.operator_doubleArrow(_createModel, _function); - EList _contents = resource.getContents(); - _contents.add(model); - SingleCrossReference _x5 = model.getX5(); - SingleCrossReference _createSingleCrossReference = this.factory.createSingleCrossReference(); - final Procedure1 _function_1 = (SingleCrossReference it) -> { - ((InternalEObject) it).eSetProxyURI(resource.getURI().appendFragment("foo")); - }; - SingleCrossReference _doubleArrow = ObjectExtensions.operator_doubleArrow(_createSingleCrossReference, _function_1); - _x5.setRef3(_doubleArrow); - resource.setFragmentProvider(new DefaultFragmentProvider() { - @Override - public EObject getEObject(final Resource resource, final String fragment, final IFragmentProvider.Fallback fallback) { - EObject _xifexpression = null; - boolean _equals = Objects.equal(fragment, "foo"); - if (_equals) { - _xifexpression = model.getX5(); - } else { - _xifexpression = super.getEObject(resource, fragment, fallback); - } - return _xifexpression; - } - }); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("#5 myref kw3 myref"); - _builder.newLine(); - this.assertSerializesTo(model, _builder); - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java deleted file mode 100644 index 8d1353dc1..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/tasks/PreferenceTaskTagProviderTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) 2014 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.tasks; - -import java.util.Collections; -import java.util.List; -import org.eclipse.xtext.preferences.IPreferenceValuesProvider; -import org.eclipse.xtext.preferences.MapBasedPreferenceValues; -import org.eclipse.xtext.tasks.PreferenceTaskTagProvider; -import org.eclipse.xtext.tasks.Priority; -import org.eclipse.xtext.tasks.TaskTag; -import org.eclipse.xtext.tasks.TaskTags; -import org.eclipse.xtext.xbase.lib.CollectionLiterals; -import org.eclipse.xtext.xbase.lib.Conversions; -import org.eclipse.xtext.xbase.lib.ExclusiveRange; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Stefan Oehme - Initial contribution and API - */ -@SuppressWarnings("all") -public class PreferenceTaskTagProviderTest { - @Test - public void test() { - TaskTag _taskTag = new TaskTag(); - final Procedure1 _function = (TaskTag it) -> { - it.setName("Foo"); - it.setPriority(Priority.LOW); - }; - TaskTag _doubleArrow = ObjectExtensions.operator_doubleArrow(_taskTag, _function); - TaskTag _taskTag_1 = new TaskTag(); - final Procedure1 _function_1 = (TaskTag it) -> { - it.setName("BAR"); - it.setPriority(Priority.NORMAL); - }; - TaskTag _doubleArrow_1 = ObjectExtensions.operator_doubleArrow(_taskTag_1, _function_1); - TaskTag _taskTag_2 = new TaskTag(); - final Procedure1 _function_2 = (TaskTag it) -> { - it.setName("baZ"); - it.setPriority(Priority.HIGH); - }; - TaskTag _doubleArrow_2 = ObjectExtensions.operator_doubleArrow(_taskTag_2, _function_2); - final List tags = Collections.unmodifiableList(CollectionLiterals.newArrayList(_doubleArrow, _doubleArrow_1, _doubleArrow_2)); - final String names = PreferenceTaskTagProvider.serializeTags(tags); - final String prios = PreferenceTaskTagProvider.serializePriorities(tags); - final IPreferenceValuesProvider.SingletonPreferenceValuesProvider valueProvider = new IPreferenceValuesProvider.SingletonPreferenceValuesProvider(); - final MapBasedPreferenceValues values = valueProvider.getPreferenceValues(null); - values.put(PreferenceTaskTagProvider.TAGS_KEY.getId(), names); - values.put(PreferenceTaskTagProvider.PRIORITIES_KEY.getId(), prios); - values.put(PreferenceTaskTagProvider.CASE_SENSITIVE_KEY.getId(), "false"); - final PreferenceTaskTagProvider tagProvider = new PreferenceTaskTagProvider(); - tagProvider.setPreferenceValuesProvider(valueProvider); - final TaskTags parsedTags = tagProvider.getTaskTags(null); - Assert.assertEquals(Boolean.valueOf(false), Boolean.valueOf(parsedTags.isCaseSensitive())); - Assert.assertEquals(tags.size(), IterableExtensions.size(parsedTags)); - int _size = tags.size(); - ExclusiveRange _doubleDotLessThan = new ExclusiveRange(0, _size, true); - for (final Integer i : _doubleDotLessThan) { - Assert.assertEquals(tags.get((i).intValue()), ((Object[])Conversions.unwrapArray(parsedTags, Object.class))[(i).intValue()]); - } - } -} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/Issue1161Test.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/Issue1161Test.java deleted file mode 100644 index 6bb8e5738..000000000 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/xtext/Issue1161Test.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Copyright (c) 2019 Malardalen University (http://www.mdh.se) 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.xtext; - -import com.google.inject.Guice; -import com.google.inject.Inject; -import com.google.inject.Injector; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.Grammar; -import org.eclipse.xtext.XtextPackage; -import org.eclipse.xtext.XtextRuntimeModule; -import org.eclipse.xtext.XtextStandaloneSetup; -import org.eclipse.xtext.diagnostics.Severity; -import org.eclipse.xtext.preferences.IPreferenceValuesProvider; -import org.eclipse.xtext.preferences.MapBasedPreferenceValues; -import org.eclipse.xtext.testing.InjectWith; -import org.eclipse.xtext.testing.XtextRunner; -import org.eclipse.xtext.testing.util.ParseHelper; -import org.eclipse.xtext.testing.validation.ValidationTestHelper; -import org.eclipse.xtext.tests.AbstractXtextTests; -import org.eclipse.xtext.tests.XtextInjectorProvider; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.Extension; -import org.eclipse.xtext.xtext.XtextConfigurableIssueCodes; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * @author Lorenzo Addazi - Initial contribution and API - */ -@RunWith(XtextRunner.class) -@InjectWith(XtextInjectorProvider.class) -@SuppressWarnings("all") -public class Issue1161Test extends AbstractXtextTests { - /** - * @author Lorenzo Addazi - Initial contribution and API - */ - public static class Issue1161StandaloneSetup extends XtextStandaloneSetup { - @Override - public Injector createInjector() { - abstract class __Issue1161StandaloneSetup_1 extends XtextRuntimeModule { - public abstract Class bindIPreferenceValuesProvider(); - } - - __Issue1161StandaloneSetup_1 ___Issue1161StandaloneSetup_1 = new __Issue1161StandaloneSetup_1() { - public Class bindIPreferenceValuesProvider() { - return IPreferenceValuesProvider.SingletonPreferenceValuesProvider.class; - } - }; - return Guice.createInjector(___Issue1161StandaloneSetup_1); - } - } - - @Inject - @Extension - private ValidationTestHelper _validationTestHelper; - - @Inject - @Extension - private ParseHelper _parseHelper; - - @Inject - private MapBasedPreferenceValues preferences; - - @Override - public void setUp() throws Exception { - super.setUp(); - this.with(Issue1161Test.Issue1161StandaloneSetup.class); - } - - @Before - public void setPreferences() { - this.preferences = this.get(IPreferenceValuesProvider.SingletonPreferenceValuesProvider.class).getPreferenceValues(null); - } - - @After - public void clearPreferences() { - this.preferences.clear(); - } - - @Test - public void testValidJavaPackageNamingConventionsWithIgnoreSeverity() { - this.assertNoIssue(this.grammarWithValidJavaPackageNamingConventions()); - } - - @Test - public void testInvalidJavaPackageNamingConventionsWithIgnoreSeverity() { - this.assertNoIssue(this.grammarWithInvalidJavaPackageNamingConventions()); - } - - @Test - public void testValidJavaPackageNamingConventionsWithErrorSeverity() { - this.setSeverity("error"); - this.assertNoIssue(this.grammarWithValidJavaPackageNamingConventions()); - } - - @Test - public void testInvalidJavaPackageNamingConventionsWithErrorSeverity() { - this.setSeverity("error"); - this.assertError(this.grammarWithInvalidJavaPackageNamingConventions()); - } - - @Test - public void testValidJavaPackageNamingConventionsWithWarningSeverity() { - this.setSeverity("warning"); - this.assertNoIssue(this.grammarWithValidJavaPackageNamingConventions()); - } - - @Test - public void testInvalidJavaPackageNamingConventionsWithWarningSeverity() { - this.setSeverity("warning"); - this.assertWarning(this.grammarWithInvalidJavaPackageNamingConventions()); - } - - @Test - public void testValidJavaPackageNamingConventionsWithInfoSeverity() { - this.setSeverity("info"); - this.assertNoIssue(this.grammarWithValidJavaPackageNamingConventions()); - } - - @Test - public void testInvalidJavaPackageNamingConventionsWithInfoSeverity() { - this.setSeverity("info"); - this.assertInfo(this.grammarWithInvalidJavaPackageNamingConventions()); - } - - private void assertError(final CharSequence grammar) { - this.assertIssue(grammar, Severity.ERROR); - } - - private void assertWarning(final CharSequence grammar) { - this.assertIssue(grammar, Severity.WARNING); - } - - private void assertInfo(final CharSequence grammar) { - this.assertIssue(grammar, Severity.INFO); - } - - private void assertIssue(final CharSequence grammar, final Severity severity) { - try { - this._validationTestHelper.assertIssue(this._parseHelper.parse(grammar), XtextPackage.Literals.GENERATED_METAMODEL, - XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - private void assertNoIssue(final CharSequence grammar) { - try { - this._validationTestHelper.assertNoIssue(this._parseHelper.parse(grammar), XtextPackage.Literals.GENERATED_METAMODEL, - XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } - } - - private CharSequence grammarWithValidJavaPackageNamingConventions() { - return this.grammarWithGeneratedMetamodelName("testissue1161"); - } - - private CharSequence grammarWithInvalidJavaPackageNamingConventions() { - return this.grammarWithGeneratedMetamodelName("testIssue1161"); - } - - private CharSequence grammarWithGeneratedMetamodelName(final String generatedMetamodelName) { - StringConcatenation _builder = new StringConcatenation(); - _builder.append("grammar test.Issue1161 with org.eclipse.xtext.common.Terminals"); - _builder.newLine(); - _builder.append("generate "); - _builder.append(generatedMetamodelName); - _builder.append(" \"http://issue1161\""); - _builder.newLineIfNotEmpty(); - _builder.append("A : {A};"); - _builder.newLine(); - return _builder; - } - - private void setSeverity(final String severity) { - this.preferences.put(XtextConfigurableIssueCodes.INVALID_JAVAPACKAGE_NAME, severity); - } -}