Package org.junitext.internal.runners

Source Code of org.junitext.internal.runners.CategoryTextListener

/*******************************************************************************
* Copyright (C) 2006-2007 Jochen Hiller and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License - v 1.0
* which accompanies this distribution, and is available at
* http://junitext.sourceforge.net/licenses/junitext-license.html
*
* Contributors:
*     Jochen Hiller - initial API and implementation
******************************************************************************/
package org.junitext.internal.runners;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.junit.internal.runners.TextListener;
import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junitext.Category;
import org.junitext.manipulation.CategoryResolver;

/**
* An text listener supporting Category based reporting. 
*/
public class CategoryTextListener extends TextListener {

  // TODO irrg, ugly !
  private Map<Category, Map<String, Collection<Description>>> results = new HashMap<Category, Map<String, Collection<Description>>>();

  private PrintStream fWriter;

  public CategoryTextListener(PrintStream writer) {
    this.fWriter = writer;
  }

  @Override
  public void testStarted(Description description) {
    super.testStarted(description);
    Category c = CategoryResolver.getCategory(description);
    if (c != null) {
      forceInitialize(c);
      results.get(c).get("Success").add(description);
    }
  }
 
  @Override
  public void testFailure(Failure failure) {
    super.testFailure(failure);
    Category c = CategoryResolver.getCategory(failure.getDescription());
    if (c != null) {
      forceInitialize(c);
      results.get(c).get("Failure").add(failure.getDescription());
      results.get(c).get("Success").remove(failure.getDescription());
    }
  }

  @Override
  public void testIgnored(Description description) {
    super.testIgnored(description);
    Category c = CategoryResolver.getCategory(description);
    if (c != null) {
      forceInitialize(c);
      results.get(c).get("Ignore").add(description);
      results.get(c).get("Success").remove(description);
    }
  }

  @Override
  public void testRunFinished(Result result) {
    super.testRunFinished(result);
    for (Category each : results.keySet()) {
      fWriter.println("Category: " + each.value());
      for (Description eachDesc : results.get(each).get("Success")) {
        fWriter.println("  Success " + eachDesc.getDisplayName());
      }
      for (Description eachDesc : results.get(each).get("Ignore")) {
        fWriter.println("  Ignored " + eachDesc.getDisplayName());
      }
      for (Description eachDesc : results.get(each).get("Failure")) {
        fWriter.println("  Failure " + eachDesc.getDisplayName());
      }
    }
  }

  // internal methods

  private void forceInitialize(Category c) {
    if (results.get(c) == null) {
      results.put(c, new HashMap<String, Collection<Description>>());
      results.get(c).put("Ignore", new ArrayList<Description>());
      results.get(c).put("Failure", new ArrayList<Description>());
      results.get(c).put("Success", new ArrayList<Description>());
    }
  }
}
TOP

Related Classes of org.junitext.internal.runners.CategoryTextListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.