/* * 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.benchmarks; import com.google.gwt.benchmarks.client.Benchmark; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.junit.JUnitShell; import com.google.gwt.junit.client.GWTTestCase; import junit.framework.TestCase; import junit.framework.TestResult; import java.io.File; import java.util.Date; /** * This class is responsible for hosting BenchMarks test case execution. * * @see JUnitShell */ public class BenchmarkShell { /** * Executes shutdown logic for JUnitShell * * Sadly, there's no simple way to know when all unit tests have finished * executing. So this class is registered as a VM shutdown hook so that work * can be done at the end of testing - for example, writing out the reports. */ private static class Shutdown implements Runnable { public void run() { try { String reportPath = System.getProperty(Benchmark.REPORT_PATH); if (reportPath == null || reportPath.trim().equals("")) { reportPath = System.getProperty("user.dir"); } report.generate(reportPath + File.separator + "report-" + new Date().getTime() + ".xml"); } catch (Exception e) { // It really doesn't matter how we got here. // Regardless of the failure, the VM is shutting down. e.printStackTrace(); } } } /** * The result of benchmark runs. */ private static BenchmarkReport report = new BenchmarkReport(); private static boolean shutdownHookSet = false; /** * Called by {@link com.google.gwt.benchmarks.rebind.BenchmarkGenerator} to * add test meta data to the test report. * * @return The {@link BenchmarkReport} that belongs to the singleton {@link * JUnitShell}, or <code>null</code> if no such singleton exists. */ public static BenchmarkReport getReport() { return report; } /** * @deprecated use {@link #runTest(GWTTestCase, TestResult)} instead */ @Deprecated public static void runTest(String moduleName, TestCase testCase, TestResult testResult) throws UnableToCompleteException { if (!shutdownHookSet) { shutdownHookSet = true; Runtime.getRuntime().addShutdownHook(new Thread(new Shutdown())); } JUnitShell.runTest(moduleName, testCase, testResult); } public static void runTest(GWTTestCase testCase, TestResult testResult) throws UnableToCompleteException { if (!shutdownHookSet) { shutdownHookSet = true; Runtime.getRuntime().addShutdownHook(new Thread(new Shutdown())); } JUnitShell.runTest(testCase, testResult); } private BenchmarkShell() { } }