/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* All rights reserved. This program and the accompanying materials
* are 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.google.gdt.eclipse.designer.core.wizards;
import com.google.gdt.eclipse.designer.Activator;
import com.google.gdt.eclipse.designer.common.Constants;
import com.google.gdt.eclipse.designer.core.GTestUtils;
import com.google.gdt.eclipse.designer.wizards.model.module.ModuleWizard;
import com.google.gdt.eclipse.designer.wizards.model.project.ProjectWizard;
import org.eclipse.wb.tests.designer.TestUtils;
import org.eclipse.wb.tests.gef.UIRunnable;
import org.eclipse.wb.tests.gef.UiContext;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.StructuredSelection;
import static org.fest.assertions.Assertions.assertThat;
import org.apache.commons.lang.StringUtils;
/**
* Test for {@link ModuleWizard}.
*
* @author scheglov_ke
*/
public class ModuleWizardTest extends AbstractWizardTest {
////////////////////////////////////////////////////////////////////////////
//
// Exit zone :-) XXX
//
////////////////////////////////////////////////////////////////////////////
public void _test_exit() throws Exception {
System.exit(0);
}
////////////////////////////////////////////////////////////////////////////
//
// Tests
//
////////////////////////////////////////////////////////////////////////////
private static interface ModuleContents {
String getWebFolderName();
String[] getWebXmlContentExpected();
String[] getGwtXmlContentExpected();
}
private static void assertModule_20(ModuleContents contents) throws Exception {
assertTrue(getFolder0("src/com/mycompany/myapp").exists());
assertTrue(getFolder0("src/com/mycompany/myapp/client").exists());
assertTrue(getFolder0("src/com/mycompany/myapp/server").exists());
assertFalse(getFolder0("src/com/mycompany/myapp/public").exists());
{
String module = getFileContent("src/com/mycompany/myapp/MyApp.gwt.xml");
module = StringUtils.replace(module, "\r\n", "\n");
assertEquals(getSourceDQ(contents.getGwtXmlContentExpected()), module);
}
assertTrue(getFile("src/com/mycompany/myapp/client/MyApp.java").exists());
assertTrue(getFile(contents.getWebFolderName() + "/MyApp.css").exists());
assertTrue(getFile(contents.getWebFolderName() + "/MyApp.html").exists());
// WEB-INF/web.xml
{
IFile webXml = getFile(contents.getWebFolderName() + "/WEB-INF/web.xml");
assertTrue(webXml.exists());
String webXmlContent = StringUtils.replace(getFileContent(webXml), "\r\n", "\n");
assertEquals(getSourceDQ(contents.getWebXmlContentExpected()), webXmlContent);
}
}
private static class Module20Contents implements ModuleContents {
@Override
public String getWebFolderName() {
return "war";
}
@Override
public String[] getWebXmlContentExpected() {
return new String[]{
"<?xml version='1.0' encoding='UTF-8'?>",
"<!DOCTYPE web-app",
" PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'",
" 'http://java.sun.com/dtd/web-app_2_3.dtd'>",
"",
"<web-app>",
"",
" <!-- Default page to serve -->",
" <welcome-file-list>",
" <welcome-file>MyApp.html</welcome-file>",
" </welcome-file-list>",
"",
"</web-app>"};
}
@Override
public String[] getGwtXmlContentExpected() {
return new String[]{
"<module>",
" <inherits name='com.google.gwt.user.User'/>",
" <inherits name='com.google.gwt.user.theme.standard.Standard'/>",
" <entry-point class='com.mycompany.myapp.client.MyApp'/>",
"</module>"};
}
}
////////////////////////////////////////////////////////////////////////////
//
// 2.0
//
////////////////////////////////////////////////////////////////////////////
public void test_openWizard_20() throws Exception {
configureGWTProject(GTestUtils.getLocation_20());
animateModuleWizard();
assertModule_20();
}
public void test_openWizard_20_exist_web_xml() throws Exception {
configureGWTProject(GTestUtils.getLocation_20());
IFile webXml = getFile("war/WEB-INF/web.xml");
setFileContent(
webXml,
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!DOCTYPE web-app\r\nPUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\r\n\"http://java.sun.com/dtd/web-app_2_3.dtd\">\r\n<web-app>\r\n<!-- test -->\r\n</web-app>\r\n");
animateModuleWizard();
assertModule_20(new Module20Contents() {
@Override
public String[] getWebXmlContentExpected() {
return new String[]{
"<?xml version='1.0' encoding='UTF-8'?>",
"<!DOCTYPE web-app",
"PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'",
"'http://java.sun.com/dtd/web-app_2_3.dtd'>",
"<web-app>",
"<!-- test -->",
"</web-app>"};
}
});
}
/**
* It was requested to make "web" folder name configurable.
* <p>
* http://fogbugz.instantiations.com/fogbugz/default.php?41284
*/
public void test_openWizard_20_differentWebFolder_inPreferences() throws Exception {
Activator.getStore().setValue(Constants.P_WEB_FOLDER, "myWar");
configureGWTProject(GTestUtils.getLocation_20());
animateModuleWizard();
assertModule_20(new Module20Contents() {
@Override
public String getWebFolderName() {
return "myWar";
}
});
}
public static void assertModule_20() throws Exception {
assertModule_20(new Module20Contents());
{
String html = getFileContent("war/MyApp.html");
assertThat(html).startsWith("<!doctype html>");
}
}
////////////////////////////////////////////////////////////////////////////
//
// 2.1
//
////////////////////////////////////////////////////////////////////////////
public void test_openWizard_21() throws Exception {
configureGWTProject(GTestUtils.getLocation_21());
animateModuleWizard();
assertModule_20();
}
public void test_openWizard_MVP() throws Exception {
configureGWTProject(GTestUtils.getLocation_21());
animateModuleWizard(true);
assertModule_20(new Module20Contents() {
@Override
public String[] getGwtXmlContentExpected() {
return new String[]{
"<module>",
" <inherits name='com.google.gwt.user.User'/>",
" <inherits name='com.google.gwt.user.theme.standard.Standard'/>",
" <inherits name='com.google.gwt.place.Place'/>",
" <inherits name='com.google.gwt.activity.Activity'/>",
" <entry-point class='com.mycompany.myapp.client.MyApp'/>",
" <replace-with class='com.mycompany.myapp.client.ClientFactoryImpl'>",
" <when-type-is class='com.mycompany.myapp.client.ClientFactory'/>",
" </replace-with>",
"</module>"};
}
});
{
String html = getFileContent("war/MyApp.html");
assertThat(html).startsWith("<!doctype html>");
}
{
// ClientFactory
assertTrue(getFile("src/com/mycompany/myapp/client/ClientFactory.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/ClientFactoryImpl.java").exists());
// View
assertTrue(getFile("src/com/mycompany/myapp/client/ui/SampleView.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/ui/SampleViewImpl.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/ui/SampleViewImpl.ui.xml").exists());
// MVP
assertTrue(getFile("src/com/mycompany/myapp/client/activity/SampleActivity.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/place/SamplePlace.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/mvp/AppActivityMapper.java").exists());
assertTrue(getFile("src/com/mycompany/myapp/client/mvp/AppPlaceHistoryMapper.java").exists());
}
}
////////////////////////////////////////////////////////////////////////////
//
// Utils
//
////////////////////////////////////////////////////////////////////////////
private void configureGWTProject(String gwtLocation) throws Exception {
Activator.getStore().setValue(Constants.P_GWT_LOCATION, gwtLocation);
ProjectWizard.configureProjectAsGWTProject(m_javaProject);
}
private void animateModuleWizard() throws Exception {
animateModuleWizard(false);
}
private void animateModuleWizard(final boolean useMvpFramework) throws Exception {
new UiContext().executeAndCheck(new UIRunnable() {
public void run(UiContext context) throws Exception {
TestUtils.runWizard(new ModuleWizard(), new StructuredSelection(m_javaProject));
}
}, new UIRunnable() {
public void run(UiContext context) throws Exception {
context.useShell("New GWT Module");
context.getTextByLabel("&Module name:").setText("MyApp");
context.getTextByLabel("&Package name:").setText("com.mycompany.myapp");
if (useMvpFramework) {
context.selectButton("Create EntryPoint and public resources", true);
context.selectButton("Use MVP framework", true);
}
context.clickButton("&Finish");
}
});
}
}