// 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 args = [
        "-Xmx2048m",
        "-XX:MaxPermSize=1024m",
        "-XX:ReservedCodeCacheSize=96m",
        "-XX:+UseCodeCacheFlushing"
]

setProperty("jvm_args", args)
