1a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannpackage org.testng.reporters; 224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmannimport java.lang.reflect.Method; 424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmannimport java.util.List; 5a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannimport org.testng.ITestContext; 6a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannimport org.testng.ITestNGMethod; 7a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannimport org.testng.ITestResult; 8a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannimport org.testng.TestListenerAdapter; 924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmannimport org.testng.internal.Utils; 1024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 1124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann/** 1232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Reporter printing out detailed messages about what TestNG 1332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * is going to run and what is the status of what has been just run. 1432169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * 1532169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * To see messages from this reporter, either run Ant in verbose mode ('ant -v') 1632169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * or set verbose level to 5 or higher 1724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann * 1824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann * @author Lukas Jungmann 1932169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @since 6.4 2024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann */ 21a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmannpublic class VerboseReporter extends TestListenerAdapter { 2224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 2332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 2432169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Default prefix for messages printed out by this reporter 2532169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * 2632169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 27a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann public static final String LISTENER_PREFIX = "[VerboseTestNG] "; 28c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private String suiteName; 29a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann private final String prefix; 3024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 31c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private enum Status { 32c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 33c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann SUCCESS(ITestResult.SUCCESS), FAILURE(ITestResult.FAILURE), SKIP(ITestResult.SKIP), 34c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann SUCCESS_PERCENTAGE_FAILURE(ITestResult.SUCCESS_PERCENTAGE_FAILURE), STARTED(ITestResult.STARTED); 35c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private int status; 36c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 37c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private Status(int i) { 38c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann status = i; 39c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 40c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 41c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 4232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 4332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Default constructor 4432169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 45a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann public VerboseReporter() { 46a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann this(LISTENER_PREFIX); 4724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 48a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann 4932169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 5032169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Create VerboseReporter with custom prefix 5132169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * 5232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @param prefix prefix for messages printed out by this reporter 5332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 54a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann public VerboseReporter(String prefix) { 55c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann this.prefix = prefix; 56a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann } 57a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann 5824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 5924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void beforeConfiguration(ITestResult tr) { 6024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.beforeConfiguration(tr); 61c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.STARTED, tr, true); 6224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 6324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 6424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 6524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onConfigurationFailure(ITestResult tr) { 6624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onConfigurationFailure(tr); 67c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.FAILURE, tr, true); 6824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 6924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 7024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 7124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onConfigurationSkip(ITestResult tr) { 7224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onConfigurationSkip(tr); 73c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.SKIP, tr, true); 7424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 7524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 7624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 7724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onConfigurationSuccess(ITestResult tr) { 7824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onConfigurationSuccess(tr); 79c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.SUCCESS, tr, true); 80c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 81c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 82c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann @Override 83c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann public void onTestStart(ITestResult tr) { 84c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.STARTED, tr, false); 8524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 8624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 8724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 8824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onTestFailure(ITestResult tr) { 8924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onTestFailure(tr); 90c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.FAILURE, tr, false); 9124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 9224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 9324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 9424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onTestFailedButWithinSuccessPercentage(ITestResult tr) { 9524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onTestFailedButWithinSuccessPercentage(tr); 96c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.SUCCESS_PERCENTAGE_FAILURE, tr, false); 9724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 9824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 9924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 10024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onTestSkipped(ITestResult tr) { 10124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onTestSkipped(tr); 102c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.SKIP, tr, false); 10324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 10424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 10524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 10624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onTestSuccess(ITestResult tr) { 10724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann super.onTestSuccess(tr); 108c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann logTestResult(Status.SUCCESS, tr, false); 10924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 11024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 11124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 11224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onStart(ITestContext ctx) { 113c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann suiteName = ctx.getName();//ctx.getSuite().getXmlSuite().getFileName(); 114c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann log("RUNNING: Suite: \"" + suiteName + "\" containing \"" + ctx.getAllTestMethods().length + "\" Tests (config: " + ctx.getSuite().getXmlSuite().getFileName() + ")"); 11524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 11624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 11724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann @Override 11824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann public void onFinish(ITestContext context) { 11924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann logResults(); 120c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann suiteName = null; 12124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 12224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 12324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann private ITestNGMethod[] resultsToMethods(List<ITestResult> results) { 12424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann ITestNGMethod[] result = new ITestNGMethod[results.size()]; 12524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann int i = 0; 12624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann for (ITestResult tr : results) { 12724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann result[i++] = tr.getMethod(); 12824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 12924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann return result; 13024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 13124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 13232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 13332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Print out test summary 13432169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 13524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann private void logResults() { 13624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann // 13724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann // Log test summary 13824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann // 13924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann ITestNGMethod[] ft = resultsToMethods(getFailedTests()); 140c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann StringBuilder sb = new StringBuilder("\n===============================================\n"); 141c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" ").append(suiteName).append("\n"); 142c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" Tests run: ").append(Utils.calculateInvokedMethodCount(getAllTestMethods())); 143c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(", Failures: ").append(Utils.calculateInvokedMethodCount(ft)); 144c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(", Skips: ").append(Utils.calculateInvokedMethodCount(resultsToMethods(getSkippedTests()))); 14524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann int confFailures = getConfigurationFailures().size(); 14624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann int confSkips = getConfigurationSkips().size(); 147c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (confFailures > 0 || confSkips > 0) { 148c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("\n").append(" Configuration Failures: ").append(confFailures); 149c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(", Skips: ").append(confSkips); 15024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 151c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("\n==============================================="); 152c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann log(sb.toString()); 15324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 15424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 15532169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 15632169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Log meaningful message for passed in arguments. 15732169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * Message itself is of form: 158e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann * $status: "$suiteName" - $methodDeclaration ($actualArguments) finished in $x ms ($run of $totalRuns) 15932169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * 16032169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @param st status of passed in itr 16132169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @param itr test result to be described 16232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @param isConfMethod is itr describing configuration method 16332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 164c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private void logTestResult(Status st, ITestResult itr, boolean isConfMethod) { 165c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann StringBuilder sb = new StringBuilder(); 166b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann StringBuilder succRate = null; 167c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann String stackTrace = ""; 168c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann switch (st) { 169c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann case STARTED: 170c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("INVOKING"); 171c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann break; 172c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann case SKIP: 173c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("SKIPPED"); 174c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann stackTrace = itr.getThrowable() != null 175c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann ? Utils.stackTrace(itr.getThrowable(), false)[0] : ""; 176c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann break; 177c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann case FAILURE: 178c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("FAILED"); 179c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann stackTrace = itr.getThrowable() != null 180c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann ? Utils.stackTrace(itr.getThrowable(), false)[0] : ""; 181c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann break; 182c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann case SUCCESS: 183c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("PASSED"); 184c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann break; 185c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann case SUCCESS_PERCENTAGE_FAILURE: 186c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("PASSED with failures"); 187c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann break; 188c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann default: 189c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann //not happen 190c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann throw new RuntimeException("Unsupported test status:" + itr.getStatus()); 191c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 192c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (isConfMethod) { 193c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" CONFIGURATION: "); 194c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } else { 195c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(": "); 196c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 197c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann ITestNGMethod tm = itr.getMethod(); 198c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann int identLevel = sb.length(); 199c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(getMethodDeclaration(tm)); 200c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann Object[] params = itr.getParameters(); 201c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann Class[] paramTypes = tm.getMethod().getParameterTypes(); 20224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann if (null != params && params.length > 0) { 20324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann // The error might be a data provider parameter mismatch, so make 20424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann // a special case here 20524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann if (params.length != paramTypes.length) { 206c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("Wrong number of arguments were passed by the Data Provider: found "); 207c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(params.length); 208c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" but expected "); 209c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(paramTypes.length); 21024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else { 211c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("(value(s): "); 21224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann for (int i = 0; i < params.length; i++) { 21324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann if (i > 0) { 214c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(", "); 21524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 216c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(Utils.toString(params[i], paramTypes[i])); 21724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 218c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(")"); 219c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 22024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 22124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 222c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (Status.STARTED != st) { 223c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" finished in "); 224c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(itr.getEndMillis() - itr.getStartMillis()); 225c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" ms"); 226c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (!Utils.isStringEmpty(tm.getDescription())) { 227c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("\n"); 228c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann for (int i = 0; i < identLevel; i++) { 229c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(" "); 230c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 231c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append(tm.getDescription()); 232c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 233e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann if (tm.getInvocationCount() > 1) { 234e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann sb.append(" ("); 235e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann sb.append(tm.getCurrentInvocationCount()); 236e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann sb.append(" of "); 237e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann sb.append(tm.getInvocationCount()); 238e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann sb.append(")"); 239e0d2dfbe16cc13a1139df6e19c16a4e211513fa9Lukas Jungmann } 240c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (!Utils.isStringEmpty(stackTrace)) { 241c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann sb.append("\n").append(stackTrace.substring(0, stackTrace.lastIndexOf(System.getProperty("line.separator")))); 24224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 243b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann } else { 244b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann if (!isConfMethod && tm.getInvocationCount() > 1) { 245b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann sb.append(" success: "); 246b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann sb.append(tm.getSuccessPercentage()); 247b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann sb.append("%"); 248b05395c5744539818ac569fa7b438f209dbfdaebLukas Jungmann } 24924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 250c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann log(sb.toString()); 251c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann } 252c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann 25354ab70124a3db497736dd1c6297e9eebea9b4313Aled Sage protected void log(String message) { 254c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann //prefix all output lines 255c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann System.out.println(message.replaceAll("(?m)^", prefix)); 25624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 25724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann 25832169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann /** 25932169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * 26032169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @param method method to be described 26132169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * @return FQN of a class + method declaration for a method passed in 26232169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann * ie. test.triangle.CheckCount.testCheckCount(java.lang.String) 26332169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann */ 264c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann private String getMethodDeclaration(ITestNGMethod method) { 26532169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann //see Utils.detailedMethodName 26632169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann //perhaps should rather adopt the original method instead 26724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann Method m = method.getMethod(); 268c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann StringBuilder buf = new StringBuilder(); 26924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("\""); 270c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann if (suiteName != null) { 271c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann buf.append(suiteName); 27224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else { 27324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("UNKNOWN"); 27424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 27524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("\""); 27624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(" - "); 27724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann if (method.isBeforeSuiteConfiguration()) { 27824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@BeforeSuite "); 27924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else if (method.isBeforeTestConfiguration()) { 28024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@BeforeTest "); 28124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else if (method.isBeforeClassConfiguration()) { 28224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@BeforeClass "); 28324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else if (method.isBeforeGroupsConfiguration()) { 28424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@BeforeGroups "); 28524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } else if (method.isBeforeMethodConfiguration()) { 28624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@BeforeMethod "); 287c7bdf7d8ae1501bbca7ccaf882365b0ca53347a9Lukas Jungmann } else if (method.isAfterMethodConfiguration()) { 28824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@AfterMethod "); 289c7bdf7d8ae1501bbca7ccaf882365b0ca53347a9Lukas Jungmann } else if (method.isAfterGroupsConfiguration()) { 29024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@AfterGroups "); 291c7bdf7d8ae1501bbca7ccaf882365b0ca53347a9Lukas Jungmann } else if (method.isAfterClassConfiguration()) { 29224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@AfterClass "); 293c7bdf7d8ae1501bbca7ccaf882365b0ca53347a9Lukas Jungmann } else if (method.isAfterTestConfiguration()) { 29424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@AfterTest "); 295c7bdf7d8ae1501bbca7ccaf882365b0ca53347a9Lukas Jungmann } else if (method.isAfterSuiteConfiguration()) { 29624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("@AfterSuite "); 29724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 29824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(m.getDeclaringClass().getName()); 29924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("."); 30024312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(m.getName()); 30124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append("("); 30224312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann int i = 0; 30324312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann for (Class<?> p : m.getParameterTypes()) { 30424312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann if (i++ > 0) { 30524312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(", "); 30624312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 30724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(p.getName()); 30824312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 30924312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann buf.append(")"); 310c659e13962ad03a3472a7b3bad10f0a7fda6386dLukas Jungmann return buf.toString(); 31124312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann } 312a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann 313a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann @Override 314a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann public String toString() { 31532169c3847739ff9e68b7e4a7ff41d3a3114663aLukas Jungmann return "VerboseReporter{" + "suiteName=" + suiteName + '}'; 316a7726191c419ea3086e36cf69207117c5a616e63Lukas Jungmann } 31724312cd57c31ecc959bd9990a71c45885410b4d4Lukas Jungmann} 318