/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/correction/OrganizeImportsActionTest.java

https://github.com/eclipse/eclipse.jdt.ls · Java · 269 lines · 219 code · 38 blank · 12 comment · 0 complexity · 5fb75013c784b0147eef0cec94c41aa9 MD5 · raw file

  1. /*******************************************************************************
  2. * Copyright (c) 2017-2018 Microsoft Corporation and others.
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License 2.0
  5. * which accompanies this distribution, and is available at
  6. * https://www.eclipse.org/legal/epl-2.0/
  7. *
  8. * SPDX-License-Identifier: EPL-2.0
  9. *
  10. * Contributors:
  11. * Microsoft Corporation - initial API and implementation
  12. *******************************************************************************/
  13. package org.eclipse.jdt.ls.core.internal.correction;
  14. import java.util.Hashtable;
  15. import org.eclipse.core.resources.IProject;
  16. import org.eclipse.jdt.core.ICompilationUnit;
  17. import org.eclipse.jdt.core.IJavaProject;
  18. import org.eclipse.jdt.core.IPackageFragment;
  19. import org.eclipse.jdt.core.IPackageFragmentRoot;
  20. import org.eclipse.jdt.core.JavaCore;
  21. import org.eclipse.jdt.ls.core.internal.WorkspaceHelper;
  22. import org.eclipse.lsp4j.CodeActionKind;
  23. import org.junit.Before;
  24. import org.junit.Test;
  25. public class OrganizeImportsActionTest extends AbstractQuickFixTest {
  26. private IJavaProject fJProject1;
  27. private IPackageFragmentRoot fSourceFolder;
  28. @Before
  29. public void setup() throws Exception {
  30. fJProject1 = newEmptyProject();
  31. Hashtable<String, String> options = TestOptions.getDefaultOptions();
  32. fJProject1.setOptions(options);
  33. fSourceFolder = fJProject1.getPackageFragmentRoot(fJProject1.getProject().getFolder("src"));
  34. this.setOnly(CodeActionKind.Source);
  35. this.setIgnoredKind(new String[0]);
  36. }
  37. public void setupJava9() throws Exception {
  38. importExistingProjects("eclipse/java9");
  39. IProject project = WorkspaceHelper.getProject("java9");
  40. fJProject1 = JavaCore.create(project);
  41. fSourceFolder = fJProject1.getPackageFragmentRoot(fJProject1.getProject().getFolder("src/main/java"));
  42. }
  43. @Test
  44. public void testOrganizeImportsModuleInfo() throws Exception {
  45. setupJava9();
  46. IPackageFragment pack1 = fSourceFolder.createPackageFragment("", false, null);
  47. StringBuilder buf = new StringBuilder();
  48. buf.append("import foo.bar.MyDriverAction;\n");
  49. buf.append("import java.sql.DriverAction;\n");
  50. buf.append("import java.sql.SQLException;\n");
  51. buf.append("\n");
  52. buf.append("module mymodule.nine {\n");
  53. buf.append(" requires java.sql;\n");
  54. buf.append(" exports foo.bar;\n");
  55. buf.append(" provides DriverAction with MyDriverAction;\n");
  56. buf.append("}\n");
  57. ICompilationUnit cu = pack1.createCompilationUnit("module-info.java", buf.toString(), false, null);
  58. buf = new StringBuilder();
  59. buf.append("import java.sql.DriverAction;\n");
  60. buf.append("\n");
  61. buf.append("import foo.bar.MyDriverAction;\n");
  62. buf.append("\n");
  63. buf.append("module mymodule.nine {\n");
  64. buf.append(" requires java.sql;\n");
  65. buf.append(" exports foo.bar;\n");
  66. buf.append(" provides DriverAction with MyDriverAction;\n");
  67. buf.append("}\n");
  68. Expected e1 = new Expected("Organize imports", buf.toString());
  69. assertCodeActions(cu, e1);
  70. }
  71. @Test
  72. public void testOrganizeImportsUnused() throws Exception {
  73. IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
  74. StringBuilder buf = new StringBuilder();
  75. buf.append("package test1;\n");
  76. buf.append("\n");
  77. buf.append("import java.util.ArrayList;\n");
  78. buf.append("\n");
  79. buf.append("public class E {\n");
  80. buf.append("}\n");
  81. ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
  82. buf = new StringBuilder();
  83. buf.append("package test1;\n");
  84. buf.append("\n");
  85. buf.append("public class E {\n");
  86. buf.append("}\n");
  87. Expected e1 = new Expected("Organize imports", buf.toString());
  88. assertCodeActions(cu, e1);
  89. }
  90. @Test
  91. public void testOrganizeImportsSort() throws Exception {
  92. IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
  93. StringBuilder buf = new StringBuilder();
  94. buf.append("package test1;\n");
  95. buf.append("\n");
  96. buf.append("import java.util.HashMap;\n");
  97. buf.append("import java.util.ArrayList;\n");
  98. buf.append("\n");
  99. buf.append("public class E {\n");
  100. buf.append("\n");
  101. buf.append(" public E() {\n");
  102. buf.append(" ArrayList list = new ArrayList();\n");
  103. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  104. buf.append(" }\n");
  105. buf.append("}\n");
  106. ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
  107. buf = new StringBuilder();
  108. buf.append("package test1;\n");
  109. buf.append("\n");
  110. buf.append("import java.util.ArrayList;\n");
  111. buf.append("import java.util.HashMap;\n");
  112. buf.append("\n");
  113. buf.append("public class E {\n");
  114. buf.append("\n");
  115. buf.append(" public E() {\n");
  116. buf.append(" ArrayList list = new ArrayList();\n");
  117. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  118. buf.append(" }\n");
  119. buf.append("}\n");
  120. Expected e1 = new Expected("Organize imports", buf.toString());
  121. assertCodeActions(cu, e1);
  122. }
  123. @Test
  124. public void testOrganizeImportsOnDemandThreshold() throws Exception {
  125. int onDemandTreshold = preferenceManager.getPreferences().getImportOnDemandThreshold();
  126. try {
  127. preferenceManager.getPreferences().setImportOnDemandThreshold(2);
  128. IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
  129. StringBuilder buf = new StringBuilder();
  130. buf.append("package test1;\n");
  131. buf.append("\n");
  132. buf.append("import java.util.HashMap;\n");
  133. buf.append("import java.util.ArrayList;\n");
  134. buf.append("\n");
  135. buf.append("public class E {\n");
  136. buf.append("\n");
  137. buf.append(" public E() {\n");
  138. buf.append(" ArrayList list = new ArrayList();\n");
  139. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  140. buf.append(" }\n");
  141. buf.append("}\n");
  142. ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
  143. buf = new StringBuilder();
  144. buf.append("package test1;\n");
  145. buf.append("\n");
  146. buf.append("import java.util.*;\n");
  147. buf.append("\n");
  148. buf.append("public class E {\n");
  149. buf.append("\n");
  150. buf.append(" public E() {\n");
  151. buf.append(" ArrayList list = new ArrayList();\n");
  152. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  153. buf.append(" }\n");
  154. buf.append("}\n");
  155. Expected e1 = new Expected("Organize imports", buf.toString());
  156. assertCodeActions(cu, e1);
  157. } finally {
  158. preferenceManager.getPreferences().setImportOnDemandThreshold(onDemandTreshold);
  159. }
  160. }
  161. @Test
  162. public void testOrganizeImportsStaticOnDemandThreshold() throws Exception {
  163. int staticOnDemandTreshold = preferenceManager.getPreferences().getStaticImportOnDemandThreshold();
  164. try {
  165. preferenceManager.getPreferences().setStaticImportOnDemandThreshold(2);
  166. IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
  167. StringBuilder buf = new StringBuilder();
  168. buf.append("package test1;\n");
  169. buf.append("\n");
  170. buf.append("import static java.lang.Math.pow;\n");
  171. buf.append("import static java.lang.Math.sqrt;\n");
  172. buf.append("\n");
  173. buf.append("public class E {\n");
  174. buf.append("\n");
  175. buf.append(" public E() {\n");
  176. buf.append(" double d1 = sqrt(4);\n");
  177. buf.append(" double d2 = pow(2, 2);\n");
  178. buf.append(" }\n");
  179. buf.append("}\n");
  180. ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
  181. buf = new StringBuilder();
  182. buf.append("package test1;\n");
  183. buf.append("\n");
  184. buf.append("import static java.lang.Math.*;\n");
  185. buf.append("\n");
  186. buf.append("public class E {\n");
  187. buf.append("\n");
  188. buf.append(" public E() {\n");
  189. buf.append(" double d1 = sqrt(4);\n");
  190. buf.append(" double d2 = pow(2, 2);\n");
  191. buf.append(" }\n");
  192. buf.append("}\n");
  193. Expected e1 = new Expected("Organize imports", buf.toString());
  194. assertCodeActions(cu, e1);
  195. } finally {
  196. preferenceManager.getPreferences().setStaticImportOnDemandThreshold(staticOnDemandTreshold);
  197. }
  198. }
  199. @Test
  200. public void testOrganizeImportsAutomaticallyResolve() throws Exception {
  201. IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
  202. StringBuilder buf = new StringBuilder();
  203. buf.append("package test1;\n");
  204. buf.append("\n");
  205. buf.append("import java.util.ArrayList;\n");
  206. buf.append("\n");
  207. buf.append("public class E {\n");
  208. buf.append("\n");
  209. buf.append(" public E() {\n");
  210. buf.append(" ArrayList list = new ArrayList();\n");
  211. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  212. buf.append(" }\n");
  213. buf.append("}\n");
  214. ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
  215. buf = new StringBuilder();
  216. buf.append("package test1;\n");
  217. buf.append("\n");
  218. buf.append("import java.util.ArrayList;\n");
  219. buf.append("import java.util.HashMap;\n");
  220. buf.append("\n");
  221. buf.append("public class E {\n");
  222. buf.append("\n");
  223. buf.append(" public E() {\n");
  224. buf.append(" ArrayList list = new ArrayList();\n");
  225. buf.append(" HashMap<String, String> map = new HashMap<String, String>();\n");
  226. buf.append(" }\n");
  227. buf.append("}\n");
  228. Expected e1 = new Expected("Organize imports", buf.toString());
  229. assertCodeActions(cu, e1);
  230. }
  231. }