| /* |
| * Copyright 2010 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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.gwt.user.tools; |
| |
| import com.google.gwt.user.tools.WebAppCreator.ArgProcessor; |
| |
| import junit.framework.TestCase; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| /** |
| * Test Class for WebAppCreator. |
| */ |
| public class WebAppCreatorTest extends TestCase { |
| |
| private static final String MY_PROJECT = "com.foo.Hello"; |
| private String mockJar; |
| private String projectFolder; |
| private File tempFolder; |
| private String tempPath; |
| |
| @Override |
| public void setUp() throws Exception { |
| // Create a temporary folder for the test |
| tempFolder = File.createTempFile("gwt-test-webappcreator-", ""); |
| assertTrue(tempFolder.delete()); |
| assertTrue(tempFolder.mkdir()); |
| tempPath = tempFolder.getAbsolutePath(); |
| |
| // Generate an empty .jar |
| mockJar = tempPath + File.separatorChar + "mock-junit.jar"; |
| assertTrue(new File(mockJar).createNewFile()); |
| |
| // Verify that project folder doesn't exist |
| projectFolder = tempPath + File.separatorChar + "project"; |
| assertFalse(new File(projectFolder).exists()); |
| } |
| |
| @Override |
| public void tearDown() { |
| // Delete temporary folder |
| deleteDir(tempFolder); |
| } |
| |
| /** |
| * Default options, generate ant and eclipse files. |
| */ |
| public void testAppCreatorAnt() throws IOException { |
| runCreator("-out", projectFolder, MY_PROJECT); |
| assertFileExists(".project"); |
| assertFileExists(".classpath"); |
| assertFileExists("build.xml"); |
| assertFileExists("README.txt"); |
| assertFileExists("Hello.launch"); |
| assertFileExists("war/Hello.html"); |
| assertFileExists("war/Hello.css"); |
| assertFileExists("war/WEB-INF/web.xml"); |
| assertFileExists("src/com/foo/Hello.gwt.xml"); |
| assertFileExists("src/com/foo/client/GreetingServiceAsync.java"); |
| assertFileExists("src/com/foo/client/GreetingService.java"); |
| assertFileExists("src/com/foo/client/Hello.java"); |
| assertFileExists("src/com/foo/shared/FieldVerifier.java"); |
| assertFileExists("src/com/foo/server/GreetingServiceImpl.java"); |
| assertFileDoesNotExist("HelloTest-dev.launch"); |
| assertFileDoesNotExist("HelloTest-prod.launch"); |
| assertFileDoesNotExist("test/com/foo/HelloJUnit.gwt.xml"); |
| assertFileDoesNotExist("test/com/foo/client/HelloTest.java"); |
| } |
| |
| /** |
| * Adding a valid junit.jar, the test stuff is generated. |
| */ |
| public void testCreatorAntJunit() throws IOException { |
| runCreator("-out", projectFolder, "-junit", mockJar, MY_PROJECT); |
| assertFileExists(".project"); |
| assertFileExists(".classpath"); |
| assertFileExists("build.xml"); |
| assertFileExists("README.txt"); |
| assertFileExists("Hello.launch"); |
| assertFileExists("HelloTest-dev.launch"); |
| assertFileExists("HelloTest-prod.launch"); |
| assertFileExists("war/Hello.html"); |
| assertFileExists("war/Hello.css"); |
| assertFileExists("war/WEB-INF/web.xml"); |
| assertFileExists("src/com/foo/Hello.gwt.xml"); |
| assertFileExists("src/com/foo/client/GreetingServiceAsync.java"); |
| assertFileExists("src/com/foo/client/GreetingService.java"); |
| assertFileExists("src/com/foo/client/Hello.java"); |
| assertFileExists("src/com/foo/shared/FieldVerifier.java"); |
| assertFileExists("src/com/foo/server/GreetingServiceImpl.java"); |
| assertFileExists("test/com/foo/HelloJUnit.gwt.xml"); |
| assertFileExists("test/com/foo/client/HelloTest.java"); |
| } |
| |
| /** |
| * Check illegal argument combinations. |
| */ |
| public void testCreatorBadArguments() { |
| |
| ArgProcessor argProcessor = new WebAppCreator().new ArgProcessor(); |
| assertFalse(argProcessor.processArgs("-out", projectFolder, |
| "unknown_parameter", MY_PROJECT)); |
| |
| argProcessor = new WebAppCreator().new ArgProcessor(); |
| assertFalse(argProcessor.processArgs("-out", projectFolder, |
| "wrong_project_name")); |
| |
| argProcessor = new WebAppCreator().new ArgProcessor(); |
| assertFalse(argProcessor.processArgs("-out", projectFolder, "-ignore", |
| "-overwrite", MY_PROJECT)); |
| |
| argProcessor = new WebAppCreator().new ArgProcessor(); |
| assertFalse(argProcessor.processArgs("-out", projectFolder, "-overwrite", |
| "-ignore", MY_PROJECT)); |
| } |
| |
| /** |
| * Do not generate eclipse files. |
| */ |
| public void testCreatorNoAnt() throws IOException { |
| runCreator("-out", projectFolder, "-noant", "-junit", mockJar, MY_PROJECT); |
| assertFileExists(".project"); |
| assertFileExists(".classpath"); |
| assertFileDoesNotExist("build.xml"); |
| assertFileExists("README.txt"); |
| assertFileExists("Hello.launch"); |
| assertFileExists("HelloTest-dev.launch"); |
| assertFileExists("HelloTest-prod.launch"); |
| assertFileExists("war/Hello.html"); |
| assertFileExists("war/Hello.css"); |
| assertFileExists("war/WEB-INF/web.xml"); |
| assertFileExists("src/com/foo/Hello.gwt.xml"); |
| assertFileExists("src/com/foo/client/GreetingServiceAsync.java"); |
| assertFileExists("src/com/foo/client/GreetingService.java"); |
| assertFileExists("src/com/foo/client/Hello.java"); |
| assertFileExists("src/com/foo/shared/FieldVerifier.java"); |
| assertFileExists("src/com/foo/server/GreetingServiceImpl.java"); |
| assertFileExists("test/com/foo/HelloJUnit.gwt.xml"); |
| assertFileExists("test/com/foo/client/HelloTest.java"); |
| } |
| |
| /** |
| * Do not generate eclipse files. |
| */ |
| public void testCreatorNoEclipse() throws IOException { |
| runCreator("-out", projectFolder, "-XnoEclipse", "-junit", mockJar, |
| MY_PROJECT); |
| assertFileDoesNotExist(".project"); |
| assertFileDoesNotExist(".classpath"); |
| assertFileExists("build.xml"); |
| assertFileExists("README.txt"); |
| assertFileDoesNotExist("Hello.launch"); |
| assertFileDoesNotExist("HelloTest-dev.launch"); |
| assertFileDoesNotExist("HelloTest-prod.launch"); |
| assertFileExists("war/Hello.html"); |
| assertFileExists("war/Hello.css"); |
| assertFileExists("war/WEB-INF/web.xml"); |
| assertFileExists("src/com/foo/Hello.gwt.xml"); |
| assertFileExists("src/com/foo/client/GreetingServiceAsync.java"); |
| assertFileExists("src/com/foo/client/GreetingService.java"); |
| assertFileExists("src/com/foo/client/Hello.java"); |
| assertFileExists("src/com/foo/shared/FieldVerifier.java"); |
| assertFileExists("src/com/foo/server/GreetingServiceImpl.java"); |
| assertFileExists("test/com/foo/HelloJUnit.gwt.xml"); |
| assertFileExists("test/com/foo/client/HelloTest.java"); |
| } |
| |
| /** |
| * Generate a maven2 project. Note that -junit option is not needed. |
| */ |
| public void testCreatorMaven() throws IOException { |
| runCreator("-out", projectFolder, "-maven", MY_PROJECT); |
| assertFileExists(".project"); |
| assertFileExists(".classpath"); |
| assertFileExists("build.xml"); |
| assertFileExists("pom.xml"); |
| assertFileExists("README.txt"); |
| assertFileExists("src/main/java/com/foo/shared/FieldVerifier.java"); |
| assertFileExists("src/main/java/com/foo/server"); |
| assertFileExists("src/main/java/com/foo/server/GreetingServiceImpl.java"); |
| assertFileExists("src/main/java/com/foo/Hello.gwt.xml"); |
| assertFileExists("src/main/java/com/foo/client"); |
| assertFileExists("src/main/java/com/foo/client/Hello.java"); |
| assertFileExists("src/main/java/com/foo/client/GreetingServiceAsync.java"); |
| assertFileExists("src/main/java/com/foo/client/GreetingService.java"); |
| assertFileExists("src/main/webapp/Hello.html"); |
| assertFileExists("src/main/webapp/Hello.css"); |
| assertFileExists("src/main/webapp/WEB-INF/web.xml"); |
| assertFileExists("src/test/java/com/foo/client/HelloTest.java"); |
| assertFileExists("src/test/java/com/foo/HelloJUnit.gwt.xml"); |
| assertFileExists("Hello.launch"); |
| assertFileExists("HelloTest-dev.launch"); |
| assertFileExists("HelloTest-prod.launch"); |
| } |
| |
| /** |
| * Running generator on existing projects. |
| */ |
| public void testCreatorMultipleTimes() throws IOException { |
| // Create the project |
| runCreator("-out", projectFolder, MY_PROJECT); |
| |
| // Try create the project again without -ignore nor -overwrite |
| try { |
| runCreator("-out", projectFolder, MY_PROJECT); |
| fail("webAppCreator can not be run twice"); |
| } catch (IOException e) { |
| } |
| |
| // Check -ignore flag |
| try { |
| runCreator("-out", projectFolder, "-ignore", MY_PROJECT); |
| } catch (IOException e) { |
| fail("webAppCreator should not faild with -ignore option when is executed twice"); |
| } |
| |
| // Check -overwrite flag |
| try { |
| runCreator("-out", projectFolder, "-overwrite", MY_PROJECT); |
| } catch (IOException e) { |
| fail("webAppCreator should not faild with -ignore option when is executed twice"); |
| } |
| } |
| |
| /** |
| * Generate only eclipse stuff. |
| */ |
| public void testCreatorOnlyEclipse() throws IOException { |
| runCreator("-out", projectFolder, "-XonlyEclipse", "-junit", mockJar, |
| MY_PROJECT); |
| assertFileExists(".project"); |
| assertFileExists(".classpath"); |
| assertFileDoesNotExist("build.xml"); |
| assertFileDoesNotExist("README.txt"); |
| assertFileExists("Hello.launch"); |
| assertFileExists("HelloTest-dev.launch"); |
| assertFileExists("HelloTest-prod.launch"); |
| assertFileDoesNotExist("war/Hello.html"); |
| assertFileDoesNotExist("war/Hello.css"); |
| assertFileDoesNotExist("war/WEB-INF/web.xml"); |
| assertFileDoesNotExist("src/com/foo/Hello.gwt.xml"); |
| assertFileDoesNotExist("src/com/foo/client/GreetingServiceAsync.java"); |
| assertFileDoesNotExist("src/com/foo/client/GreetingService.java"); |
| assertFileDoesNotExist("src/com/foo/client/Hello.java"); |
| assertFileDoesNotExist("src/com/foo/shared/FieldVerifier.java"); |
| assertFileDoesNotExist("src/com/foo/server/GreetingServiceImpl.java"); |
| assertFileDoesNotExist("test/com/foo/HelloJUnit.gwt.xml"); |
| assertFileDoesNotExist("test/com/foo/client/HelloTest.java"); |
| } |
| |
| /** |
| * Test the main method. |
| */ |
| public void testMain() { |
| // This property overrides the default gwt installation path |
| // Note: this only can be set once because Utility.getInstallPath caches it |
| System.setProperty("gwt.devjar", mockJar); |
| assertTrue(WebAppCreator.doMain("-out", projectFolder, MY_PROJECT)); |
| assertFalse(WebAppCreator.doMain()); |
| } |
| |
| private void assertFileDoesNotExist(String file) { |
| assertFalse(new File(projectFolder + File.separatorChar + file).exists()); |
| } |
| |
| private void assertFileExists(String file) { |
| assertTrue(new File(projectFolder + File.separatorChar + file).exists()); |
| } |
| |
| /** |
| * Delete a folder recursively. |
| */ |
| private boolean deleteDir(File dir) { |
| if (dir.isDirectory()) { |
| String[] children = dir.list(); |
| for (String child : children) { |
| if (!deleteDir(new File(dir, child))) { |
| return false; |
| } |
| } |
| } |
| return dir.delete(); |
| } |
| |
| /** |
| * run appWebCreator. |
| */ |
| private void runCreator(String... args) throws IOException { |
| WebAppCreator creator = new WebAppCreator(); |
| ArgProcessor argProcessor = creator.new ArgProcessor(); |
| if (!argProcessor.processArgs(args)) { |
| throw new IllegalArgumentException(); |
| } |
| creator.doRun(tempPath); |
| } |
| } |