11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipackage org.chromium.testing.local; 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.Computer; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.Description; 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.Runner; 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.manipulation.Filter; 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.manipulation.Filterable; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.manipulation.NoTestsRemainException; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.notification.RunNotifier; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runners.model.InitializationError; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runners.model.RunnerBuilder; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * A Computer that logs the start and end of test cases googletest-style. 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class GtestComputer extends Computer { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private final GtestLogger mLogger; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public GtestComputer(GtestLogger logger) { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger = logger; 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * A wrapping Runner that logs the start and end of each test case. 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private class GtestSuiteRunner extends Runner implements Filterable { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private final Runner mRunner; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public GtestSuiteRunner(Runner contained) { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mRunner = contained; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public Description getDescription() { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return mRunner.getDescription(); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void run(RunNotifier notifier) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci long startTimeMillis = System.currentTimeMillis(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testCaseStarted(mRunner.getDescription(), 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mRunner.getDescription().testCount()); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mRunner.run(notifier); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testCaseFinished(mRunner.getDescription(), 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mRunner.getDescription().testCount(), 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci System.currentTimeMillis() - startTimeMillis); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void filter(Filter filter) throws NoTestsRemainException { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mRunner instanceof Filterable) { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ((Filterable) mRunner).filter(filter); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns a suite of unit tests with each class runner wrapped by a 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * GtestSuiteRunner. 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public Runner getSuite(final RunnerBuilder builder, Class<?>[] classes) 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throws InitializationError { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return super.getSuite( 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new RunnerBuilder() { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public Runner runnerForClass(Class<?> testClass) throws Throwable { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return new GtestSuiteRunner(builder.runnerForClass(testClass)); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, classes); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 77