Package com.google.gdt.eclipse.designer.core

Source Code of com.google.gdt.eclipse.designer.core.GTestUtils

/*******************************************************************************
* 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;

import com.google.gdt.eclipse.designer.builders.participant.MyCompilationParticipant;
import com.google.gdt.eclipse.designer.common.Constants;
import com.google.gdt.eclipse.designer.model.web.WebUtils;
import com.google.gdt.eclipse.designer.util.Utils;

import static org.eclipse.wb.tests.designer.core.AbstractJavaProjectTest.getFile;
import static org.eclipse.wb.tests.designer.core.AbstractJavaProjectTest.getFolder;
import static org.eclipse.wb.tests.designer.core.AbstractJavaProjectTest.setFileContent;
import static org.eclipse.wb.tests.designer.core.AbstractJavaProjectTest.waitForAutoBuild;

import org.eclipse.wb.internal.core.utils.check.Assert;
import org.eclipse.wb.internal.core.utils.jdt.core.ProjectUtils;
import org.eclipse.wb.tests.designer.Expectations;
import org.eclipse.wb.tests.designer.Expectations.StrValue;
import org.eclipse.wb.tests.designer.TestUtils;
import org.eclipse.wb.tests.designer.core.AbstractJavaProjectTest;
import org.eclipse.wb.tests.designer.core.AbstractJavaTest;
import org.eclipse.wb.tests.designer.core.TestProject;
import org.eclipse.wb.tests.designer.tests.DesignerTestCase;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IType;

import org.apache.commons.lang.StringUtils;

/**
* Utilities for GWT testing.
*
* @author scheglov_ke
*/
public final class GTestUtils {
  ////////////////////////////////////////////////////////////////////////////
  //
  // GWT locations
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * @return the location of default GWT.
   */
  public static String getLocation() {
    return getLocation_25();
//    return getLocation_trunk();
  }

  /**
   * @return the location of GWT 2.0
   */
  public static String getLocation_20() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.0.4");
    StrValue kosta = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.0.4");
    StrValue kosta_linux = new StrValue("scheglov Linux", "/home/scheglov/Work/GWT/gwt-2.0.4");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.0.4");
    return Expectations.get("C:/Work/GWT/gwt-2.0.4", new StrValue[]{
        kosta,
        kosta_linux,
        mitin,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.1.0
   */
  public static String getLocation_2_1_0() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.1.0");
    StrValue kosta = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.1.0");
    StrValue kosta_linux = new StrValue("scheglov Linux", "/home/scheglov/Work/GWT/gwt-2.1.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.1.0");
    return Expectations.get("C:/Work/GWT/gwt-2.1.0", new StrValue[]{
        mitin,
        kosta,
        kosta_linux,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.1.1
   */
  public static String getLocation_21() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.1.1");
    StrValue kosta = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.1.1");
    StrValue kosta_linux = new StrValue("scheglov Linux", "/home/scheglov/Work/GWT/gwt-2.1.1");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.1.1");
    return Expectations.get("C:/Work/GWT/gwt-2.1.1", new StrValue[]{
        mitin,
        kosta,
        kosta_linux,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.2
   */
  public static String getLocation_22() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.2-trunk");
    StrValue kosta_mac = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.2.0");
    StrValue kosta_win = new StrValue("scheglov-win", "C:/Work/GWT/gwt-2.2.0");
    StrValue kosta_linux = new StrValue("scheglov Linux", "/home/scheglov/Dropbox/Work/gwt-0.0.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.2.0");
    return Expectations.get("C:/Work/GWT/gwt-2.2.0", new StrValue[]{
        mitin,
        kosta_mac,
        kosta_win,
        kosta_linux,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.3
   */
  public static String getLocation_23() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.3-trunk");
    StrValue kosta_mac = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.3.0");
    StrValue kosta_win = new StrValue("scheglov-win", "C:/Work/GWT/gwt-2.3.0");
    StrValue kosta_linux = new StrValue("raziel Linux", "/home/scheglov/Work/GWT/gwt-2.3.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.3.0");
    return Expectations.get("C:/Work/GWT/gwt-2.3.0", new StrValue[]{
        mitin,
        kosta_mac,
        kosta_win,
        kosta_linux,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.4
   */
  public static String getLocation_24() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.4-trunk");
    StrValue kosta_mac = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.4.0");
    StrValue kosta_win = new StrValue("scheglov-win", "C:/Work/GWT/gwt-2.4.0");
    StrValue kosta_linux = new StrValue("raziel Linux", "/home/scheglov/Work/GWT/gwt-2.4.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.4.0");
    return Expectations.get("C:/Work/GWT/gwt-2.4.0", new StrValue[]{
        mitin,
        kosta_mac,
        kosta_win,
        kosta_linux,
        flanker_linux});
  }

  /**
   * @return the location of GWT 2.5
   */
  public static String getLocation_25() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-2.5");
    StrValue kosta_mac = new StrValue("scheglov-macpro", "/Users/scheglov/GWT/gwt-2.5.0");
    StrValue kosta_win = new StrValue("scheglov-win", "C:/Work/GWT/gwt-2.5.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-2.5.0");
    return Expectations.get("C:/Work/GWT/gwt-2.5.0", new StrValue[]{
        mitin,
        kosta_mac,
        kosta_win,
        flanker_linux});
  }

  /**
   * @return the location of the GWT from trunk.
   */
  public static String getLocation_trunk() {
    StrValue mitin = new StrValue("mitin-aa", "/Users/mitin_aa/gwt/gwt-trunk");
    StrValue kosta =
        new StrValue("scheglov-win", "C:/eclipseGWT/workspace/trunk/build/staging/gwt-0.0.0");
    StrValue flanker_linux = new StrValue("flanker-desktop", "/home/flanker/Work/GWT/gwt-trunk");
    return Expectations.get("C:/Work/GWT/gwt-trunk", new StrValue[]{mitin, kosta, flanker_linux});
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Project
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Configures given {@link TestProject} for using GWT.
   */
  public static void configure(TestProject testProject) throws Exception {
    configure(getLocation(), testProject);
  }

  /**
   * Configures given {@link TestProject} for using specified GWT location.
   */
  public static void configure(String gwtLocation, TestProject testProject) throws Exception {
    IProject project = testProject.getProject();
    // add jars
    testProject.addExternalJar(gwtLocation + "/gwt-user.jar");
    if (Utils.getVersion(project).isHigherOrSame(Utils.GWT_2_2)) {
      testProject.addExternalJar(gwtLocation + "/validation-api-1.0.0.GA.jar");
      testProject.addExternalJar(gwtLocation + "/validation-api-1.0.0.GA-sources.jar");
    }
    ProjectUtils.addNature(project, Constants.NATURE_ID);
    MyCompilationParticipant.ENABLED = false;
    // web folder
    {
      String webFolderName = WebUtils.getWebFolderName(project);
      project.getFolder(new Path(webFolderName)).create(true, true, null);
      project.getFolder(new Path(webFolderName + "/WEB-INF")).create(true, true, null);
    }
  }

  /**
   * Creates new GWT module.
   *
   * @param moduleId
   *          the id of module, such as <code>com.mycompany.project.ImageViewer</code>.
   *
   * @return the module {@link IFile}.
   */
  public static IFile createModule(TestProject testProject, String moduleId) throws Exception {
    IProject project = testProject.getProject();
    Assert.isTrue(moduleId.contains("."), "Given module name '%s' is not fully qualifed.", moduleId);
    String packageName = StringUtils.substringBeforeLast(moduleId, ".");
    String shortModuleName = StringUtils.substringAfterLast(moduleId, ".");
    String publicFolderPath = WebUtils.getWebFolderName(project) + "/";
    IPackageFragment modulePackage = testProject.getPackage(packageName);
    // *.gwt.xml
    IFile moduleFile;
    {
      String entryPointTypeName = packageName + ".client." + shortModuleName;
      String source =
          DesignerTestCase.getDoubleQuotes2(new String[]{
              "<module>",
              "  <inherits name='com.google.gwt.user.User'/>",
              //"  <inherits name='com.google.gwt.user.theme.standard.Standard'/>",
              "  <entry-point class='" + entryPointTypeName + "'/>",
              "</module>"});
      moduleFile = testProject.createFile(modulePackage, shortModuleName + ".gwt.xml", source);
    }
    // "client" package
    {
      IPackageFragment clientPackage = testProject.getPackage(packageName + ".client");
      testProject.createUnit(
          clientPackage,
          shortModuleName + ".java",
          DesignerTestCase.getSourceDQ(
              "package " + clientPackage.getElementName() + ";",
              "import com.google.gwt.core.client.EntryPoint;",
              "import com.google.gwt.user.client.ui.RootPanel;",
              "public class " + shortModuleName + " implements EntryPoint {",
              "  public void onModuleLoad() {",
              "    RootPanel rootPanel = RootPanel.get();",
              "  }",
              "}"));
    }
    // "public" resources
    {
      // HTML
      {
        String docType = "";
        if (Utils.getVersion(project).isHigherOrSame(Utils.GWT_2_0)) {
          docType += "<!doctype html>";
        }
        //
        String html =
            DesignerTestCase.getSourceDQ(
                docType,
                "<html>",
                "  <head>",
                "    <title>Wrapper HTML for GWT module</title>",
                "    <meta name='gwt:module' content='" + moduleId + "'/>",
                "    <link type='text/css' rel='stylesheet' href='" + shortModuleName + ".css'/>",
                "  </head>",
                "  <body>",
                "    <script language='javascript' src='" + moduleId + ".nocache.js'></script>",
                "    <iframe id='__gwt_historyFrame' style='width:0;height:0;border:0'></iframe>",
                "  </body>",
                "</html>");
        setFileContent(project, publicFolderPath + "/" + shortModuleName + ".html", html);
      }
      // CSS
      {
        String css =
            DesignerTestCase.getSourceDQ(
                "body {",
                "  background-color: white;",
                "  font: 18px Arial;",
                "}",
                ".gwt-Button {",
                "  overflow: visible;",
                "}",
                "td {",
                "  font: 18px Arial;",
                "  padding: 0px;",
                "}",
                "a {",
                "  color: darkblue;",
                "}",
                ".gwt-TabLayoutPanelTab {",
                "  float: left;",
                "  border: 1px solid #87b3ff;",
                "  padding: 2px;",
                "  cursor: hand;",
                "}",
                ".gwt-TabLayoutPanelTab-selected {",
                "  font-weight: bold;",
                "  background-color: #e8eef7;",
                "  cursor: default;",
                "}");
        setFileContent(project, publicFolderPath + "/" + shortModuleName + ".css", css);
      }
      // images
      {
        TestUtils.createImagePNG(testProject, publicFolderPath + "/1.png", 16, 16);
        TestUtils.createImagePNG(testProject, publicFolderPath + "/2.png", 16, 16);
      }
    }
    // web.xml
    {
      String content =
          DesignerTestCase.getSourceDQ(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>" + shortModuleName + ".html</welcome-file>",
              "  </welcome-file-list>",
              "",
              "</web-app>"});
      setFileContent(project, publicFolderPath + "/WEB-INF/web.xml", content);
    }
    // "server" package
    testProject.getPackage(packageName + ".server");
    // done
    return moduleFile;
  }

  /**
   * Configures project as Maven-like with GWT module.
   */
  public static void configureMavenProject() throws Exception {
    TestProject testProject = AbstractJavaProjectTest.m_testProject;
    // prepare Maven-like project
    getFolder("src").delete(true, null);
    getFolder("src/main/java");
    getFolder("src/main/resources");
    testProject.removeSourceFolder("/TestProject/src");
    testProject.addSourceFolder("/TestProject/src/main/java");
    testProject.addSourceFolder("/TestProject/src/main/resources");
    waitForAutoBuild();
    // create GWT module
    createModule(testProject, "test.Module");
    // move module file into "resources"
    {
      IFile moduleFile = getFile("src/main/java/test/Module.gwt.xml");
      getFolder("src/main/resources/test");
      moduleFile.move(new Path("/TestProject/src/main/resources/test/Module.gwt.xml"), true, null);
    }
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Special GWT classes
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Creates types for <code>RemoteService</code> interface and implementation, in
   * <code>"test"</code> package, with name <code>"MyService"</code>.
   *
   * @return the created {@link IType}'s for interface and implementation.
   */
  public static IType[] createTestService(AbstractJavaTest javaTest) throws Exception {
    return createTestService(javaTest, "MyService");
  }

  /**
   * Creates types for <code>RemoteService</code> interface and implementation, in
   * <code>"test"</code> package.
   *
   * @return the created {@link IType}'s for interface and implementation.
   */
  public static IType[] createTestService(AbstractJavaTest javaTest, String serviceName)
      throws Exception {
    return createService(javaTest, "test", serviceName);
  }

  /**
   * Creates types for <code>RemoteService</code> interface and implementation.
   *
   * @return the created {@link IType}'s for interface and implementation.
   */
  public static IType[] createService(AbstractJavaTest javaTest,
      String modulePackageName,
      String serviceName) throws Exception {
    String asyncName = serviceName + "Async";
    String interfacePackageName = modulePackageName + ".client";
    String implementationPackageName = modulePackageName + ".server";
    IType interfaceType =
        javaTest.createModelType(
            interfacePackageName,
            serviceName + ".java",
            DesignerTestCase.getSourceDQ(
                "package " + interfacePackageName + ";",
                "import com.google.gwt.core.client.GWT;",
                "import com.google.gwt.user.client.rpc.RemoteService;",
                "import com.google.gwt.user.client.rpc.ServiceDefTarget;",
                "public interface " + serviceName + " extends RemoteService {",
                "  public static class Util {",
                "    private static " + asyncName + " instance;",
                "    public static " + asyncName + " getInstance() {",
                "      if (instance == null) {",
                "        instance = (" + asyncName + ") GWT.create(" + serviceName + ".class);",
                "        ServiceDefTarget target = (ServiceDefTarget) instance;",
                "        target.setServiceEntryPoint(GWT.getModuleBaseURL() + '"
                    + serviceName
                    + "');",
                "      }",
                "      return instance;",
                "    }",
                "  }",
                "}"));
    IType implementationType =
        javaTest.createModelType(
            implementationPackageName,
            serviceName + "Impl.java",
            DesignerTestCase.getSourceDQ(
                "package " + implementationPackageName + ";",
                "import com.google.gwt.user.server.rpc.RemoteServiceServlet;",
                "import " + interfacePackageName + "." + serviceName + ";",
                "public class "
                    + serviceName
                    + "Impl extends RemoteServiceServlet implements "
                    + serviceName
                    + " {",
                "}"));
    return new IType[]{interfaceType, implementationType};
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Markers
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * @return markers set by {@link MyCompilationParticipant}.
   */
  public static IMarker[] getMyMarkers(IFile file) throws CoreException {
    return file.findMarkers(MyCompilationParticipant.MARKER_ID, false, IResource.DEPTH_ZERO);
  }
}
TOP

Related Classes of com.google.gdt.eclipse.designer.core.GTestUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.