Added beforeConfiguration() to IConfigurationListener.
diff --git a/src/main/java/org/testng/internal/IConfigurationListener.java b/src/main/java/org/testng/IConfigurationListener.java
similarity index 78%
rename from src/main/java/org/testng/internal/IConfigurationListener.java
rename to src/main/java/org/testng/IConfigurationListener.java
index a38fe6c..19e0b9b 100755
--- a/src/main/java/org/testng/internal/IConfigurationListener.java
+++ b/src/main/java/org/testng/IConfigurationListener.java
@@ -1,12 +1,15 @@
-package org.testng.internal;

-

-import org.testng.ITestNGListener;

-import org.testng.ITestResult;

+package org.testng;

 

 /**

  * Listener interface for events related to configuration methods.

  */

 public interface IConfigurationListener extends ITestNGListener {

+

+  /**

+   * Invoked before a configuration method is invoked.

+   */

+  void beforeConfiguration(ITestResult tr);

+

   /**

    * Invoked whenever a configuration method succeeded.

    */

diff --git a/src/main/java/org/testng/SuiteRunner.java b/src/main/java/org/testng/SuiteRunner.java
index f7de79d..176fe93 100644
--- a/src/main/java/org/testng/SuiteRunner.java
+++ b/src/main/java/org/testng/SuiteRunner.java
@@ -7,7 +7,6 @@
 import org.testng.internal.AnnotationTypeEnum;
 import org.testng.internal.Attributes;
 import org.testng.internal.IConfiguration;
-import org.testng.internal.IConfigurationListener;
 import org.testng.internal.IInvoker;
 import org.testng.internal.Utils;
 import org.testng.internal.annotations.IAnnotationFinder;
diff --git a/src/main/java/org/testng/TestListenerAdapter.java b/src/main/java/org/testng/TestListenerAdapter.java
index dce2587..973bfa8 100755
--- a/src/main/java/org/testng/TestListenerAdapter.java
+++ b/src/main/java/org/testng/TestListenerAdapter.java
@@ -145,7 +145,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationFailure(ITestResult itr) {
@@ -156,8 +156,12 @@
     return m_skippedConfs;
   }
 
+  @Override
+  public void beforeConfiguration(ITestResult tr) {
+  }
+
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSkip(ITestResult itr) {
@@ -165,7 +169,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSuccess(ITestResult itr) {
diff --git a/src/main/java/org/testng/TestNG.java b/src/main/java/org/testng/TestNG.java
index daf7924..fb82d89 100644
--- a/src/main/java/org/testng/TestNG.java
+++ b/src/main/java/org/testng/TestNG.java
@@ -15,7 +15,6 @@
 import org.testng.internal.Configuration;
 import org.testng.internal.DynamicGraph;
 import org.testng.internal.IConfiguration;
-import org.testng.internal.IConfigurationListener;
 import org.testng.internal.IResultListener;
 import org.testng.internal.OverrideProcessor;
 import org.testng.internal.Utils;
@@ -1799,6 +1798,10 @@
     }
 
     @Override
+    public void beforeConfiguration(ITestResult tr) {
+    }
+
+    @Override
     public void onTestFailure(ITestResult result) {
       setHasRunTests();
       m_mainRunner.setStatus(HAS_FAILURE);
@@ -1840,7 +1843,7 @@
     }
 
     /**
-     * @see org.testng.internal.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
+     * @see org.testng.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
      */
     @Override
     public void onConfigurationFailure(ITestResult itr) {
@@ -1848,7 +1851,7 @@
     }
 
     /**
-     * @see org.testng.internal.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
+     * @see org.testng.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
      */
     @Override
     public void onConfigurationSkip(ITestResult itr) {
@@ -1856,7 +1859,7 @@
     }
 
     /**
-     * @see org.testng.internal.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
+     * @see org.testng.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
      */
     @Override
     public void onConfigurationSuccess(ITestResult itr) {
diff --git a/src/main/java/org/testng/TestRunner.java b/src/main/java/org/testng/TestRunner.java
index b2431f5..d7081b3 100644
--- a/src/main/java/org/testng/TestRunner.java
+++ b/src/main/java/org/testng/TestRunner.java
@@ -13,7 +13,6 @@
 import org.testng.internal.Constants;
 import org.testng.internal.DynamicGraph;
 import org.testng.internal.IConfiguration;
-import org.testng.internal.IConfigurationListener;
 import org.testng.internal.IInvoker;
 import org.testng.internal.ITestResultNotifier;
 import org.testng.internal.InvokedMethod;
@@ -1751,6 +1750,10 @@
 
   private class ConfigurationListener implements IConfigurationListener {
     @Override
+    public void beforeConfiguration(ITestResult tr) {
+    }
+
+    @Override
     public void onConfigurationFailure(ITestResult itr) {
       m_failedConfigurations.addResult(itr, itr.getMethod());
     }
diff --git a/src/main/java/org/testng/internal/Configuration.java b/src/main/java/org/testng/internal/Configuration.java
index 6f882e2..47aaeb9 100644
--- a/src/main/java/org/testng/internal/Configuration.java
+++ b/src/main/java/org/testng/internal/Configuration.java
@@ -1,6 +1,7 @@
 package org.testng.internal;
 
 import org.testng.IConfigurable;
+import org.testng.IConfigurationListener;
 import org.testng.IExecutionListener;
 import org.testng.IHookable;
 import org.testng.ITestObjectFactory;
diff --git a/src/main/java/org/testng/internal/IConfiguration.java b/src/main/java/org/testng/internal/IConfiguration.java
index 8fac109..2791b06 100644
--- a/src/main/java/org/testng/internal/IConfiguration.java
+++ b/src/main/java/org/testng/internal/IConfiguration.java
@@ -1,6 +1,7 @@
 package org.testng.internal;
 
 import org.testng.IConfigurable;
+import org.testng.IConfigurationListener;
 import org.testng.IExecutionListener;
 import org.testng.IHookable;
 import org.testng.ITestObjectFactory;
diff --git a/src/main/java/org/testng/internal/IResultListener.java b/src/main/java/org/testng/internal/IResultListener.java
index ccfd3d1..29ef001 100755
--- a/src/main/java/org/testng/internal/IResultListener.java
+++ b/src/main/java/org/testng/internal/IResultListener.java
@@ -1,5 +1,6 @@
 package org.testng.internal;

 

+import org.testng.IConfigurationListener;

 import org.testng.ITestListener;

 

 

diff --git a/src/main/java/org/testng/internal/ITestResultNotifier.java b/src/main/java/org/testng/internal/ITestResultNotifier.java
index dc72e40..c801a27 100755
--- a/src/main/java/org/testng/internal/ITestResultNotifier.java
+++ b/src/main/java/org/testng/internal/ITestResultNotifier.java
@@ -1,5 +1,6 @@
 package org.testng.internal;
 
+import org.testng.IConfigurationListener;
 import org.testng.ITestListener;
 import org.testng.ITestNGMethod;
 import org.testng.ITestResult;
diff --git a/src/main/java/org/testng/internal/Invoker.java b/src/main/java/org/testng/internal/Invoker.java
index de34fc2..c91b106 100644
--- a/src/main/java/org/testng/internal/Invoker.java
+++ b/src/main/java/org/testng/internal/Invoker.java
@@ -2,6 +2,7 @@
 
 import org.testng.IClass;
 import org.testng.IConfigurable;
+import org.testng.IConfigurationListener;
 import org.testng.IHookable;
 import org.testng.IInvokedMethod;
 import org.testng.IInvokedMethodListener;
@@ -199,12 +200,14 @@
 
             Object[] newInstances= (null != instance) ? new Object[] { instance } : instances;
 
+            runConfigurationListeners(testResult, true /* before */);
+
             invokeConfigurationMethod(newInstances, tm,
               parameters, isClassConfiguration, isSuiteConfiguration, testResult);
 
             // TODO: probably we should trigger the event for each instance???
             testResult.setEndMillis(System.currentTimeMillis());
-            runConfigurationListeners(testResult);
+            runConfigurationListeners(testResult, false /* after */);
           }
           else {
             log(3,
@@ -247,7 +250,7 @@
                                        XmlSuite suite) {
     recordConfigurationInvocationFailed(tm, testResult.getTestClass(), annotation, currentTestMethod, instance, suite);
     testResult.setStatus(ITestResult.SKIP);
-    runConfigurationListeners(testResult);
+    runConfigurationListeners(testResult, false /* after */);
   }
 
   /**
@@ -320,7 +323,7 @@
     Utils.log("", 3, "Failed to invoke configuration method "
         + tm.getRealClass().getName() + "." + tm.getMethodName() + ":" + cause.getMessage());
     handleException(cause, tm, testResult, 1);
-    runConfigurationListeners(testResult);
+    runConfigurationListeners(testResult, false /* after */);
 
     //
     // If in TestNG mode, need to take a look at the annotation to figure out
@@ -1787,18 +1790,24 @@
     return result;
   }
 
-  private void runConfigurationListeners(ITestResult tr) {
-    for(IConfigurationListener icl: m_notifier.getConfigurationListeners()) {
-      switch(tr.getStatus()) {
-        case ITestResult.SKIP:
-          icl.onConfigurationSkip(tr);
-          break;
-        case ITestResult.FAILURE:
-          icl.onConfigurationFailure(tr);
-          break;
-        case ITestResult.SUCCESS:
-          icl.onConfigurationSuccess(tr);
-          break;
+  private void runConfigurationListeners(ITestResult tr, boolean before) {
+    if (before) {
+      for(IConfigurationListener icl: m_notifier.getConfigurationListeners()) {
+        icl.beforeConfiguration(tr);
+      }
+    } else {
+      for(IConfigurationListener icl: m_notifier.getConfigurationListeners()) {
+        switch(tr.getStatus()) {
+          case ITestResult.SKIP:
+            icl.onConfigurationSkip(tr);
+            break;
+          case ITestResult.FAILURE:
+            icl.onConfigurationFailure(tr);
+            break;
+          case ITestResult.SUCCESS:
+            icl.onConfigurationSuccess(tr);
+            break;
+        }
       }
     }
   }
diff --git a/src/main/java/org/testng/remote/strprotocol/RemoteTestListener.java b/src/main/java/org/testng/remote/strprotocol/RemoteTestListener.java
index c16fe85..b33c356 100755
--- a/src/main/java/org/testng/remote/strprotocol/RemoteTestListener.java
+++ b/src/main/java/org/testng/remote/strprotocol/RemoteTestListener.java
@@ -50,6 +50,10 @@
   }
 
   @Override
+  public void beforeConfiguration(ITestResult tr) {
+  }
+
+  @Override
   public void onTestFailedButWithinSuccessPercentage(ITestResult testResult) {
     if (null == m_currentTestContext) {
       m_sender.sendMessage(new TestResultMessage(m_suite.getName(), m_xmlTest.getName(), testResult));
@@ -90,7 +94,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationFailure(ITestResult itr) {
@@ -98,7 +102,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSkip(ITestResult itr) {
@@ -106,7 +110,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSuccess(ITestResult itr) {
diff --git a/src/main/java/org/testng/reporters/JUnitXMLReporter.java b/src/main/java/org/testng/reporters/JUnitXMLReporter.java
index 81dbccc..3ee7539 100755
--- a/src/main/java/org/testng/reporters/JUnitXMLReporter.java
+++ b/src/main/java/org/testng/reporters/JUnitXMLReporter.java
@@ -61,6 +61,10 @@
   public void onTestStart(ITestResult result) {
   }
 
+  @Override
+  public void beforeConfiguration(ITestResult tr) {
+  }
+
   /**
    * Invoked each time a test succeeds.
    */
@@ -116,7 +120,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationFailure(ITestResult itr) {
@@ -124,7 +128,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSkip(ITestResult itr) {
@@ -132,7 +136,7 @@
   }
 
   /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
+   * @see org.testng.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
    */
   @Override
   public void onConfigurationSuccess(ITestResult itr) {
diff --git a/src/main/java/org/testng/reporters/JUnitXMLReporter2.java b/src/main/java/org/testng/reporters/JUnitXMLReporter2.java
deleted file mode 100755
index 88c6d6b..0000000
--- a/src/main/java/org/testng/reporters/JUnitXMLReporter2.java
+++ /dev/null
@@ -1,233 +0,0 @@
-package org.testng.reporters;
-
-
-import org.testng.ITestContext;
-import org.testng.ITestResult;
-import org.testng.collections.Lists;
-import org.testng.internal.IResultListener;
-import org.testng.internal.Utils;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-/**
- * this XML Reporter will produce XML format compatible with the XMLJUnitResultFormatter from ant
- * this enables TestNG output to be processed by tools that already handle this format
- *
- * borrows heavily from ideas in org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter
- *
- * this is the original version which was replaced by JUnitXMLReporter
- * @TODO: clean up
- */
-public class JUnitXMLReporter2 implements IResultListener {
-
-  private String m_outputFileName= null;
-  private File m_outputFile= null;
-  private ITestContext m_testContext= null;
-
-  /**
-   * keep lists of all the results
-   */
-  private int m_numPassed= 0;
-  private int m_numFailed= 0;
-  private int m_numSkipped= 0;
-  private int m_numFailedButIgnored= 0;
-  private List<ITestResult> m_allTests
-      = Collections.synchronizedList(Lists.<ITestResult>newArrayList());
-  private List<ITestResult> m_configIssues
-      = Collections.synchronizedList(Lists.<ITestResult>newArrayList());
-
-  @Override
-  public void onTestStart(ITestResult result) {
-  }
-
-  /**
-   * Invoked each time a test succeeds.
-   */
-  @Override
-  public void onTestSuccess(ITestResult tr) {
-    m_allTests.add(tr);
-    m_numPassed++;
-  }
-
-  @Override
-  public void onTestFailedButWithinSuccessPercentage(ITestResult tr) {
-    m_allTests.add(tr);
-    m_numFailedButIgnored++;
-  }
-
-  /**
-   * Invoked each time a test fails.
-   */
-  @Override
-  public void onTestFailure(ITestResult tr) {
-    m_allTests.add(tr);
-    m_numFailed++;
-  }
-
-  /**
-   * Invoked each time a test is skipped.
-   */
-  @Override
-  public void onTestSkipped(ITestResult tr) {
-    m_allTests.add(tr);
-    m_numSkipped++;
-  }
-
-  /**
-   * Invoked after the test class is instantiated and before
-   * any configuration method is called.
-   *
-   */
-  @Override
-  public void onStart(ITestContext context) {
-    m_outputFileName= context.getOutputDirectory() + File.separator + context.getName() + ".xml";
-    m_outputFile= new File(m_outputFileName);
-    m_testContext= context;
-  }
-
-  /**
-   * Invoked after all the tests have run and all their
-   * Configuration methods have been called.
-   *
-   */
-  @Override
-  public void onFinish(ITestContext context) {
-    generateReport();
-  }
-
-  /**
-   * generate the XML report given what we know from all the test results
-   */
-  protected void generateReport() {
-    try {
-      DocumentBuilderFactory docBuilderFactory= DocumentBuilderFactory.newInstance();
-      docBuilderFactory.setNamespaceAware(true); // so we can transform it later
-      DocumentBuilder docBuilder= docBuilderFactory.newDocumentBuilder();
-      Document d= docBuilder.newDocument();
-      Element rootElement= d.createElement(XMLConstants.TESTSUITE);
-      rootElement.setAttribute(XMLConstants.ATTR_NAME, m_testContext.getName());
-
-      Element propsElement= d.createElement(XMLConstants.PROPERTIES);
-      rootElement.appendChild(propsElement);
-
-      // properties. just TestNG properties or also System properties?
-
-      rootElement.setAttribute(XMLConstants.ATTR_TESTS, "" + m_allTests.size());
-      rootElement.setAttribute(XMLConstants.ATTR_FAILURES, "" + m_numFailed);
-      rootElement.setAttribute(XMLConstants.ATTR_ERRORS, "0"); // FIXME
-
-      long elapsedTimeMillis= m_testContext.getEndDate().getTime()
-        - m_testContext.getStartDate().getTime();
-      rootElement.setAttribute(XMLConstants.ATTR_TIME, "" + (elapsedTimeMillis / 1000.0));
-
-      for(ITestResult tr: m_configIssues) {
-        Element element= createElement(d, tr);
-        rootElement.appendChild(element);
-      }
-      for(ITestResult tr : m_allTests) {
-        Element testCaseElement= createElement(d, tr);
-        rootElement.appendChild(testCaseElement);
-      }
-
-      BufferedWriter fw= new BufferedWriter(new FileWriter(m_outputFile));
-
-      Transformer transformer= TransformerFactory.newInstance().newTransformer();
-      transformer.transform(new DOMSource(rootElement), new StreamResult(fw));
-      fw.flush();
-      fw.close();
-    }
-    catch(IOException ioe) {
-      ioe.printStackTrace();
-      System.err.println("failed to create JUnitXML because of " + ioe);
-    }
-    catch(ParserConfigurationException pce) {
-      pce.printStackTrace();
-      System.err.println("failed to create JUnitXML because of " + pce);
-    }
-    catch(TransformerException te) {
-      te.printStackTrace();
-      System.err.println("Error while writing out JUnitXML because of " + te);
-    }
-  }
-
-  private Element createElement(Document doc, ITestResult tr) {
-    Element resultElement= doc.createElement(XMLConstants.TESTCASE);
-    long elapsedTimeMillis= tr.getEndMillis() - tr.getStartMillis();
-    String name= tr.getMethod().isTest() ? tr.getName() : Utils.detailedMethodName(tr.getMethod(), false);
-    resultElement.setAttribute(XMLConstants.ATTR_NAME, name);
-    resultElement.setAttribute(XMLConstants.ATTR_CLASSNAME,
-                               tr.getTestClass().getRealClass().getName());
-    resultElement.setAttribute(XMLConstants.ATTR_TIME,
-                               "" + ((double) elapsedTimeMillis)/1000);
-    if (ITestResult.FAILURE == tr.getStatus()) {
-      Element nested = createFailureElement(doc, tr);
-      resultElement.appendChild(nested);
-    }
-    else if (ITestResult.SKIP == tr.getStatus()) {
-      Element nested = createSkipElement(doc, tr);
-      resultElement.appendChild(nested);
-    }
-
-    return resultElement;
-  }
-
-  private Element createFailureElement(Document doc, ITestResult tr) {
-    Element nested= doc.createElement(XMLConstants.FAILURE);
-    Throwable t = tr.getThrowable();
-    if (t != null) {
-      nested.setAttribute(XMLConstants.ATTR_TYPE, t.getClass().getName());
-      String message = t.getMessage();
-      if ((message != null) && (message.length() > 0)) {
-        nested.setAttribute(XMLConstants.ATTR_MESSAGE, message);
-      }
-      CDATASection trace= doc.createCDATASection(Utils.stackTrace(t, false)[0]);
-      nested.appendChild(trace);
-    }
-
-    return nested;
-  }
-
-  private Element createSkipElement(Document doc, ITestResult tr) {
-    return doc.createElement("skipped");
-  }
-
-  /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationFailure(org.testng.ITestResult)
-   */
-  @Override
-  public void onConfigurationFailure(ITestResult itr) {
-    m_configIssues.add(itr);
-  }
-
-  /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSkip(org.testng.ITestResult)
-   */
-  @Override
-  public void onConfigurationSkip(ITestResult itr) {
-    m_configIssues.add(itr);
-  }
-
-  /**
-   * @see org.testng.internal.IConfigurationListener#onConfigurationSuccess(org.testng.ITestResult)
-   */
-  @Override
-  public void onConfigurationSuccess(ITestResult itr) {
-  }
-}
diff --git a/src/test/java/test/listeners/ConfigurationListenerTest.java b/src/test/java/test/listeners/ConfigurationListenerTest.java
index 19acca1..6670779 100644
--- a/src/test/java/test/listeners/ConfigurationListenerTest.java
+++ b/src/test/java/test/listeners/ConfigurationListenerTest.java
@@ -1,10 +1,10 @@
 package test.listeners;
 
 import org.testng.Assert;
+import org.testng.IConfigurationListener;
 import org.testng.ITestResult;
 import org.testng.TestNG;
 import org.testng.annotations.Test;
-import org.testng.internal.IConfigurationListener;
 
 import test.SimpleBaseTest;
 
@@ -15,20 +15,25 @@
     private static int m_status = 0;
 
     @Override
-    public void onConfigurationSuccess(ITestResult itr) {
+    public void beforeConfiguration(ITestResult tr) {
       m_status += 1;
     }
 
     @Override
-    public void onConfigurationFailure(ITestResult itr) {
+    public void onConfigurationSuccess(ITestResult itr) {
       m_status += 3;
     }
 
     @Override
-    public void onConfigurationSkip(ITestResult itr) {
+    public void onConfigurationFailure(ITestResult itr) {
       m_status += 5;
     }
-    
+
+    @Override
+    public void onConfigurationSkip(ITestResult itr) {
+      m_status += 7;
+    }
+
   }
 
   private void runTest(Class<?> cls, int expected) {
@@ -43,16 +48,16 @@
 
   @Test
   public void shouldSucceed() {
-    runTest(ConfigurationListenerSucceedSampleTest.class, 1);
+    runTest(ConfigurationListenerSucceedSampleTest.class, 1 + 3);
   }
 
   @Test
   public void shouldFail() {
-    runTest(ConfigurationListenerFailSampleTest.class, 3);
+    runTest(ConfigurationListenerFailSampleTest.class, 1 + 5);
   }
 
   @Test
   public void shouldSkip() {
-    runTest(ConfigurationListenerSkipSampleTest.class, 8); // fail + skip
+    runTest(ConfigurationListenerSkipSampleTest.class, 1 + 5 + 7); // fail + skip
   }
 }
diff --git a/src/test/java/test/listeners/ResultListener.java b/src/test/java/test/listeners/ResultListener.java
index 8f3cfc9..5dc40f8 100644
--- a/src/test/java/test/listeners/ResultListener.java
+++ b/src/test/java/test/listeners/ResultListener.java
@@ -15,6 +15,10 @@
   }
 
   @Override
+  public void beforeConfiguration(ITestResult tr) {
+  }
+
+  @Override
   public void onTestSuccess(ITestResult result) {
     m_end = result.getEndMillis();
   }