Bug 563054 - Restore XSD completion
Explicitly require org.eclipse.wst.xsd.core to get XSD completion
working + test.
Change-Id: I3926a88bda99040582502958962185fe5fb04136
Signed-off-by: Mickael Istria <mistria@redhat.com>
diff --git a/org.eclipse.m2e.editor.xml.sse.tests/META-INF/MANIFEST.MF b/org.eclipse.m2e.editor.xml.sse.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..04355b0
--- /dev/null
+++ b/org.eclipse.m2e.editor.xml.sse.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test for pom edition in WTP-based editor
+Bundle-SymbolicName: org.eclipse.m2e.editor.xml.sse.tests
+Bundle-Version: 1.16.0.qualifier
+Automatic-Module-Name: org.eclipse.m2e.xmlls.extension.tests
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse m2e
+Require-Bundle: org.junit;bundle-version="4.12.0",
+ org.eclipse.ui;bundle-version="3.115.0",
+ org.eclipse.ui.ide,
+ org.eclipse.core.resources;bundle-version="3.13.0",
+ org.eclipse.ui.workbench.texteditor;bundle-version="3.14.0",
+ org.eclipse.core.runtime;bundle-version="3.16.0",
+ org.eclipse.ui.tests.harness,
+ org.eclipse.m2e.editor.xml;bundle-version="1.15.0",
+ org.eclipse.m2e.core.ui;bundle-version="1.16.0",
+ org.eclipse.m2e.core;bundle-version="1.16.0",
+ org.eclipse.m2e.editor;bundle-version="1.16.0",
+ org.eclipse.ui.forms,
+ org.eclipse.jface.text,
+ org.eclipse.search
diff --git a/org.eclipse.m2e.editor.xml.sse.tests/build.properties b/org.eclipse.m2e.editor.xml.sse.tests/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.m2e.editor.xml.sse.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/org.eclipse.m2e.editor.xml.sse.tests/pom.xml b/org.eclipse.m2e.editor.xml.sse.tests/pom.xml
new file mode 100644
index 0000000..e7b407c
--- /dev/null
+++ b/org.eclipse.m2e.editor.xml.sse.tests/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>m2e-core</artifactId>
+ <version>1.16.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.eclipse.m2e.editor.xml.sse.tests</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <configuration>
+ <requiresUIHarness>true</requiresUIHarness>
+ <requiresUIThread>true</requiresUIThread>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/WTPEditorTest.java b/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/WTPEditorTest.java
new file mode 100644
index 0000000..09bdc2e
--- /dev/null
+++ b/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/WTPEditorTest.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Red Hat Inc. and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+package org.eclipse.m2e.editor.xml.sse.tests;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.m2e.core.internal.preferences.MavenPreferenceConstants;
+import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator;
+import org.eclipse.m2e.editor.pom.MavenPomEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.part.MultiPageEditor;
+import org.eclipse.ui.tests.harness.util.DisplayHelper;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+import org.junit.After;
+import org.junit.Test;
+
+public class WTPEditorTest {
+
+ private IWorkbenchPage page;
+ private IProject project;
+
+ @After
+ public void closeAndDeleteAll() throws CoreException {
+ page.closeAllEditors(false);
+ project.delete(true, null);
+ }
+
+ @Test
+ public void testXSDCompletion() throws Exception {
+ IPreferenceStore preferenceStore = M2EUIPluginActivator.getDefault().getPreferenceStore();
+ preferenceStore.setValue(MavenPreferenceConstants.P_DEFAULT_POM_EDITOR_PAGE, true);
+ page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ project = ResourcesPlugin.getWorkspace().getRoot().getProject("test" + System.currentTimeMillis());
+ project.create(null);
+ project.open(null);
+ IFile pomFile = project.getFile("pom.xml");
+ pomFile.create(getClass().getResourceAsStream("pom.xml"), true, null);
+ ITextEditor editorPart = (ITextEditor) ((MavenPomEditor)IDE.openEditor(page, pomFile, MavenPomEditor.EDITOR_ID)).getActiveEditor();
+ editorPart.getSelectionProvider().setSelection(new TextSelection(359, 0));
+ Set<Shell> beforeShells = new HashSet<Shell>(Arrays.asList(Display.getDefault().getShells()));
+ assertTrue(DisplayHelper.waitForCondition(editorPart.getSite().getShell().getDisplay(), 5000, () ->
+ openCompletionTable(editorPart, beforeShells)
+ .map(Table::getItems)
+ .flatMap(items -> Arrays.stream(items).map(TableItem::getText).filter("groupId"::equals).findAny())
+ .isPresent()
+ ));
+ }
+
+ private Optional<Table> openCompletionTable(ITextEditor editorPart, Set<Shell> beforeShells) {
+ editorPart.getAction(ITextEditorActionConstants.CONTENT_ASSIST).run();
+ Set<Shell> afterShells = new HashSet<Shell>(Arrays.asList(Display.getDefault().getShells()));
+ afterShells.removeAll(beforeShells);
+ afterShells.removeIf(shell -> !shell.isVisible());
+ Shell completionShell = afterShells.iterator().next();
+ Optional<Table> table = Arrays.stream(completionShell.getChildren())
+ .filter(Table.class::isInstance)
+ .map(Table.class::cast)
+ .findAny();
+ return table;
+ }
+
+}
diff --git a/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/pom.xml b/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/pom.xml
new file mode 100644
index 0000000..15b56f4
--- /dev/null
+++ b/org.eclipse.m2e.editor.xml.sse.tests/src/org/eclipse/m2e/editor/xml/sse/tests/pom.xml
@@ -0,0 +1,10 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- missing artifactId should generate error -->
+ <groupId>org.test</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+
+</project>
\ No newline at end of file
diff --git a/org.eclipse.m2e.editor.xml/META-INF/MANIFEST.MF b/org.eclipse.m2e.editor.xml/META-INF/MANIFEST.MF
index 9d2fac4..c9db5ed 100644
--- a/org.eclipse.m2e.editor.xml/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.editor.xml/META-INF/MANIFEST.MF
@@ -13,6 +13,7 @@
org.eclipse.wst.sse.ui,
org.eclipse.wst.sse.core,
org.eclipse.wst.xml.core,
+ org.eclipse.wst.xsd.core,
org.eclipse.wst.common.uriresolver,
org.eclipse.m2e.core;bundle-version="[1.16.0,1.17.0)",
org.eclipse.m2e.core.ui;bundle-version="[1.16.0,1.17.0)",
diff --git a/pom.xml b/pom.xml
index 683888a..bc2cb89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -150,6 +150,7 @@
<module>org.eclipse.m2e.binaryproject.tests</module>
<module>org.eclipse.m2e.editor.lemminx.tests</module>
<module>org.eclipse.m2e.jdt.tests</module>
+ <module>org.eclipse.m2e.editor.xml.sse.tests</module>
</modules>