/******************************************************************************* * 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.livereload.ui.bot.test; import java.util.List; import org.jboss.reddeer.common.condition.AbstractWaitCondition; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.common.wait.WaitWhile; import org.jboss.reddeer.core.condition.JobIsRunning; import org.jboss.reddeer.eclipse.condition.ConsoleHasText; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.eclipse.jst.servlet.ui.WebProjectFirstPage; import org.jboss.reddeer.eclipse.jst.servlet.ui.WebProjectWizard; import org.jboss.reddeer.eclipse.wst.server.ui.view.ServerModule; import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView; import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersViewEnums.ServerPublishState; import org.jboss.reddeer.eclipse.wst.server.ui.wizard.ModifyModulesDialog; import org.jboss.reddeer.eclipse.wst.server.ui.wizard.ModifyModulesPage; import org.jboss.reddeer.requirements.cleanworkspace.CleanWorkspaceRequirement.CleanWorkspace; import org.jboss.reddeer.swt.api.Shell; import org.jboss.reddeer.swt.condition.ShellIsAvailable; import org.jboss.reddeer.swt.impl.button.YesButton; import org.jboss.reddeer.swt.impl.menu.ContextMenu; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.workbench.impl.shell.WorkbenchShell; import org.jboss.tools.jst.reddeer.wst.html.ui.wizard.NewHTMLFileWizardDialog; import org.jboss.tools.jst.reddeer.wst.html.ui.wizard.NewHTMLFileWizardHTMLPage; import org.junit.BeforeClass; @CleanWorkspace public class LivereloadBaseTest { public static final String PROJECT_NAME="WebProject"; @BeforeClass public static void prepareBase(){ WorkbenchShell ws = new WorkbenchShell(); if(!ws.isMaximized()){ ws.maximize(); } } public String createProjectWithPage(){ WebProjectWizard ww = new WebProjectWizard(); ww.open(); new WebProjectFirstPage().setProjectName(PROJECT_NAME); ww.finish(); ProjectExplorer pe = new ProjectExplorer(); pe.open(); pe.selectProjects(PROJECT_NAME); NewHTMLFileWizardDialog nh = new NewHTMLFileWizardDialog(); nh.open(); NewHTMLFileWizardHTMLPage np = new NewHTMLFileWizardHTMLPage(); String pageName = np.getFileName(); nh.finish(); return pageName; } public void deployProjectToServer(String server, String projectName){ ServersView sw = new ServersView(); sw.open(); ModifyModulesDialog md = sw.getServer(server).addAndRemoveModules(); new ModifyModulesPage().add(projectName); md.finish(); new WaitUntil(new ConsoleHasText("Deployed \""+projectName+".war\""),TimePeriod.LONG); } public void deployProjectToRemoteServer(String server, String projectName){ ServersView sw = new ServersView(); sw.open(); ModifyModulesDialog md = sw.getServer(server).addAndRemoveModules(); new ModifyModulesPage().add(projectName); md.finish(); new WaitUntil(new ModuleIsDeployed(server, projectName), TimePeriod.LONG); } public void injectLivereload(String server, String projectName){ ServersView sw = new ServersView(); sw.open(); sw.getServer(server).getModule(projectName).getLabel(); new ContextMenu("Show In", "Web Browser on External Device...").select(); Shell s =new DefaultShell("LiveReload"); new YesButton().click(); new WaitWhile(new ShellIsAvailable(s)); new WaitWhile(new JobIsRunning()); new DefaultShell("Open").close(); new WaitWhile(new JobIsRunning()); } private class ModuleIsDeployed extends AbstractWaitCondition { private String server; private String module; public ModuleIsDeployed(String server, String module) { this.server = server; this.module = module; } @Override public boolean test() { ServersView sw = new ServersView(); sw.open(); List<ServerModule> modules = sw.getServer(server).getModules(); if(modules == null || modules.isEmpty()) { return false; } for(ServerModule m: modules) { return m.getLabel().getName().equals(module) && m.getLabel().getPublishState().equals(ServerPublishState.SYNCHRONIZED); } return false; } } }