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