Author: [email protected]
Date: Wed Jun 10 14:39:00 2009
New Revision: 5537

Added:
     
trunk/build-tools/ant-gwt/src/com/google/gwt/ant/taskdefs/LatestTimeJar.java
    trunk/user/test_i18n_bar/
    trunk/user/test_i18n_bar/com/
    trunk/user/test_i18n_bar/com/google/
    trunk/user/test_i18n_bar/com/google/gwt/
    trunk/user/test_i18n_bar/com/google/gwt/i18n/
    trunk/user/test_i18n_bar/com/google/gwt/i18n/client/
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/TestAnnotatedMessages_Nested_bb_CC.properties
    trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ExtendsInnerInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner_IsInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInnerMessages.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner_ExtendProtectedInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ProtectedInner.properties
     
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_SimpleInner.properties
    trunk/user/test_i18n_dollar/
    trunk/user/test_i18n_dollar/com/
    trunk/user/test_i18n_dollar/com/google/
    trunk/user/test_i18n_dollar/com/google/gwt/
    trunk/user/test_i18n_dollar/com/google/gwt/i18n/
    trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/TestAnnotatedMessages$Nested_bb_CC.properties
    trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ExtendsInnerInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner$IsInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInnerMessages.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner$ExtendProtectedInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ProtectedInner.properties
     
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$SimpleInner.properties
Removed:
     
trunk/user/test/com/google/gwt/i18n/client/TestAnnotatedMessages$Nested_bb_CC.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$ExtendsInnerInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner$IsInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInnerMessages.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner$ExtendProtectedInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$ProtectedInner.properties
     
trunk/user/test/com/google/gwt/i18n/client/resolutiontest/Inners$SimpleInner.properties
Modified:
    trunk/build-tools/ant-gwt/build.xml
    trunk/common.ant.xml
    trunk/dev/common.ant.xml
    trunk/dev/core/build.xml
    trunk/user/build.xml

Log:
Ant rework for speed:
* Added ant task LatestTimeJar to jar only the most
recent of duplicate
   entries.
* Used <outofdate> so jars in dev using <zipfileset> don't bother testing
   entries if the containing archive is unmodified.

Ant rework for cleanup:
* Introduced local.ant.properties
* Refactored test files containing $ to test_i18n_dollar, with companion
   test_i18n_bar, so we can test both sides of that split (and so it's easy
   for systems allergic to $ in filenames to opt out).  Ant property
   gwt.i18n.test.InnerClassChar={dollar,bar} selects which to use.
* Unified test target names to test.*, deprecating remoteweb-test and
   selenium-test as nonconforming.

Review by: scottb, jat



Modified: trunk/build-tools/ant-gwt/build.xml
==============================================================================
--- trunk/build-tools/ant-gwt/build.xml (original)
+++ trunk/build-tools/ant-gwt/build.xml Wed Jun 10 14:39:00 2009
@@ -24,10 +24,12 @@

    <target name="build" depends="compile" description="Packages this  
project into a jar">
      <mkdir dir="${gwt.build.lib}" />
-    <gwt.jar destfile="${gwt.build.lib}/${ant.project.name}.jar">
-      <fileset dir="src" />
+    <!-- we can't use the gwt.jar macro, as it needs the gwt-ant.jar being  
packaged here -->
+    <jar destfile="${gwt.build.lib}/${ant.project.name}.jar"  
duplicate="fail" filesonly="true"
+         index="true" update="true">
        <fileset dir="${javac.out}" />
-    </gwt.jar>
+      <fileset dir="src" />
+    </jar>
    </target>

    <target name="test" depends="build, compile.tests" description="Run unit  
tests for this project.">

Added:  
trunk/build-tools/ant-gwt/src/com/google/gwt/ant/taskdefs/LatestTimeJar.java
==============================================================================
--- (empty file)
+++  
trunk/build-tools/ant-gwt/src/com/google/gwt/ant/taskdefs/LatestTimeJar.java    
 
Wed Jun 10 14:39:00 2009
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2008 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.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.Jar;
+import org.apache.tools.zip.ZipExtraField;
+import org.apache.tools.zip.ZipOutputStream;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * A variation on Jar which handles duplicate entries by only archiving  
the most
+ * recent of any given path. This is done by keeping a map of paths (as  
shown in
+ * the jar file) against {...@link #EntryInfo} objects identifying the input  
source
+ * and its timestamp. Most of the actual archiving is deferred until  
archive
+ * finalization, when we've decided on the actual de-duplicated set of  
entries.
+ */
+public class LatestTimeJar extends Jar {
+
+  /**
+   * Metadata about pending entries in the jar, for replacement if newer  
entries
+   * are found. Subclasses of EntryInfo are held in the
+   */
+  protected abstract class EntryInfo {
+    protected long timestamp;
+    protected int mode;
+
+    public EntryInfo(long lastModified, int mode) {
+      this.timestamp = lastModified;
+      this.mode = mode;
+    }
+
+    /**
+     * Called to actually add the entry to a given zip stream.
+     *
+     * @param out
+     * @param path
+     * @throws IOException
+     */
+    public abstract void addToZip(ZipOutputStream out, String path)
+        throws IOException;
+
+    public long getLastModified() {
+      return timestamp;
+    }
+
+    public int getMode() {
+      return mode;
+    }
+  }
+
+  /**
+   * Metadata about a directory entry.
+   */
+  protected class DirEntryInfo extends EntryInfo {
+    protected File dir;
+    protected ZipExtraField extra[];
+
+    public DirEntryInfo(File dir, long touchTime, int mode,
+        ZipExtraField extra[]) {
+      super(touchTime, mode);
+      this.dir = dir;
+      this.extra = extra;
+    }
+
+    @Override
+    public void addToZip(ZipOutputStream out, String path) throws  
IOException {
+      doZipDir(dir, out, path, mode, extra);
+    }
+  }
+
+  /**
+   * Metadata about a file entry.
+   */
+  protected class FileEntryInfo extends EntryInfo {
+    private File tmpFile;
+    private File archive;
+
+    public FileEntryInfo(InputStream in, long lastModified, File  
fromArchive,
+        int mode) throws IOException {
+      super(lastModified, mode);
+      tmpFile = File.createTempFile("gwtjar", "");
+      tmpFile.deleteOnExit();
+      OutputStream fos = new FileOutputStream(tmpFile);
+      int readLen = in.read(buffer);
+      while (readLen > 0) {
+        fos.write(buffer, 0, readLen);
+        readLen = in.read(buffer);
+      }
+      fos.close();
+      archive = fromArchive;
+    }
+
+    @Override
+    public void addToZip(ZipOutputStream out, String path) throws  
IOException {
+      FileInputStream inStream = new FileInputStream(tmpFile);
+      doZipFile(inStream, out, path, timestamp, archive, mode);
+      tmpFile.delete();
+    }
+  }
+
+  private byte buffer[] = new byte[16 * 1024];
+  private Map<String, EntryInfo> paths = new TreeMap<String, EntryInfo>();
+
+  @Override
+  protected void finalizeZipOutputStream(ZipOutputStream out)
+      throws IOException, BuildException {
+    for (String path : paths.keySet()) {
+      paths.get(path).addToZip(out, path);
+    }
+    super.finalizeZipOutputStream(out);
+  }
+
+  @Override
+  protected void zipDir(File dir,
+      @SuppressWarnings("unused") ZipOutputStream out, String path, int  
mode,
+      ZipExtraField[] extra) throws IOException {
+    long thisTouchTime = (dir == null ? 0L : dir.lastModified());
+    String dirName = (dir == null ? "<null>" : dir.getAbsolutePath());
+    if (shouldReplace(path, thisTouchTime)) {
+      if (paths.get(path) != null) {
+        log("Obsoleting older " + path + " with " + dirName,
+            Project.MSG_VERBOSE);
+      }
+      paths.put(path, new DirEntryInfo(dir, thisTouchTime, mode, extra));
+    } else {
+      log("Newer " + path + " already added, skipping " + dirName,
+          Project.MSG_VERBOSE);
+    }
+  }
+
+  @Override
+  protected void zipFile(InputStream in,
+      @SuppressWarnings("unused") ZipOutputStream out, String path,
+      long lastModified, File fromArchive, int mode) throws IOException {
+
+    String desc = (fromArchive == null ? "file" : "file from "
+        + fromArchive.getAbsolutePath());
+
+    if (shouldReplace(path, lastModified)) {
+      if (paths.get(path) != null) {
+        log("Obsoleting older " + path + " with " + desc,  
Project.MSG_VERBOSE);
+      }
+      paths.put(path, new FileEntryInfo(in, lastModified, fromArchive,  
mode));
+    } else {
+      log("Newer " + path + " already added, skipping " + desc,
+          Project.MSG_VERBOSE);
+    }
+  }
+
+  private void doZipDir(File dir, ZipOutputStream out, String entryName,
+      int mode, ZipExtraField[] extra) throws IOException {
+    super.zipDir(dir, out, entryName, mode, extra);
+  }
+
+  private void doZipFile(InputStream inStream, ZipOutputStream out,
+      String entryName, long timestamp, File archive, int mode)
+      throws IOException {
+    super.zipFile(inStream, out, entryName, timestamp, archive, mode);
+  }
+
+  /**
+   * Checks whether an entry should be replaced, by touch dates and  
duplicates
+   * setting.
+   *
+   * @param path the path of an entry being considered
+   * @param touchTime the lastModified of the candiate replacement
+   * @return
+   */
+  private boolean shouldReplace(String path, long touchTime) {
+    EntryInfo oldInfo = paths.get(path);
+    // adding from jars, we get directories with 0L time; missing should be
+    // earlier than that, -1L.
+    long existingTouchTime = ((oldInfo != null) ? oldInfo.getLastModified()
+        : -1L);
+    return (existingTouchTime < touchTime || (existingTouchTime ==  
touchTime && this.duplicate.equals("add")));
+  }
+}

Modified: trunk/common.ant.xml
==============================================================================
--- trunk/common.ant.xml        (original)
+++ trunk/common.ant.xml        Wed Jun 10 14:39:00 2009
@@ -1,4 +1,10 @@
  <project name="common">
+  <!-- it's okay for this not to exist, but it gives a place to store
+       "your" property settings, if any, persistently.  For example, you
+       might use it to set gwt.junit.testcase.includes to a narrower subset
+       of test cases to exercise. -->
+  <property file="local.ant.properties" />
+
    <!-- gwt.build.iscasesensitivefs is true if the filesystem of the
      build machine is case-sensitive, false otherwise.  Update with
      new lines for any supported platforms with case-insensitive
@@ -135,9 +141,22 @@
      <javac srcdir="src" destdir="${javac.out}" debug="${javac.debug}"  
debuglevel="${javac.debuglevel}" source="${javac.source}"  
target="${javac.target}" nowarn="${javac.nowarn}"  
encoding="${javac.encoding}" />
    </presetdef>

-  <presetdef name="gwt.jar">
-    <jar destfile="${project.lib}" update="true" duplicate="preserve"  
index="true" />
-  </presetdef>
+  <macrodef name="gwt.jar">
+    <attribute name="destfile" default="${project.lib}"/>
+    <attribute name="duplicate" default="fail"/>
+    <attribute name="update" default="true"/>
+    <element name="jarcontents" implicit="true"/>
+    <sequential>
+      <taskdef name="jar.bydate"
+          classname="com.google.gwt.ant.taskdefs.LatestTimeJar"
+          classpath="${gwt.build.lib}/ant-gwt.jar" />
+
+      <jar.bydate destfile="@{destfile}" duplicate="@{duplicate}"  
filesonly="false"
+          index="true" update="@{update}">
+        <jarcontents/>
+      </jar.bydate>
+    </sequential>
+  </macrodef>

    <macrodef name="gwt.junit">
      <!-- TODO: make this more generic / refactor so it can be used from  
dev/core -->

Modified: trunk/dev/common.ant.xml
==============================================================================
--- trunk/dev/common.ant.xml    (original)
+++ trunk/dev/common.ant.xml    Wed Jun 10 14:39:00 2009
@@ -18,21 +18,40 @@

    <target name="build" depends="compile" description="Build and package  
this project">
      <mkdir dir="${gwt.build.lib}" />
-    <gwt.jar>
-      <fileset dir="src" excludes="**/package.html"/>
-      <fileset dir="${gwt.core.root}/src">
-        <exclude name="**/package.html"/>
-        <exclude name="com/google/gwt/dev/About.properties"/>
-      </fileset>
-      <fileset dir="${gwt.core.root}/super" excludes="**/package.html" />
-      <fileset dir="${javac.out}" />
-      <fileset dir="${gwt.core.build}/bin" />
-      <zipfileset src="${gwt.tools.lib}/eclipse/${gwt.dev.swt.jar}" />
-      <zipfileset src="${gwt.core.build}/alldeps.jar" />
-      <manifest>
-        <attribute name="Main-Class" value="com.google.gwt.dev.GWTMain" />
-      </manifest>
-    </gwt.jar>
+    <outofdate>
+      <sourcefiles>
+        <fileset dir="src" excludes="**/package.html"/>
+        <fileset dir="${gwt.core.root}/src">
+          <exclude name="**/package.html"/>
+          <exclude name="**/*.properties"/> <!-- copied and/or filtered  
into bin -->
+        </fileset>
+        <fileset dir="${gwt.core.root}/super" excludes="**/package.html" />
+        <fileset dir="${javac.out}" />
+        <fileset dir="${gwt.core.build}/bin" />
+        <fileset file="${gwt.tools.lib}/eclipse/${gwt.dev.swt.jar}" />
+        <fileset file="${gwt.core.build}/alldeps.jar" />
+      </sourcefiles>
+      <targetfiles>
+        <fileset file="${project.lib}"/>
+      </targetfiles>
+      <sequential>
+        <gwt.jar>
+          <fileset dir="src" excludes="**/package.html"/>
+          <fileset dir="${gwt.core.root}/src">
+            <exclude name="**/package.html"/>
+            <exclude name="**/*.properties"/> <!-- copied and/or filtered  
into bin -->
+          </fileset>
+          <fileset dir="${gwt.core.root}/super" excludes="**/package.html"  
/>
+          <fileset dir="${javac.out}" />
+          <fileset dir="${gwt.core.build}/bin" />
+          <zipfileset src="${gwt.tools.lib}/eclipse/${gwt.dev.swt.jar}" />
+          <zipfileset src="${gwt.core.build}/alldeps.jar" />
+          <manifest>
+            <attribute name="Main-Class"  
value="com.google.gwt.dev.GWTMain" />
+          </manifest>
+        </gwt.jar>
+      </sequential>
+    </outofdate>
    </target>

    <target name="clean" description="Cleans this project's intermediate and  
output files">

Modified: trunk/dev/core/build.xml
==============================================================================
--- trunk/dev/core/build.xml    (original)
+++ trunk/dev/core/build.xml    Wed Jun 10 14:39:00 2009
@@ -22,39 +22,82 @@

    <target name="build.alldeps.jar" description="Merges all dependency jars  
into a single jar">
      <mkdir dir="${project.build}" />
-    <gwt.jar destfile="${alldeps.jar}">
-      <zipfileset  
src="${gwt.tools.lib}/apache/tapestry-util-text-4.0.2.jar" />
-      <zipfileset src="${gwt.tools.lib}/apache/ant-1.6.5.jar" />
-      <zipfileset src="${gwt.tools.lib}/eclipse/jdt-3.4.2.jar" />
-      <zipfileset src="${gwt.tools.lib}/jetty/jetty-6.1.11.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/ant-launcher-1.6.5.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/catalina-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/catalina-optional-1.0.jar"  
/>
-      <zipfileset src="${gwt.tools.lib}/tomcat/commons-beanutils-1.6.jar"  
/>
-      <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-collections-3.1.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/commons-digester-1.5.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/commons-el-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/commons-logging-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/commons-modeler-1.1.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/jakarta-regexp-1.3.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/jasper-compiler-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/jasper-runtime-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/jsp-api-2.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/mx4j-jmx-1.1.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/naming-common-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/naming-factory-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/naming-java-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/naming-resources-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.4.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlets-common-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlets-default-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlets-invoker-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-coyote-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-http11-1.0.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-jk2-2.1.jar" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-util-5.1.jar" />
-    </gwt.jar>
+    <outofdate> <!-- saves rescanning all the source jars' contents -->
+      <sourcefiles>
+        <fileset dir="${gwt.tools.lib}">
+          <include name="apache/tapestry-util-text-4.0.2.jar" />
+          <include name="apache/ant-1.6.5.jar" />
+          <include name="eclipse/jdt-3.4.2.jar" />
+          <include name="jetty/jetty-6.1.11.jar" />
+          <include name="tomcat/ant-launcher-1.6.5.jar" />
+          <include name="tomcat/catalina-1.0.jar" />
+          <include name="tomcat/catalina-optional-1.0.jar" />
+          <include name="tomcat/commons-beanutils-1.6.jar" />
+          <include name="tomcat/commons-collections-3.1.jar" />
+          <include name="tomcat/commons-digester-1.5.jar" />
+          <include name="tomcat/commons-el-1.0.jar" />
+          <include name="tomcat/commons-logging-1.0.jar" />
+          <include name="tomcat/commons-modeler-1.1.jar" />
+          <include name="tomcat/jakarta-regexp-1.3.jar" />
+          <include name="tomcat/jasper-compiler-1.0.jar" />
+          <include name="tomcat/jasper-runtime-1.0.jar" />
+          <include name="tomcat/jsp-api-2.0.jar" />
+          <include name="tomcat/mx4j-jmx-1.1.jar" />
+          <include name="tomcat/naming-common-1.0.jar" />
+          <include name="tomcat/naming-factory-1.0.jar" />
+          <include name="tomcat/naming-java-1.0.jar" />
+          <include name="tomcat/naming-resources-1.0.jar" />
+          <include name="tomcat/servlet-api-2.5.jar" />
+          <include name="tomcat/servlet-api-2.4.jar" />
+          <include name="tomcat/servlets-common-1.0.jar" />
+          <include name="tomcat/servlets-default-1.0.jar" />
+          <include name="tomcat/servlets-invoker-1.0.jar" />
+          <include name="tomcat/tomcat-coyote-1.0.jar" />
+          <include name="tomcat/tomcat-http11-1.0.jar" />
+          <include name="tomcat/tomcat-jk2-2.1.jar" />
+          <include name="tomcat/tomcat-util-5.1.jar" />
+        </fileset>
+        <fileset file="build.xml"/>
+      </sourcefiles>
+      <targetfiles>
+        <fileset file="${alldeps.jar}"/>
+      </targetfiles>
+      <sequential>
+        <gwt.jar destfile="${alldeps.jar}">
+          <zipfileset  
src="${gwt.tools.lib}/apache/tapestry-util-text-4.0.2.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/ant-1.6.5.jar" />
+          <zipfileset src="${gwt.tools.lib}/eclipse/jdt-3.4.2.jar" />
+          <zipfileset src="${gwt.tools.lib}/jetty/jetty-6.1.11.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/ant-launcher-1.6.5.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/catalina-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/catalina-optional-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-beanutils-1.6.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-collections-3.1.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-digester-1.5.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/commons-el-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-logging-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/commons-modeler-1.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/jakarta-regexp-1.3.jar"  
/>
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/jasper-compiler-1.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/jasper-runtime-1.0.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/jsp-api-2.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/mx4j-jmx-1.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/naming-common-1.0.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/naming-factory-1.0.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/naming-java-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/naming-resources-1.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.4.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/servlets-common-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/servlets-default-1.0.jar" />
+          <zipfileset  
src="${gwt.tools.lib}/tomcat/servlets-invoker-1.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-coyote-1.0.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-http11-1.0.jar"  
/>
+          <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-jk2-2.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/tomcat/tomcat-util-5.1.jar" />
+        </gwt.jar>
+      </sequential>
+    </outofdate>
    </target>

    <property name="filter.pattern"  
value="com/google/gwt/dev/About.properties" />

Modified: trunk/user/build.xml
==============================================================================
--- trunk/user/build.xml        (original)
+++ trunk/user/build.xml        Wed Jun 10 14:39:00 2009
@@ -2,9 +2,17 @@
    <property name="gwt.root" location=".." />
    <property name="project.tail" value="user" />
    <property name="test.args" value="" />
-  <property name="gwt.junit.emmatestcase.includes"  
value="**/*Suite.class,com/google/gwt/dev/jjs/test/*Test.class"/>
+
    <import file="${gwt.root}/common.ant.xml" />

+  <property name="gwt.junit.emmatestcase.includes"  
value="**/*Suite.class,com/google/gwt/dev/jjs/test/*Test.class"/>
+
+  <!--
+    Whether I18NSuite should test e.g. Foo$InnerMsgs_fr.properties (if the
+    value is "dollar") or Foo_Inner_fr.properties (for "bar")
+   -->
+  <property name="gwt.i18n.test.InnerClassChar" value="dollar"/>
+
    <!--
      Default hosted mode test cases
    -->
@@ -27,6 +35,14 @@
    <fileset id="default.web.tests" dir="${javac.junit.out}"
           includes="${gwt.junit.testcase.includes}" />

+  <!--
+    Classpaths added for test cases
+  -->
+  <path id="test.extraclasspath">
+    <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+    <pathelement location="test_i18n_${gwt.i18n.test.InnerClassChar}" />
+  </path>
+
    <!-- Platform shouldn't matter here, just picking one -->
    <property.ensure name="gwt.dev.jar"  
location="${gwt.build.lib}/gwt-dev-linux.jar" />

@@ -91,20 +107,28 @@
      </gwt.checkstyle>
    </target>

-  <target name="remoteweb-test" description="Run a remoteweb test at the  
given host and path" if="gwt.remote.browsers">
+  <target name="remoteweb-test" depends="test.remoteweb">
+    <echo message="DEPRECATED: remoteweb-test has been renamed  
test.remoteweb"/>
+  </target>
+
+  <target name="test.remoteweb" description="Run a remoteweb test at the  
given host and path" if="gwt.remote.browsers">
      <echo message="Performing remote browser testing at  
${gwt.remote.browsers}" />
      <gwt.junit test.args="${test.args} -out www -remoteweb  
${gwt.remote.browsers}" test.out="${junit.out}/remoteweb"  
test.cases="default.web.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>

-  <target name="selenium-test" description="Run a remote test using  
Selenium RC test at the given host and path" if="gwt.selenium.hosts">
+  <target name="selenium-test" depends="test.selenium">
+    <echo message="DEPRECATED: selenium-test has been renamed  
test.selenium"/>
+  </target>
+
+  <target name="test.selenium" description="Run a remote test using  
Selenium RC test at the given host and path" if="gwt.selenium.hosts">
      <echo message="Performing remote browser testing using Selenium RC at  
${gwt.selenium.hosts}" />
      <gwt.junit test.args="${test.args} -out www -selenium  
${gwt.selenium.hosts}" test.out="${junit.out}/selenium"  
test.cases="default.web.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -112,7 +136,7 @@
    <target name="test.hosted.emma" depends="compile, compile.tests"  
description="Run all hosted-mode tests in emma mode.">
      <gwt.junit test.args="${test.args}"  
test.out="${junit.out}/${build.host.platform}-hosted-mode-emma"  
test.cases="default.hosted.emma.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
          <pathelement location="${gwt.tools.redist}/emma/emma.jar" />
        </extraclasspaths>
      </gwt.junit>
@@ -121,7 +145,7 @@
    <target name="test.hosted" depends="compile, compile.tests"  
description="Run only hosted-mode tests for this project.">
      <gwt.junit test.args="${test.args}"  
test.out="${junit.out}/${build.host.platform}-hosted-mode"  
test.cases="default.hosted.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -129,7 +153,7 @@
    <target name="test.noserver" depends="compile, compile.tests"  
description="Run noserver hosted-mode tests for this project.">
      <gwt.junit test.args="${test.args}"  
test.out="${junit.out}/${build.host.platform}-noserver-mode"  
test.cases="default.noserver.tests">
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -137,7 +161,7 @@
    <target name="test.web" depends="compile, compile.tests"  
description="Run only web-mode tests for this project.">
      <gwt.junit test.args="${test.args} -out www -web"  
test.out="${junit.out}/${build.host.platform}-web-mode"  
test.cases="default.web.tests">
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -145,7 +169,7 @@
    <target name="test.web.disableClassMetadata" depends="compile,  
compile.tests" description="Run only web-mode tests for this project.">
      <gwt.junit test.args="${test.args} -XdisableClassMetadata -out www  
-web"  
test.out="${junit.out}/${build.host.platform}-web-mode-disableClassMetadata"  
test.cases="default.web.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -153,7 +177,7 @@
    <target name="test.web.draft" depends="compile, compile.tests"  
description="Run only web-mode tests for this project.">
      <gwt.junit test.args="${test.args} -draftCompile -out www -web"  
test.out="${junit.out}/${build.host.platform}-web-mode-draft"  
test.cases="default.web.tests" >
        <extraclasspaths>
-        <pathelement location="${gwt.build}/out/dev/core/bin-test" />
+        <path refid="test.extraclasspath" />
        </extraclasspaths>
      </gwt.junit>
    </target>
@@ -168,9 +192,9 @@
      <limit failonerror="true" hours="3">
      <parallel threadsPerProcessor="${gwt.threadsPerProcessor}">
        <!-- selenium-test is a no-op unless gwt.selenium.hosts is defined  
-->
-      <antcall target="selenium-test"/>
+      <antcall target="test.selenium"/>
        <!-- remoteweb-test is a no-op unless gwt.remote.browsers is defined  
-->
-      <antcall target="remoteweb-test"/>
+      <antcall target="test.remoteweb"/>
        <antcall target="test.hosted"/>
        <antcall target="test.hosted.emma"/>
        <antcall target="test.noserver"/>

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/TestAnnotatedMessages_Nested_bb_CC.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/TestAnnotatedMessages_Nested_bb_CC.properties
        
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+nestedDollar = nested dollar b_C

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ExtendsInnerInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ExtendsInnerInner.properties
   
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendsInnerInner = Extends Inner Inner
\ No newline at end of file

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner.properties
    
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+hasInner = Has Inner

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner_IsInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_HasInner_IsInner.properties
    
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+isInner=2

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInner.properties
       
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+innerInner = 4.321

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInnerMessages.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_InnerInnerMessages.properties
       
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+innerClassMessages = I am a {0}
\ No newline at end of file

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner.properties
     
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendsAnotherInner =  innerInner,outer
\ No newline at end of file

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner_ExtendProtectedInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_InnerClass_ProtectedInnerInnerClass_ExtendsAnotherInner_ExtendProtectedInner.properties
        
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendProtectedInner = Extend Protected Inner
\ No newline at end of file

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ProtectedInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_ProtectedInner.properties
      
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+protectedInner = true
\ No newline at end of file

Added:  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_SimpleInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_bar/com/google/gwt/i18n/client/resolutiontest/Inners_SimpleInner.properties
         
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+simpleInner = Simple Inner
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/TestAnnotatedMessages$Nested_bb_CC.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/TestAnnotatedMessages$Nested_bb_CC.properties
     
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+nestedDollar = nested dollar b_C

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ExtendsInnerInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ExtendsInnerInner.properties
        
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendsInnerInner = Extends Inner Inner
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner$IsInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner$IsInner.properties
         
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+isInner=2

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$HasInner.properties
         
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+hasInner = Has Inner

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInner.properties
    
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+innerInner = 4.321

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInnerMessages.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$InnerInnerMessages.properties
    
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+innerClassMessages = I am a {0}
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner$ExtendProtectedInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner$ExtendProtectedInner.properties
     
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendProtectedInner = Extend Protected Inner
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$InnerClass$ProtectedInnerInnerClass$ExtendsAnotherInner.properties
  
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+extendsAnotherInner =  innerInner,outer
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ProtectedInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$ProtectedInner.properties
   
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+protectedInner = true
\ No newline at end of file

Added:  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$SimpleInner.properties
==============================================================================
--- (empty file)
+++  
trunk/user/test_i18n_dollar/com/google/gwt/i18n/client/resolutiontest/Inners$SimpleInner.properties
      
Wed Jun 10 14:39:00 2009
@@ -0,0 +1 @@
+simpleInner = Simple Inner
\ No newline at end of file

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to