Add script for running UI tests from the command line

Usage:
$ cd tools/idea
$ ant guiTests

Test results are written to build/TEST-*

Change-Id: I5e395e4348eb70ef65ae819277555ee95642bdfb
(cherry picked from commit 7c48b9da9b078f4b7e1282cf906632af9909b7db)
diff --git a/.gitignore b/.gitignore
index 6aba63e..8ccf95b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@
 .jps-build-data
 /bin/build-log.xml
 /bin/build.log
+/androidStudio
+/build/TEST*
diff --git a/build.xml b/build.xml
index 3df0948..5a9fc19 100644
--- a/build.xml
+++ b/build.xml
@@ -33,10 +33,9 @@
     <attribute name="test.patterns" default="" />
     <sequential>
       <java failonerror="true" jar="${project.home}/lib/ant/lib/ant-launcher.jar" fork="true">
-        <jvmarg line="-Xmx1424m -XX:MaxPermSize=352m"/>
+        <jvmarg line="-Xmx2048m -XX:MaxPermSize=512m"/>
         <jvmarg value="-Dout=${out.dir}" />
         <jvmarg value="-DbuildNumber=${buildId}" />
-        <jvmarg line="-Xmx612m -XX:MaxPermSize=152m"/>
         <sysproperty key="java.awt.headless" value="true"/>
         <arg line="&quot;-Dgant.script=@{script}&quot;"/>
         <arg line="&quot;-Dteamcity.build.tempDir=${tmp.dir}&quot;"/>
@@ -56,6 +55,10 @@
     <call_gant script="${project.home}/build/scripts/tests.gant" test.patterns="org.jetbrains.android.*;com.android.tools.idea.*;com.google.gct.*"/>
   </target>
 
+  <target name="guiTests" depends="init">
+    <call_gant script="${project.home}/build/scripts/gui_tests.gant"/>
+  </target>
+
   <!-- The build task creates an updater.jar in ${out.dir}. This task bundles log4j & the updater into a single jar -->
   <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${project.home}/build/lib/jarjar-1.0.jar"/>
   <target name="fullupdater" depends="build">
diff --git a/build/scripts/gui_tests.gant b/build/scripts/gui_tests.gant
new file mode 100644
index 0000000..a171387
--- /dev/null
+++ b/build/scripts/gui_tests.gant
@@ -0,0 +1,90 @@
+// Based on tests.gant but with the includeTargets of common_tests inlined
+// below (and with some changes to invoke our GUI test suite instead
+import static org.jetbrains.jps.idea.IdeaProjectLoader.guessHome
+
+includeTargets << new File("${guessHome(this)}/build/scripts/utils.gant")
+
+requireProperty("out", "$home/out")
+
+target(check: "Ensure the environment is configured") {
+  tempDir = p("teamcity.build.tempDir")
+}
+
+target(compile: "Compile project") {
+  ant.delete(failonerror: false) {
+    fileset(dir: "$home/reports")
+    fileset(dir: "$home/bin", includes: "*.hprof")
+  }
+
+  loadProject()
+  projectBuilder.targetFolder = out
+  if (!isDefined("skip_build")) {
+    projectBuilder.cleanOutput()
+    projectBuilder.buildAll()
+  }
+}
+
+private pass(String prop) {
+  if (isDefined(prop)) {
+    ant.jvmarg(value: "-D$prop=${p(prop)}")
+  }
+}
+
+target('run_ui_tests': 'Run java tests') {
+  depends([check, compile])
+
+  ant.junit(fork: "yes", showoutput: "true", logfailedtests:false, printsummary: "true") {
+    pass("idea.test.group")
+    pass("idea.test.patterns")
+    pass("idea.fast.only")
+    pass("teamcity.build.tempDir")
+    pass("teamcity.tests.recentlyFailedTests.file")
+
+    System.getProperties().entrySet().each {
+      if (it.key.startsWith("pass.")) {
+        def trimmed = it.key.substring("pass.".length());
+        jvmarg(value: "-D${trimmed}=${it.value}");
+      };
+    }
+
+    commonJvmArgs().each { jvmarg(value: it) }
+
+    if (isDefined("jvm_args")) {
+      jvm_args.each { jvmarg(value: it) }
+    }
+
+    classpath {
+      projectBuilder.moduleRuntimeClasspath(findModule("community-main"), true).each {
+        pathelement(location: it)
+      }
+      pathelement(location: "${jdkHome}/lib/tools.jar")
+    }
+
+    formatter(type: "plain")
+    formatter(type: "xml")
+
+    testcases.each {
+      test (name: it)
+    }
+  }
+}
+
+target('default' : "Run all UI tests") {
+  depends([compile, run_ui_tests])
+  depends([run_ui_tests])
+}
+
+// To run just your own tests, you can for example write
+//setProperty("testcases", ["com.android.tools.idea.tests.gui.layout.LayoutPreviewTest","com.android.tools.idea.tests.gui.layout.LayoutEditorTest"])
+setProperty("testcases", ["com.android.tools.idea.tests.gui.GuiTestSuite"])
+
+def isMac = System.getProperty("os.name").toLowerCase().startsWith("mac")
+def args = [
+        "-Xmx2048m",
+        "-XX:MaxPermSize=1024m",
+        "-XX:ReservedCodeCacheSize=96m",
+        "-XX:+UseCodeCacheFlushing"
+]
+if (isMac) args << "-d32";
+
+setProperty("jvm_args", args)