/*************************************************************************
 * @author Ali Echihabi (ali_echihabi@ieee.org, ali.echihabi@souss.ca)
 *
 * Plugin for PHP unit Testing.
 * www.phpeclipse.de
 * 
 *************************************************************************/


package net.sourceforge.phpeclipse.phpunit.testpool;

import java.util.HashMap;

 
public class TestPool {

	//private TestSuite currentParentTestSuite;
	private HashMap tests;
	private TestSuite root;
	private TestSuite currentTestSuite;
	
	
	/**
	 * 
	 */
	public TestPool(String rootTitle) {
		
		tests = new HashMap();
		root = null;		
		currentTestSuite = root;
		
	}

	/**
	 * @param test
	 */
	public void addTest(TestCase test) {
		
		tests.put(test.getTestID(), test);
		
		currentTestSuite.addTestCase(test);
		
		
		//if we run all tests. then this is the end of this test suite.
		if( currentTestSuite != root && currentTestSuite.isFinished()) {
			
			currentTestSuite = currentTestSuite.getParent();

		} 				
		
	} 

	/**
	 * @param suite
	 * @param numTestsRunSinceStartOfTestSuite
	 */
	public void addTestSuite(TestSuite suite) {
	
    	
    	if(root == null) {
    		root = suite;
    	} 
    	else {
    	
	    	//add as sibling	
			currentTestSuite.addTestSuite(suite);
			suite.setParent(currentTestSuite);

    	}	
    	
		currentTestSuite = suite;	
	}

	/**
	 * @return
	 */
	public TestSuite getRoot() {
		
		return root;
	}
	
	/**
	 * @param r
	 */
	public void setRoot(TestSuite r) {
		this.root = r;
	}


	
	/**
	 * @param testID
	 * @return
	 */
	public TestCase getTest(String testID) {
				
		return (TestCase) tests.get(testID);
	}

	public String toString() {
		
		String string = "";
		
		TestSuite node = root;
		
		string = root.toString();

		return string;			
	
	}


	public int getNumTestsOverall() {
	
		int total = root.getNumTestCasesExpected();
		System.out.println("total: " + total);
		return total;
				
	}
	
	public int getNumTestsRun() {
		
		return tests.size();
		
			
	}
	
	public int getNumFailures() {
		
		int total = 0;
		
//		Iterator i = tests.keySet().iterator();
//		String key = "";
//		while (i.hasNext()) {
//			
//			
//			key = (String) i.next();
//			TestCase element = (TestCase) tests.get(key);
//			
//			
//			if(element.isFailure())
//				total++;
//			
//		}
			
		return total;
	}
	
	public int getNumErrors() {

		int total = 0;
		
//		Iterator i = tests.keySet().iterator();
//		String key = "";
//		while (i.hasNext()) {
//			
//			
//			key = (String) i.next();
//			TestCase element = (TestCase) tests.get(key);
//						
//			if(element.isError())
//				total++;
//			
//		}
			
		return total;
	
	}
	
	

}