| /******************************************************************************* |
| * Copyright (c) 2004, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.core.tests.session; |
| |
| import junit.framework.*; |
| import org.eclipse.core.tests.session.SetupManager.SetupException; |
| |
| /** |
| * Runs perfomance test cases multiple times (if they don't fail), |
| * enabling assertions for the first run. |
| */ |
| public class PerformanceSessionTestSuite extends SessionTestSuite { |
| |
| /** |
| * This custom test result allows multiple test runs to show up as a |
| * single run. |
| */ |
| private static class ConsolidatedTestResult extends TestResult { |
| private boolean failed; |
| private int runs = 0; |
| private boolean started = false; |
| private TestResult target; |
| private int timesToRun; |
| |
| public ConsolidatedTestResult(TestResult target, int timesToRun) { |
| this.target = target; |
| this.timesToRun = timesToRun; |
| } |
| |
| public void addError(Test test, Throwable t) { |
| failed = true; |
| target.addError(test, t); |
| } |
| |
| public void addFailure(Test test, AssertionFailedError t) { |
| failed = true; |
| target.addFailure(test, t); |
| } |
| |
| public void endTest(Test test) { |
| runs++; |
| if (!failed && runs < timesToRun) |
| return; |
| target.endTest(test); |
| } |
| |
| public boolean shouldStop() { |
| if (failed) |
| return true; |
| return target.shouldStop(); |
| } |
| |
| public void startTest(Test test) { |
| // should not try to start again ater failing once |
| if (failed) |
| throw new IllegalStateException(); |
| if (started) |
| return; |
| started = true; |
| target.startTest(test); |
| } |
| } |
| |
| public static final String PROP_PERFORMANCE = "perf_ctrl"; |
| |
| private int timesToRun; |
| |
| public PerformanceSessionTestSuite(String pluginId, int timesToRun) { |
| super(pluginId); |
| this.timesToRun = timesToRun; |
| } |
| |
| public PerformanceSessionTestSuite(String pluginId, int timesToRun, Class theClass) { |
| super(pluginId, theClass); |
| this.timesToRun = timesToRun; |
| } |
| |
| public PerformanceSessionTestSuite(String pluginId, int timesToRun, Class theClass, String name) { |
| super(pluginId, theClass, name); |
| this.timesToRun = timesToRun; |
| } |
| |
| public PerformanceSessionTestSuite(String pluginId, int timesToRun, String name) { |
| super(pluginId, name); |
| this.timesToRun = timesToRun; |
| } |
| |
| protected void runSessionTest(TestDescriptor descriptor, TestResult result) { |
| try { |
| fillTestDescriptor(descriptor); |
| } catch (SetupException e) { |
| Throwable cause = e.getCause() == null ? e : e.getCause(); |
| result.addError(descriptor.getTest(), cause); |
| return; |
| } |
| descriptor.getSetup().setSystemProperty("eclipse.perf.dbloc", System.getProperty("eclipse.perf.dbloc")); |
| descriptor.getSetup().setSystemProperty("eclipse.perf.config", System.getProperty("eclipse.perf.config")); |
| // run test cases n-1 times |
| ConsolidatedTestResult consolidated = new ConsolidatedTestResult(result, timesToRun); |
| for (int i = 0; !consolidated.shouldStop() && i < timesToRun - 1; i++) |
| descriptor.run(consolidated); |
| if (consolidated.shouldStop()) |
| return; |
| // for the n-th run, enable assertions |
| descriptor.getSetup().setSystemProperty("eclipse.perf.assertAgainst", System.getProperty("eclipse.perf.assertAgainst")); |
| descriptor.run(consolidated); |
| } |
| } |