TimesPanel.java revision 927f2ca0d54cd68df21b8a75c00917bbbff349df
171b49146fae442f11d76af035b279536e5c1d549Cédric Beustpackage org.testng.reporters.jq; 271b49146fae442f11d76af035b279536e5c1d549Cédric Beust 371b49146fae442f11d76af035b279536e5c1d549Cédric Beustimport org.testng.ISuite; 4d03615c358dcaec441011112095750476a4c6b29Cédric Beustimport org.testng.ITestNGMethod; 5d03615c358dcaec441011112095750476a4c6b29Cédric Beustimport org.testng.ITestResult; 69af501e464ae01b211983b8a4c9d058b051152d8Cédric Beustimport org.testng.collections.Maps; 771b49146fae442f11d76af035b279536e5c1d549Cédric Beustimport org.testng.reporters.XMLStringBuffer; 871b49146fae442f11d76af035b279536e5c1d549Cédric Beust 9d03615c358dcaec441011112095750476a4c6b29Cédric Beustimport java.util.List; 109af501e464ae01b211983b8a4c9d058b051152d8Cédric Beustimport java.util.Map; 11d03615c358dcaec441011112095750476a4c6b29Cédric Beust 1203932733f81c510b12e4b391eb249c713301a402Cédric Beustpublic class TimesPanel extends BaseMultiSuitePanel { 139af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust private Map<String, Long> m_totalTime = Maps.newHashMap(); 149af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust 1503932733f81c510b12e4b391eb249c713301a402Cédric Beust public TimesPanel(Model model) { 1671b49146fae442f11d76af035b279536e5c1d549Cédric Beust super(model); 1771b49146fae442f11d76af035b279536e5c1d549Cédric Beust } 1871b49146fae442f11d76af035b279536e5c1d549Cédric Beust 1971b49146fae442f11d76af035b279536e5c1d549Cédric Beust private static String getTag(ISuite suite) { 2071b49146fae442f11d76af035b279536e5c1d549Cédric Beust return "times-" + suiteToTag(suite); 2171b49146fae442f11d76af035b279536e5c1d549Cédric Beust } 2271b49146fae442f11d76af035b279536e5c1d549Cédric Beust 2371b49146fae442f11d76af035b279536e5c1d549Cédric Beust @Override 2471b49146fae442f11d76af035b279536e5c1d549Cédric Beust public String getHeader(ISuite suite) { 2571b49146fae442f11d76af035b279536e5c1d549Cédric Beust return "Times for " + suite.getName(); 2671b49146fae442f11d76af035b279536e5c1d549Cédric Beust } 2771b49146fae442f11d76af035b279536e5c1d549Cédric Beust 2871b49146fae442f11d76af035b279536e5c1d549Cédric Beust @Override 2971b49146fae442f11d76af035b279536e5c1d549Cédric Beust public String getPanelName(ISuite suite) { 3071b49146fae442f11d76af035b279536e5c1d549Cédric Beust return getTag(suite); 3171b49146fae442f11d76af035b279536e5c1d549Cédric Beust } 3271b49146fae442f11d76af035b279536e5c1d549Cédric Beust 33d03615c358dcaec441011112095750476a4c6b29Cédric Beust private String js(ISuite suite) { 3407d493d2ea08ee38c909057f28948e67919626d6Cédric Beust String functionName = "tableData_" + suiteToTag(suite); 35d03615c358dcaec441011112095750476a4c6b29Cédric Beust StringBuilder result = new StringBuilder( 3607d493d2ea08ee38c909057f28948e67919626d6Cédric Beust "suiteTableInitFunctions.push('" + functionName + "');\n" 3707d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "function " + functionName + "() {\n" 3807d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "var data = new google.visualization.DataTable();\n" 398501592fd1b782e77044153a612a51d362e0f594Cédric Beust + "data.addColumn('number', 'Number');\n" 4007d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "data.addColumn('string', 'Method');\n" 4107d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "data.addColumn('string', 'Class');\n" 4207d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "data.addColumn('number', 'Time (ms)');\n"); 43d03615c358dcaec441011112095750476a4c6b29Cédric Beust 44d03615c358dcaec441011112095750476a4c6b29Cédric Beust List<ITestResult> allTestResults = getModel().getAllTestResults(suite); 45d03615c358dcaec441011112095750476a4c6b29Cédric Beust result.append( 46d03615c358dcaec441011112095750476a4c6b29Cédric Beust "data.addRows(" + allTestResults.size() + ");\n"); 47d03615c358dcaec441011112095750476a4c6b29Cédric Beust 48d03615c358dcaec441011112095750476a4c6b29Cédric Beust int index = 0; 49d03615c358dcaec441011112095750476a4c6b29Cédric Beust for (ITestResult tr : allTestResults) { 50d03615c358dcaec441011112095750476a4c6b29Cédric Beust ITestNGMethod m = tr.getMethod(); 51d03615c358dcaec441011112095750476a4c6b29Cédric Beust long time = tr.getEndMillis() - tr.getStartMillis(); 528501592fd1b782e77044153a612a51d362e0f594Cédric Beust result 53d03615c358dcaec441011112095750476a4c6b29Cédric Beust .append("data.setCell(" + index + ", " 548501592fd1b782e77044153a612a51d362e0f594Cédric Beust + "0, " + index + ")\n") 55d03615c358dcaec441011112095750476a4c6b29Cédric Beust .append("data.setCell(" + index + ", " 568501592fd1b782e77044153a612a51d362e0f594Cédric Beust + "1, '" + m.getMethodName() + "')\n") 578501592fd1b782e77044153a612a51d362e0f594Cédric Beust .append("data.setCell(" + index + ", " 588501592fd1b782e77044153a612a51d362e0f594Cédric Beust + "2, '" + m.getTestClass().getName() + "')\n") 598501592fd1b782e77044153a612a51d362e0f594Cédric Beust .append("data.setCell(" + index + ", " 608501592fd1b782e77044153a612a51d362e0f594Cédric Beust + "3, " + time + ");\n"); 619af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust Long total = m_totalTime.get(suite.getName()); 629af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust if (total == null) { 639af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust total = 0L; 649af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } 659af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust m_totalTime.put(suite.getName(), total + time); 66d03615c358dcaec441011112095750476a4c6b29Cédric Beust index++; 67d03615c358dcaec441011112095750476a4c6b29Cédric Beust } 68d03615c358dcaec441011112095750476a4c6b29Cédric Beust 69d03615c358dcaec441011112095750476a4c6b29Cédric Beust result.append( 7007d493d2ea08ee38c909057f28948e67919626d6Cédric Beust "window.suiteTableData['" + suiteToTag(suite) + "']" + 7107d493d2ea08ee38c909057f28948e67919626d6Cédric Beust "= { tableData: data, tableDiv: 'times-div-" + suiteToTag(suite) + "'}\n" 7207d493d2ea08ee38c909057f28948e67919626d6Cédric Beust + "return data;\n" + 7307d493d2ea08ee38c909057f28948e67919626d6Cédric Beust "}\n"); 74d03615c358dcaec441011112095750476a4c6b29Cédric Beust 75d03615c358dcaec441011112095750476a4c6b29Cédric Beust return result.toString(); 76d03615c358dcaec441011112095750476a4c6b29Cédric Beust } 77d03615c358dcaec441011112095750476a4c6b29Cédric Beust 7871b49146fae442f11d76af035b279536e5c1d549Cédric Beust @Override 7971b49146fae442f11d76af035b279536e5c1d549Cédric Beust public String getContent(ISuite suite, XMLStringBuffer main) { 80d03615c358dcaec441011112095750476a4c6b29Cédric Beust XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent()); 819af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust xsb.push(D, C, "times-div"); 82d03615c358dcaec441011112095750476a4c6b29Cédric Beust xsb.push("script", "type", "text/javascript"); 83d03615c358dcaec441011112095750476a4c6b29Cédric Beust xsb.addString(js(suite)); 84d03615c358dcaec441011112095750476a4c6b29Cédric Beust xsb.pop("script"); 85927f2ca0d54cd68df21b8a75c00917bbbff349dfCédric Beust Long time = m_totalTime.get(suite.getName()); 86927f2ca0d54cd68df21b8a75c00917bbbff349dfCédric Beust if (time != null) { 87927f2ca0d54cd68df21b8a75c00917bbbff349dfCédric Beust xsb.addRequired(S, String.format("Total running time: %s", prettyDuration(time)), 88927f2ca0d54cd68df21b8a75c00917bbbff349dfCédric Beust C, "suite-total-time"); 89927f2ca0d54cd68df21b8a75c00917bbbff349dfCédric Beust } 9007d493d2ea08ee38c909057f28948e67919626d6Cédric Beust xsb.push(D, "id", "times-div-" + suiteToTag(suite)); 91d03615c358dcaec441011112095750476a4c6b29Cédric Beust xsb.pop(D); 929af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust xsb.pop(D); 93d03615c358dcaec441011112095750476a4c6b29Cédric Beust return xsb.toXML(); 9471b49146fae442f11d76af035b279536e5c1d549Cédric Beust } 959af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust 969af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust private String prettyDuration(long totalTime) { 979af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust String result; 989af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust if (totalTime < 1000) { 999af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust result = totalTime + " ms"; 1009af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } else if (totalTime < 1000 * 60) { 1019af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust result = (totalTime / 1000) + " seconds"; 1029af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } else if (totalTime < 1000 * 60 * 60) { 1039af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust result = (totalTime / 1000 / 60) + " minutes"; 1049af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } else { 1059af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust result = (totalTime / 1000 / 60 / 60) + " hours"; 1069af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } 1079af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust return result; 1089af501e464ae01b211983b8a4c9d058b051152d8Cédric Beust } 10971b49146fae442f11d76af035b279536e5c1d549Cédric Beust} 110