diff options
author | BoykoAlex | 2018-03-28 02:51:14 +0000 |
---|---|---|
committer | Mickael Istria | 2018-04-24 11:46:54 +0000 |
commit | de7c6d0ef5540dfbd4ef1c45e4057d2319acb2c4 (patch) | |
tree | ad51e1ccc768fd21de13758f4dd91c5563c15ce7 | |
parent | 0d442e5b6e6cc135332d476a92de7b68e283c53d (diff) | |
download | lsp4e-de7c6d0ef5540dfbd4ef1c45e4057d2319acb2c4.tar.gz lsp4e-de7c6d0ef5540dfbd4ef1c45e4057d2319acb2c4.tar.xz lsp4e-de7c6d0ef5540dfbd4ef1c45e4057d2319acb2c4.zip |
Bug 531697 - IntroURL hover test
Change-Id: Idbd83dd4c40a2e7df6e55ad27de53a7ad8c0e81e
Signed-off-by: BoykoAlex <aboyko@pivotal.io>
-rw-r--r-- | org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/hover/HoverTest.java | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/hover/HoverTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/hover/HoverTest.java index 6af2919d..53a7f868 100644 --- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/hover/HoverTest.java +++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/hover/HoverTest.java @@ -12,15 +12,20 @@ package org.eclipse.lsp4e.test.hover; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Collections; +import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jface.internal.text.html.BrowserInformationControl; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.lsp4e.operations.hover.LSBasedHover; @@ -30,11 +35,19 @@ import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.browser.ProgressAdapter; +import org.eclipse.swt.browser.ProgressEvent; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.junit.After; import org.junit.Before; import org.junit.Test; +@SuppressWarnings("restriction") public class HoverTest { private IProject project; @@ -134,4 +147,76 @@ public class HoverTest { index = hoverInfo.indexOf("HoverContent", index); assertNotEquals("Hover content found only once", -1, index); } + + @Test + public void testIntroUrlLink() throws Exception { + Hover hoverResponse = new Hover( + Collections.singletonList(Either.forLeft( + "[My intro URL link](http://org.eclipse.ui.intro/execute?command=org.eclipse.ui.file.close)")), + new Range(new Position(0, 0), new Position(0, 10))); + MockLanguageSever.INSTANCE.setHover(hoverResponse); + + IFile file = TestUtils.createUniqueTestFile(project, "HoverRange Other Text"); + ITextViewer viewer = TestUtils.openTextViewer(file); + + String hoverContent = hover.getHoverInfo(viewer, new Region(0, 10)); + + LSBasedHover hoverManager = new LSBasedHover(); + + Display display = PlatformUI.getWorkbench().getDisplay(); + final Shell shell = new Shell(display); + BrowserInformationControl wrapperControl = null, control = null; + try { + final RowLayout layout = new RowLayout(SWT.VERTICAL); + layout.fill = true; + shell.setLayout(layout); + shell.setSize(320, 200); + shell.open(); + + wrapperControl = (BrowserInformationControl) hoverManager.getHoverControlCreator() + .createInformationControl(shell); + control = (BrowserInformationControl) wrapperControl + .getInformationPresenterControlCreator().createInformationControl(shell); + Field f = BrowserInformationControl.class.getDeclaredField("fBrowser"); // + f.setAccessible(true); + + Browser browser = (Browser) f.get(control); + + AtomicBoolean completed = new AtomicBoolean(false); + + browser.addProgressListener(new ProgressAdapter() { + @Override + public void completed(ProgressEvent event) { + browser.removeProgressListener(this); + browser.execute("document.getElementsByTagName('a')[0].click()"); + while (display.readAndDispatch()) { + } + completed.set(true); + } + }); + + assertNotNull("Editor should be opened", viewer.getTextWidget()); + + browser.setText(hoverContent); + + long maxTimestamp = System.currentTimeMillis() + 10000; + while (!completed.get() && System.currentTimeMillis() < maxTimestamp) { + display.readAndDispatch(); + } + + // Editor opened at the beginining is closed + assertNull("Editor should be closed", viewer.getTextWidget()); + } finally { + if (control != null) { + control.dispose(); + } + if (wrapperControl != null) { + wrapperControl.dispose(); + } + shell.dispose(); + while (display.readAndDispatch()) { + } + } + } + } |