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.Description; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.Result; 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.notification.Failure; 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.junit.runner.notification.RunListener; 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.util.HashSet; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport java.util.Set; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** A JUnit RunListener that emulates GTest output to the extent that it can. 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic class GtestListener extends RunListener { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private Set<Description> mFailedTests; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private final GtestLogger mLogger; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private long mRunStartTimeMillis; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private long mTestStartTimeMillis; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private int mTestsPassed; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private boolean mCurrentTestPassed; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public GtestListener(GtestLogger logger) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger = logger; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** Called before any tests run. 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testRunStarted(Description d) throws Exception { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testRunStarted(d.testCount()); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mRunStartTimeMillis = System.currentTimeMillis(); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mTestsPassed = 0; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mFailedTests = new HashSet<Description>(); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mCurrentTestPassed = true; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** Called after all tests run. 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testRunFinished(Result r) throws Exception { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci long elapsedTimeMillis = System.currentTimeMillis() - mRunStartTimeMillis; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testRunFinished(mTestsPassed, mFailedTests, elapsedTimeMillis); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** Called when a test is about to start. 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testStarted(Description d) throws Exception { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mCurrentTestPassed = true; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testStarted(d); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mTestStartTimeMillis = System.currentTimeMillis(); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** Called when a test has just finished. 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testFinished(Description d) throws Exception { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci long testElapsedTimeMillis = System.currentTimeMillis() - mTestStartTimeMillis; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testFinished(d, mCurrentTestPassed, testElapsedTimeMillis); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mCurrentTestPassed) { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++mTestsPassed; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mFailedTests.add(d); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** Called when a test fails. 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public void testFailure(Failure f) throws Exception { 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mCurrentTestPassed = false; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mLogger.testFailed(f); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81