/******************************************************************************* * Copyright (c) 2010-2012 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.seam3.bot.test.tests; import java.util.Arrays; import java.util.List; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerReqType; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement.JBossServer; import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer; import org.jboss.reddeer.jface.text.contentassist.ContentAssistant; import org.jboss.reddeer.junit.requirement.inject.InjectRequirement; import org.jboss.reddeer.eclipse.ui.perspectives.JavaEEPerspective; import org.jboss.reddeer.requirements.cleanworkspace.CleanWorkspaceRequirement.CleanWorkspace; import org.jboss.reddeer.requirements.openperspective.OpenPerspectiveRequirement.OpenPerspective; import org.jboss.reddeer.requirements.server.ServerReqState; import org.jboss.reddeer.swt.impl.ctab.DefaultCTabItem; import org.jboss.reddeer.swt.impl.styledtext.DefaultStyledText; import org.jboss.reddeer.workbench.api.Editor; import org.jboss.reddeer.workbench.impl.editor.DefaultEditor; import org.jboss.tools.cdi.seam3.bot.test.base.Seam3TestBase; import org.jboss.tools.cdi.seam3.bot.test.util.SeamLibrary; import org.jboss.tools.common.reddeer.label.IDELabel; import org.junit.BeforeClass; import org.junit.Test; /** * * @author jjankovi * */ @CleanWorkspace @OpenPerspective(JavaEEPerspective.class) @JBossServer(state=ServerReqState.PRESENT, type=ServerReqType.AS7_1) public class SeamConfigCodeCompletionTest extends Seam3TestBase { private static String projectName = "seamConfigCodeCompletion"; private static final String SEAM_CONFIG = "seam-beans.xml"; @InjectRequirement private static ServerRequirement sr; @BeforeClass public static void setup() { importSeam3ProjectWithLibrary(projectName, SeamLibrary.SOLDER_3_1, sr.getRuntimeNameLabelText(sr.getConfig())); openSeamConfig(); } /** * In context of <beans> ... </beans> * Suggest all classes in available packages. */ @Test public void testClassesCodeCompletion() { List<String> expectedProposalList = Arrays.asList("r:Envelope - test","r:Report - test"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of <beans> ... </beans> * Suggest all annotation types in available packages. */ @Test public void testAnnotationsCodeCompletion() { List<String> expectedProposalList = Arrays.asList("r:Q1 - test","r:S1 - test"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag header <r:Report | > Suggest all fields available if Report is class; */ @Test public void testClassInFieldsCodeCompletion() { List<String> expectedProposalList = Arrays.asList("annotatedValue"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")+10); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag header <r:Report | > Suggest all methods available if Report is annotation type. */ @Test public void testAnnotationInMethodsCodeCompletion() { List<String> expectedProposalList = Arrays.asList("someMethod"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:S1 >")+6); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag content <r:Report> | </r:Report> Suggest <s:replaces/> and <s:modifies/> if Report is class; */ @Test public void testReplacesModifiesCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:replaces", "s:modifies"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")+11); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag content <r:Report> | </r:Report> Suggest <s:parameters> if Report is class; */ @Test public void testParametersCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:parameters"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")+11); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag content <r:Report> | </r:Report> Suggest all fields and methods available if Report is class; */ @Test public void testClassFieldsAndMethodsCodeCompletion() { List<String> expectedProposalList = Arrays.asList("r:value", "r:someMethod"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Envelope >")+13); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag content <r:Report> | </r:Report> Suggest all methods available if Report is annotation type; */ @Test public void testAnnotationMethodsCodeCompletion() { List<String> expectedProposalList = Arrays.asList("r:someMethod"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:S1 >")+7); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** * In context of tag content <r:Report> | </r:Report> Suggest all annotation types in available packages. */ @Test public void testAnnotationsInPackageCodeCompletion() { List<String> expectedProposalList = Arrays.asList("r:Q1 - test", "r:S1 - test"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:Report >")+11); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of <r:Report> <r:address> | </r:address> </r:Report> Suggest <s:value> if 'address' is class field or annotation type method; */ @Test public void testValueCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:value"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:annotatedValue>")+18); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of <r:Report> <r:address> | </r:address> </r:Report> Suggest <s:entry> if 'address' is class field or annotation type method (maybe we should check that it is map); */ @Test public void testEntryCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:entry"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:annotatedValue>")+18); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of <r:Report> <r:address> | </r:address> </r:Report> Suggest <s:parameters> if 'address' is class method; */ @Test public void testMethodParametersCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:parameters"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<r:someMethod>")+14); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of <s:entry> | </s:entry> Suggest <s:value> and <s:key> */ @Test public void testValueAndKeyCodeCompletion() { List<String> expectedProposalList = Arrays.asList("s:key", "s:value"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<s:entry>")+9); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of <s:value> | </s:value> or <s:key> | </s:key> Suggest all classes in available packages since value may be set as an inline bean. */ @Test public void testInlineBeanCompletion() { List<String> expectedProposalList = Arrays.asList("r:Report - test", "r:Envelope - test", "r:Q1 - test", "r:S1 - test"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<s:value>")+9); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("<s:key>")+7); ca = e.openContentAssistant(); proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } /** In context of xmlns:*="|" Suggest "urn:java:" with available packages. */ @Test public void testAvailablePackagesCompletion() { List<String> expectedProposalList = Arrays.asList("test", "org", "com"); Editor e = new DefaultEditor(SEAM_CONFIG); new DefaultStyledText().selectPosition(new DefaultStyledText().getPositionOfText("xmlns:s=\"")+9); ContentAssistant ca = e.openContentAssistant(); List<String> proposals = ca.getProposals(); ca.close(); proposals.containsAll(expectedProposalList); } private static void openSeamConfig() { PackageExplorer pe = new PackageExplorer(); pe.open(); pe.getProject(projectName).getProjectItem(IDELabel.WebProjectsTree.WEB_CONTENT, IDELabel.WebProjectsTree.WEB_INF, SEAM_CONFIG).open(); new DefaultEditor(SEAM_CONFIG); new DefaultCTabItem("Source").activate(); } }