/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.freemarker.ui.bot.test.editor; import static org.junit.Assert.assertTrue; import java.util.List; import org.jboss.reddeer.common.logging.Logger; import org.jboss.reddeer.core.util.Display; import org.jboss.reddeer.eclipse.core.resources.Project; import org.jboss.reddeer.eclipse.core.resources.ProjectItem; import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer; import org.jboss.reddeer.jface.text.contentassist.ContentAssistant; import org.jboss.reddeer.junit.runner.RedDeerSuite; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.junit.Test; import org.junit.runner.RunWith; /** * Freemarker test for code assist * @author Jiri Peterka * */ @RunWith(RedDeerSuite.class) public class FreeMarkerCodeAssistTest extends AbstractFreemarkerTest { private static final Logger log = Logger.getLogger(FreeMarkerCodeAssistTest.class); @Test public void codeAssistDirectiveAssign() { String expr = "<#"; checkCodeAssist(expr, "assign"); } @Test public void codeAssistAssignTest() { String expr = "<#assign var1=1><#assign var2=2><#assign va"; checkCodeAssist(expr, "var1", "var2"); } @Test public void codeAssistAttemptTest() { checkCodeAssist("<#", "attempt"); } @Test public void codeAssistBreakTest() { checkCodeAssist("<#", "break"); } @Test public void codeAssistCaseTest() { checkCodeAssist("<#", "case"); } @Test public void codeAssistCompressTest() { checkCodeAssist("<#", "compress"); } @Test public void codeAssistDefaultTest() { checkCodeAssist("<#", "default"); } @Test public void codeAssistElseTest() { checkCodeAssist("<#", "else"); } @Test public void codeAssistElseIfTest() { checkCodeAssist("<#", "elseif"); } @Test public void codeAssistEscapeTest() { checkCodeAssist("<#", "escape"); } @Test public void codeAssistFallbackTest() { checkCodeAssist("<#", "fallback"); } @Test public void codeAssistFlushTest() { checkCodeAssist("<#", "flush"); } @Test public void codeAssistForeachTest() { checkCodeAssist("<#", "foreach"); } @Test public void codeAssistFtlTest() { checkCodeAssist("<#", "ftl"); } @Test public void codeAssistFuctionTest() { checkCodeAssist("<#", "function"); } @Test public void codeAssistGlobaTest() { checkCodeAssist("<#", "global"); } @Test public void codeAssistIfTest() { checkCodeAssist("<#", "if"); } @Test public void codeAssistImportTest() { checkCodeAssist("<#", "import"); } @Test public void codeAssistIncludeTest() { checkCodeAssist("<#", "include"); } @Test public void codeAssisttListTest() { checkCodeAssist("<#", "list"); } @Test public void codeAssistLocalTest() { checkCodeAssist("<#", "local"); } @Test public void codeAssistLtTest() { checkCodeAssist("<#", "lt"); } @Test public void codeAssistMacroTest() { checkCodeAssist("<#", "macro"); } @Test public void codeAssistNestedTest() { checkCodeAssist("<#", "nested"); } @Test public void codeAssistNoescapeTest() { checkCodeAssist("<#", "noescape"); } @Test public void codeAssistNoparseTest() { checkCodeAssist("<#", "noparse"); } @Test public void codeAssistNtTest() { checkCodeAssist("<#", "nt"); } @Test public void codeAssistRecoverTest() { checkCodeAssist("<#", "recover"); } @Test public void codeAssistReturnTest() { checkCodeAssist("<#", "return"); } @Test public void codeAssistRtTest() { checkCodeAssist("<#", "rt"); } @Test public void codeAssistSettingTest() { checkCodeAssist("<#", "setting"); } @Test public void codeAssistStopTest() { checkCodeAssist("<#", "stop"); } @Test public void codeAssistSwitchTest() { checkCodeAssist("<#", "switch"); } @Test public void codeAssistTTest() { checkCodeAssist("<#", "t"); } @Test public void codeAssistVisitTest() { checkCodeAssist("<#", "visit"); } private void checkCodeAssist(String expr, String... expected) { log.step("Check if code assist contains expected expressions"); PackageExplorer explorer = new PackageExplorer(); Project project = explorer.getProject(projectName); project.expand(); project.refresh(); ProjectItem item = project.getProjectItem(parentFolder, "empty.ftl"); item.open(); String file = "empty.ftl"; TextEditor textEditor = new TextEditor(file); String start = expr; textEditor.setText(start); textEditor.save(); forceEditorFocus(textEditor); textEditor.setCursorPosition(start.length()); ContentAssistant ca = textEditor.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); for (String e : expected) { assertTrue(e + " is expected", proposals.contains(e)); } } private void forceEditorFocus(TextEditor editor) { Display.syncExec(new Runnable() { @Override public void run() { editor.getEditorPart().setFocus(); } }); } }