diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.classpath b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.classpath new file mode 100644 index 000000000..f19381878 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.project b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.project new file mode 100644 index 000000000..212ab34eb --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.project @@ -0,0 +1,34 @@ + + + org.springframework.tooling.ls.eclipse.commons.test + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.jdt.core.prefs b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.m2e.core.prefs b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000..f897a7f1c --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/META-INF/MANIFEST.MF new file mode 100644 index 000000000..5543a757f --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/META-INF/MANIFEST.MF @@ -0,0 +1,14 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test +Bundle-SymbolicName: org.springframework.tooling.ls.eclipse.commons.test +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: org.springframework.tooling.ls.eclipse.commons.test +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.junit, + org.eclipse.core.runtime, + org.eclipse.core.resources, + org.springframework.tooling.ls.eclipse.commons, + org.eclipse.jdt.core, + org.apache.commons.io, + org.springframework.tooling.jdt.ls.commons diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/build.properties b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/build.properties new file mode 100644 index 000000000..34d2e4d2d --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/pom.xml b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/pom.xml new file mode 100644 index 000000000..37c2315c9 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/pom.xml @@ -0,0 +1,82 @@ + + 4.0.0 + eclipse-test-plugin + org.springframework.tooling.ls.eclipse.commons.test + 1.0.0-SNAPSHOT + org.springframework.tooling.ls.eclipse.commons.test + + + org.springframework.boot.ide + org.springframework.boot.ide.servers + 4.0.0-SNAPSHOT + ../pom.xml + + + + + + + + + osx + + + mac + + + + -XstartOnFirstThread + + + + + + + + org.eclipse.tycho + target-platform-configuration + + + + + eclipse-feature + org.eclipse.jdt + 0.0.0 + + + eclipse-feature + org.eclipse.platform + 0.0.0 + + + eclipse-feature + org.eclipse.rcp + 0.0.0 + + + eclipse-feature + org.eclipse.m2e.feature + 0.0.0 + + + + + + + org.eclipse.tycho + tycho-surefire-plugin + ${tycho-version} + + 200 + **/*Test.java + true + ${test.argLine} + false + + + + + + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/JavadocTest.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/JavadocTest.java new file mode 100644 index 000000000..5ebd7b593 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/JavadocTest.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.concurrent.TimeUnit; + +import org.eclipse.jdt.core.IField; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMethod; +import org.eclipse.jdt.core.IType; +import org.junit.After; +import org.junit.Test; +import org.springframework.tooling.jdt.ls.commons.javadoc.JavadocResponse; +import org.springframework.tooling.ls.eclipse.commons.JavadocParams; +import org.springframework.tooling.ls.eclipse.commons.STS4LanguageClientImpl; + +public class JavadocTest { + + private static STS4LanguageClientImpl client = new STS4LanguageClientImpl(); + + @After + public void tearDown() throws Exception { + TestUtils.deleteAllProjects(); + } + + @Test + public void classJavadoc() throws Exception { + IJavaProject project = TestUtils.createTestProject("simple-java-project"); + assertNotNull(project); + IType type = project.findType("com.sample.SampleJavadoc"); + assertNotNull(type); + + String expectedBindingKey = "Lcom/sample/SampleJavadoc;"; + assertEquals(expectedBindingKey, type.getKey()); + + JavadocParams params = new JavadocParams(project.getProject().getLocation().toFile().toURI().toString(), expectedBindingKey); + JavadocResponse response = client.javadoc(params).get(1, TimeUnit.SECONDS); + assertEquals("**Sample class**", response.getContent()); + } + + @Test + public void fieldJavadoc() throws Exception { + IJavaProject project = TestUtils.createTestProject("simple-java-project"); + assertNotNull(project); + IType type = project.findType("com.sample.SampleJavadoc"); + assertNotNull(type); + IField field = type.getField("number"); + assertNotNull(field); + + String expectedBindingKey = "Lcom/sample/SampleJavadoc;.number"; + assertEquals(expectedBindingKey, field.getKey()); + + JavadocParams params = new JavadocParams(project.getProject().getLocation().toFile().toURI().toString(), expectedBindingKey); + JavadocResponse response = client.javadoc(params).get(1, TimeUnit.SECONDS); + assertEquals("**Sample field**", response.getContent()); + } + + @Test + public void methodJavadoc() throws Exception { + IJavaProject project = TestUtils.createTestProject("simple-java-project"); + assertNotNull(project); + IType type = project.findType("com.sample.SampleJavadoc"); + assertNotNull(type); + IMethod method = type.getMethod("getNumber", new String[0]); + assertNotNull(method); + + String expectedBindingKey = "Lcom/sample/SampleJavadoc;.getNumber()V"; + assertEquals(expectedBindingKey, method.getKey()); + + JavadocParams params = new JavadocParams(project.getProject().getLocation().toFile().toURI().toString(), expectedBindingKey); + JavadocResponse response = client.javadoc(params).get(1, TimeUnit.SECONDS); + assertEquals("**Sample getter**", response.getContent()); + } + +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/TestUtils.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/TestUtils.java new file mode 100644 index 000000000..f59a134f1 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/src/org/springframework/tooling/ls/eclipse/commons/test/TestUtils.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ + package org.springframework.tooling.ls.eclipse.commons.test; + +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.apache.commons.io.FileUtils; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; + +public class TestUtils { + + public static IJavaProject createTestProject(String name) throws Exception { + File testProjectSourceLocation = new File(FileLocator.toFileURL(Platform.getBundle("org.springframework.tooling.ls.eclipse.commons.test").getEntry("test-projects/"+name)).toURI()); + File targetWorkspace = ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile(); + + FileUtils.copyDirectory(testProjectSourceLocation, new File(targetWorkspace, name)); + + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); + project.create(null); + project.open(null); + project.refreshLocal(IResource.DEPTH_INFINITE, null); + + assertTrue(project.hasNature(JavaCore.NATURE_ID)); + ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null); + + return JavaCore.create(project); + } + + public static void deleteAllProjects() throws Exception { + IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + for (IProject project : allProjects) { + project.refreshLocal(IResource.DEPTH_INFINITE, null); + project.close(null); + deleteProject(project); + } + ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null); + } + + private static void deleteProject(IProject project) throws Exception { + int retryCount = 10; // wait 1 minute at most + Exception lastException = null; + while (project.exists() && --retryCount >= 0) { + try { + project.delete(true, true, new NullProgressMonitor()); + lastException = null; + } catch (Exception e) { + lastException = e; + try { + Thread.sleep(1000); + } + catch (InterruptedException e1) { + } + } + } + if (lastException!=null) { + throw lastException; + } + } + + +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/test-projects/simple-java-project/src/com/sample/SampleJavadoc.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/test-projects/simple-java-project/src/com/sample/SampleJavadoc.java new file mode 100644 index 000000000..e008f3c82 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons.test/test-projects/simple-java-project/src/com/sample/SampleJavadoc.java @@ -0,0 +1,20 @@ +package com.sample; + +/** + * Sample class + */ +public class SampleJavadoc { + + /** + * Sample field + */ + public int number; + + /** + * Sample getter + */ + public int getNumber() { + return number; + } + +} diff --git a/eclipse-language-servers/pom.xml b/eclipse-language-servers/pom.xml index f02b1024c..5f399c103 100644 --- a/eclipse-language-servers/pom.xml +++ b/eclipse-language-servers/pom.xml @@ -29,6 +29,7 @@ ../headless-services/jdt-ls-extension org.springframework.tooling.ls.eclipse.commons + org.springframework.tooling.ls.eclipse.commons.test org.springframework.tooling.cloudfoundry.manifest.ls org.springframework.tooling.cloudfoundry.manifest.ls.feature