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>