Mirroring got broken around the merge from branches/2.1, although I'm not yet sure how. This catches up to "authoritative" content across the board, while I figure out what broke. git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8234 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/build.xml b/bikeshed/build.xml index 4ab7590..089532d 100644 --- a/bikeshed/build.xml +++ b/bikeshed/build.xml
@@ -8,15 +8,42 @@ <property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" /> <property.ensure name="gwt.user.jar" location="${gwt.build.lib}/gwt-user.jar" /> + <property name="test.timeout" value="4" /> + <property name="emma.merged.out" value="${junit.out}/emma-coverage" /> + <property name="gwt.junit.testcase.web.includes" value="${gwt.junit.testcase.includes}" /> + <property name="gwt.junit.testcase.web.excludes" value="" /> + + <property name="gwt.junit.testcase.dev.includes" value="${gwt.junit.testcase.includes}" /> + <property name="gwt.junit.testcase.dev.excludes" value="" /> + + <!-- + Classpaths added for test cases + --> + <path id="test.extraclasspath"> + <pathelement location="${gwt.build}/out/dev/bin-test" /> + <pathelement location="test-super" /> + <pathelement location="${gwt.tools.lib}/cglib/cglib-2.2.jar"/> + <pathelement location="${gwt.tools.lib}/easymock/easymock.jar"/> + <pathelement location="${gwt.tools.lib}/easymock/easymockclassextension.jar"/> + <pathelement location="${gwt.tools.lib}/objectweb/asm-3.1.jar"/> + <pathelement location="${gwt.user.jar}" /> + </path> + + + <target name="checkstyle" description="Static analysis of source"> <gwt.checkstyle> <fileset dir="src" /> + <fileset dir="super" /> </gwt.checkstyle> <gwt.checkstyle.tests> <fileset dir="test"> <include name="com/google/**/*.java" /> <include name="test/**" /> </fileset> + <fileset dir="test-super"> + <include name="com/google/**/*.java" /> + </fileset> </gwt.checkstyle.tests> </target> @@ -42,4 +69,535 @@ </gwt.jar> </target> + <!-- + Compiles the test code for this project + --> + <target name="compile.tests" + unless="compile.tests.complete"> + <mkdir dir="${javac.junit.out}" /> + <gwt.javac srcdir="test" destdir="${javac.junit.out}"> + <classpath> + <pathelement location="${javac.out}" /> + <pathelement location="${gwt.build}/out/dev/bin-test" /> + <pathelement location="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" /> + <pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" /> + <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" /> + <pathelement location="${gwt.tools.lib}/cglib/cglib-2.2.jar"/> + <pathelement location="${gwt.tools.lib}/easymock/easymock.jar"/> + <pathelement location="${gwt.tools.lib}/easymock/easymockclassextension.jar"/> + <pathelement location="${gwt.tools.lib}/objectweb/asm-3.1.jar"/> + <pathelement location="${gwt.dev.jar}" /> + <pathelement location="${gwt.user.jar}" /> + </classpath> + </gwt.javac> + </target> + + <target name="test.remoteweb" depends="test.web.remote"> + <echo message="DEPRECATED: test.remoteweb has been renamed test.web.remote"/> + </target> + + <target name="test.web.remote" + description="Run web test with remote browsers" + if="gwt.hosts.web.remote" + unless="test.web.remote.disable"> + <echo message="Performing web remote testing at ${gwt.hosts.web.remote}" /> + <property name="test.web.remote.args" value="${test.args.web.remote}" /> + <fileset id="test.web.remote.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.web.remote" + test.args="${test.web.remote.args} -out www -prod -standardsMode -runStyle RemoteWeb:${gwt.hosts.web.remote}" + test.out="${junit.out}/web-remote" + test.cases="test.web.remote.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.dev.remote" + depends="compile, compile.tests" + description="Run dev-mode tests with remote browsers" + if="gwt.hosts.dev.remote" + unless="test.dev.remote.disable"> + <echo message="Performing dev-mode remote testing at ${gwt.remote.browsers}" /> + <property name="test.dev.remote.args" value="${test.args.dev.remote}" /> + <fileset id="test.dev.remote.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.dev.remote" + test.args="${test.dev.remote.args} -out www -standardsMode -runStyle RemoteWeb:${gwt.hosts.dev.remote}" + test.out="${junit.out}/dev-remote" test.cases="test.dev.remote.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.emma.remote" + depends="compile, compile.tests" + description="Run emma tests with remote browsers" + if="gwt.hosts.dev.remote" + unless="test.emma.remote.disable"> + <echo message="Performing emma remote testing at ${gwt.hosts.dev.remote}" /> + <property name="test.emma.remote.args" value="${test.args.dev.remote}" /> + <fileset id="test.emma.remote.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.emma.remote" + test.args="${test.emma.remote.args} -out www -standardsMode -runStyle RemoteWeb:${gwt.hosts.dev.remote}" + test.out="${junit.out}/emma-remote" + test.cases="test.emma.remote.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + <pathelement location="${gwt.tools.redist}/emma/emma.jar" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.emma.selenium" + depends="compile, compile.tests" + description="Run emma tests with Selenium-RC servers" + if="gwt.hosts.dev.selenium" + unless="test.emma.selenium.disable"> + <echo message="Performing emma selenium testing at ${gwt.hosts.dev.selenium}" /> + <property name="test.emma.selenium.args" value="${test.args.dev.selenium}" /> + <fileset id="test.emma.selenium.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.emma.selenium" + test.args='${test.emma.selenium.args} -out www -standardsMode -runStyle "Selenium:${gwt.hosts.dev.selenium}"' + test.out="${junit.out}/emma-selenium" + test.cases="test.emma.selenium.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + <pathelement location="${gwt.tools.redist}/emma/emma.jar" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.draft.remote" + depends="compile, compile.tests" + description="Run draft compiled tests with remote browsers" + if="gwt.hosts.web.remote" + unless="test.draft.remote.disable"> + <echo message="Performing draft remote testing at ${gwt.hosts.web.remote}" /> + <property name="test.draft.remote.args" value="${test.args.web.remote}" /> + <fileset id="test.draft.remote.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.draft.remote" + test.args="${test.draft.remote.args} -draftCompile -prod -standardsMode -out www -runStyle RemoteWeb:${gwt.hosts.web.remote}" + test.out="${junit.out}/draft-remote" + test.cases="test.draft.remote.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.nometa.remote" + description="Run -XdisableClassMetadata tests with remote browsers" + if="gwt.hosts.web.remote" + unless="test.nometa.remote.disable"> + <echo message="Performing nometa remote testing at ${gwt.hosts.web.remote}" /> + <property name="test.nometa.remote.args" value="${test.args.web.remote}" /> + <fileset id="test.nometa.remote.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.nometa.remote" + test.args="${test.nometa.remote.args} -XdisableClassMetadata -prod -standardsMode -out www -runStyle RemoteWeb:${gwt.hosts.web.remote}" + test.out="${junit.out}/nometa-remote" + test.cases="test.nometa.remote.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.selenium" depends="test.web.selenium"> + <echo message="DEPRECATED: test.selenium has been renamed test.web.selenium"/> + </target> + + <target name="test.web.selenium" + depends="compile, compile.tests" + description="Run web tests using Selenium RC" + if="gwt.hosts.web.selenium" + unless="test.web.selenium.disable"> + <echo message="Performing web testing using Selenium RC at ${gwt.hosts.web.selenium}" /> + <property name="test.web.selenium.args" value="${test.args.web.selenium}" /> + <fileset id="test.web.selenium.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.web.selenium" + test.args='${test.web.selenium.args} -prod -out www -standardsMode -runStyle "Selenium:${gwt.hosts.web.selenium}"' + test.out="${junit.out}/web-selenium" + test.cases="test.web.selenium.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.dev.selenium" + depends="compile, compile.tests" + description="Run dev-mode tests using Selenium RC servers" + if="gwt.hosts.dev.selenium" + unless="test.dev.selenium.disable"> + <echo message="Performing dev-mode testing using Selenium RC at ${gwt.hosts.dev.selenium}" /> + <property name="test.dev.selenium.args" value="${test.args.dev.selenium}" /> + <fileset id="test.dev.selenium.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.dev.selenium" + test.args='${test.dev.selenium.args} -out www -standardsMode -runStyle "Selenium:${gwt.hosts.dev.selenium}"' + test.out="${junit.out}/dev-selenium" + test.cases="test.dev.selenium.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.nometa.selenium" + description="Run nometa tests using Selenium RC" + if="gwt.hosts.web.selenium" + unless="test.nometa.selenium.disable"> + <echo message="Performing nometa testing using Selenium RC at ${gwt.hosts.web.selenium}" /> + <property name="test.nometa.selenium.args" + value="${test.args.web.selenium}" /> + <fileset id="test.nometa.selenium.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.nometa.selenium" + test.args='${test.nometa.selenium.args} -XdisableClassMetadata -prod -standardsMode -out www -runStyle "Selenium:${gwt.hosts.web.selenium}"' + test.out="${junit.out}/nometa-selenium" + test.cases="test.nometa.selenium.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.draft.selenium" + description="Run draft compiled tests using Selenium RC" + if="gwt.hosts.web.selenium" + unless="test.draft.selenium.disable"> + <echo message="Performing draft testing using Selenium RC at ${gwt.hosts.web.selenium}" /> + <property name="test.draft.selenium.args" + value="${test.args.web.selenium}" /> + <fileset id="test.draft.selenium.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.draft.selenium" + test.args='${test.draft.selenium.args} -draftCompile -prod -out www -standardsMode -runStyle "Selenium:${gwt.hosts.web.selenium}"' + test.out="${junit.out}/draft-selenium" + test.cases="test.draft.selenium.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.emma.htmlunit" + depends="compile, compile.tests" + description="Run emma tests with HtmlUnit" + unless="test.emma.htmlunit.disable"> + <fileset id="test.emma.htmlunit.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.emma.htmlunit" + test.args="${test.args} -standardsMode " + test.out="${junit.out}/emma-htmlunit" + test.cases="test.emma.htmlunit.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + <pathelement location="${gwt.tools.redist}/emma/emma.jar" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.dev.htmlunit" + depends="compile, compile.tests" + description="Run dev-mode tests with HtmlUnit." + unless="test.dev.htmlunit.disable"> + <fileset id="test.dev.htmlunit.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.dev.includes}" + excludes="${gwt.junit.testcase.dev.excludes}" /> + <gwt.junit test.name="test.dev.htmlunit" + test.args="${test.args} -standardsMode " + test.out="${junit.out}/dev-htmlunit" + test.cases="test.dev.htmlunit.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.hosted.emma" depends="test.emma"> + <echo message="DEPRECATED: test.hosted.emma has been renamed test.emma"/> + </target> + + <target name="test.hosted" depends="test.dev"> + <echo message="DEPRECATED: test.hosted has been renamed test.dev"/> + </target> + + <target name="test.noserver" + depends="compile, compile.tests" + description="Run noserver tests for this project." + unless="test.noserver.disable"> + <fileset id="test.noserver.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.noserver.includes}" + excludes="${gwt.junit.testcase.noserver.excludes}" /> + <gwt.junit test.name="test.noserver" + test.args="${test.args} -prod -standardsMode -noserver" + test.out="${junit.out}/noserver" test.cases="test.noserver.tests"> + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.web.htmlunit" + depends="compile, compile.tests" + description="Run web-mode tests with HtmlUnit." + unless="test.web.htmlunit.disable"> + <fileset id="test.web.htmlunit.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.web.htmlunit" + test.args="${test.args} -out www -prod -standardsMode" + test.out="${junit.out}/web-htmlunit" + test.cases="test.web.htmlunit.tests"> + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.nometa.htmlunit" + depends="compile, compile.tests" + description="Run -XdisableClassMetadata tests with HtmlUnit." + unless="test.nometa.htmlunit.disable"> + <fileset id="test.nometa.htmlunit.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.nometa.htmlunit" + test.args="${test.args} -XdisableClassMetadata -out www -prod -standardsMode" + test.out="${junit.out}/nometa-htmlunit" + test.cases="test.nometa.htmlunit.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test.draft.htmlunit" + depends="compile, compile.tests" + description="Run draft compiled HtmlUnit tests (no batching on purpose)" + unless="test.draft.htmlunit.disable"> + <fileset id="test.draft.htmlunit.tests" dir="${javac.junit.out}" + includes="${gwt.junit.testcase.web.includes}" + excludes="${gwt.junit.testcase.web.excludes}" /> + <gwt.junit test.name="test.draft.htmlunit" + test.args="${test.args} -draftCompile -out www -prod -standardsMode" + test.out="${junit.out}/draft-htmlunit" + test.cases="test.draft.htmlunit.tests" > + <extraclasspaths> + <path refid="test.extraclasspath" /> + </extraclasspaths> + </gwt.junit> + </target> + + <target name="test" + depends="compile, compile.tests" + description="Run all tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <property.ensure name="distro.built" location="${gwt.dev.staging.jar}" + message="GWT must be built before performing any tests. This can be fixed by running ant in the ${gwt.root} directory." /> + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <!-- + The remote targets must be run sequentially or BrowserManager will queue + requests, which will cause some tests to timeout while waiting. + --> + <sequential> + <antcall target="test.dev.remote"/> + <antcall target="test.emma.remote"/> + <antcall target="test.web.remote"/> + <antcall target="test.draft.remote"/> + <antcall target="test.nometa.remote"/> + </sequential> + <antcall target="test.dev.selenium"/> + <antcall target="test.emma.selenium"/> + <antcall target="test.web.selenium"/> + <antcall target="test.draft.selenium"/> + <antcall target="test.nometa.selenium"/> + <antcall target="test.noserver"/> + <antcall target="test.dev.htmlunit"/> + <antcall target="test.emma.htmlunit"/> + <antcall target="test.web.htmlunit"/> + <antcall target="test.draft.htmlunit"/> + <antcall target="test.nometa.htmlunit"/> + </parallel> + </limit> + </target> + + <target name="test.htmlunit" + depends="compile, compile.tests" + description="Run all HtmlUnit tests"> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <property.ensure name="distro.built" location="${gwt.dev.staging.jar}" + message="GWT must be built before performing any tests. This can be fixed by running ant in the ${gwt.root} directory." /> + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.dev.htmlunit"/> + <antcall target="test.emma.htmlunit"/> + <antcall target="test.web.htmlunit"/> + <antcall target="test.draft.htmlunit"/> + <antcall target="test.nometa.htmlunit"/> + <antcall target="test.noserver"/> + </parallel> + </limit> + </target> + + <target name="test.dev" + depends="compile, compile.tests" + description="Run dev-mode tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.dev.htmlunit"/> + <!-- no-op unless gwt.hosts.dev.remote is defined --> + <antcall target="test.dev.remote"/> + <!-- no-op unless gwt.hosts.dev.selenium is defined --> + <antcall target="test.dev.selenium"/> + </parallel> + </limit> + </target> + + <target name="test.web" + depends="compile, compile.tests" + description="Run web-mode tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.web.htmlunit"/> + <!-- no-op unless gwt.hosts.web.remote is defined --> + <antcall target="test.web.remote"/> + <!-- no-op unless gwt.hosts.web.selenium is defined --> + <antcall target="test.web.selenium"/> + </parallel> + </limit> + </target> + + <target name="test.emma" + depends="compile, compile.tests" + description="Run emma tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.emma.htmlunit"/> + <!-- no-op unless gwt.hosts.dev.remote is defined --> + <antcall target="test.emma.remote"/> + <!-- no-op unless gwt.hosts.dev.selenium is defined --> + <antcall target="test.emma.selenium"/> + </parallel> + </limit> + </target> + + <target name="test.draft" + depends="compile, compile.tests" + description="Run draft compiled tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.draft.htmlunit"/> + <!-- no-op unless gwt.hosts.web.remote is defined --> + <antcall target="test.draft.remote"/> + <!-- no-op unless gwt.hosts.web.selenium is defined --> + <antcall target="test.draft.selenium"/> + </parallel> + </limit> + </target> + + <target name="test.nometa" + depends="compile, compile.tests" + description="Run -XdisableClassMetadata tests for this project."> + <!-- Prevent compilation for every target. --> + <property name="compile.complete" value="true"/> + <property name="compile.tests.complete" value="true"/> + + <limit failonerror="true" hours="${test.timeout}"> + <parallel threadsPerProcessor="${gwt.threadsPerProcessor}" + threadCount="${gwt.threadCount}"> + <antcall target="test.web.htmlunit"/> + <!-- no-op unless gwt.hosts.web.remote is defined --> + <antcall target="test.nometa.remote"/> + <!-- no-op unless gwt.hosts.web.selenium is defined --> + <antcall target="test.nometa.selenium"/> + </parallel> + </limit> + </target> + + <!-- + Merges coverage data for the entire project + --> + <target name="emma.merge"> + <delete dir="${emma.merged.out}" /> + <mkdir dir="${emma.merged.out}" /> + <emma> + <merge outfile="${emma.merged.out}/merged.emma" > + <fileset dir="${junit.out}" > + <include name="**/*.emma" /> + <exclude name="${emma.merged.out}/merged.emma" /> + </fileset> + </merge> + </emma> + <emma> + <report sourcepath="${project.classpath.src}"> + <fileset file="${javac.emma.out}/metadata.emma" /> + <fileset file="${emma.merged.out}/merged.emma" /> + <txt outfile="${emma.merged.out}/coverage.txt" /> + <html outfile="${emma.merged.out}/coverage.html" /> + <xml outfile="${emma.merged.out}/coverage.xml" /> + </report> + </emma> + </target> + + <target name="clean" + description="Cleans this project's intermediate and output files"> + <delete dir="${project.build}" /> + <delete file="${project.lib}" /> + </target> + + <target name="presubmit" depends="test, checkstyle" + description="runs the gwt api checker, user checkstyle, and user tests"> + <gwt.ant dir=".." target="apicheck-nobuild"/> + </target> + </project>