1.1 --- a/testng/src/org/netbeans/modules/contrib/testng/output/TestNGOutputReader.java Wed Dec 21 12:03:19 2011 +0100
1.2 +++ b/testng/src/org/netbeans/modules/contrib/testng/output/TestNGOutputReader.java Thu Dec 22 01:37:54 2011 +0100
1.3 @@ -180,22 +180,24 @@
1.4 private int confSkip = 0;
1.5 }
1.6 private SuiteStats suiteStat;
1.7 + private List<String> txt = new ArrayList<String>();
1.8
1.9 /**
1.10 */
1.11 synchronized void verboseMessageLogged(String msg) {
1.12 + String in = getMessage(msg);
1.13 //suite starting
1.14 - if (getMessage(msg).startsWith("RUNNING: ")) {
1.15 - Matcher m = Pattern.compile(RegexpUtils.RUNNING_SUITE_REGEX).matcher(msg);
1.16 + if (in.startsWith("RUNNING: ")) {
1.17 + Matcher m = Pattern.compile(RegexpUtils.RUNNING_SUITE_REGEX).matcher(in);
1.18 if (m.matches()) {
1.19 suiteStarted(m.group(1), Integer.valueOf(m.group(2)), m.group(3));
1.20 } else {
1.21 - assert false : "Cannot match: '" + msg + "'.";
1.22 + assert false : "Cannot match: '" + in + "'.";
1.23 }
1.24 return;
1.25 }
1.26 //suite finishing
1.27 - if (getMessage(msg).equals("===============================================")) {
1.28 + if (in.equals("===============================================")) {
1.29 suiteSummary = !suiteSummary;
1.30 if (suiteSummary) {
1.31 suiteStat = new SuiteStats();
1.32 @@ -206,7 +208,7 @@
1.33 return;
1.34 } else if (suiteSummary) {
1.35 if (suiteStat.name != null) {
1.36 - Matcher m = Pattern.compile(RegexpUtils.STATS_REGEX).matcher(msg);
1.37 + Matcher m = Pattern.compile(RegexpUtils.STATS_REGEX).matcher(in);
1.38 if (suiteStat.testRun < 0) {
1.39 //Tests run/fail/skip
1.40 if (m.matches()) {
1.41 @@ -214,7 +216,7 @@
1.42 suiteStat.testFail = Integer.valueOf(m.group(2));
1.43 suiteStat.testSkip = Integer.valueOf(m.group(4));
1.44 } else {
1.45 - assert false : "Cannot match: '" + msg + "'.";
1.46 + assert false : "Cannot match: '" + in + "'.";
1.47 }
1.48 } else {
1.49 //Configuration fail/skip
1.50 @@ -222,65 +224,86 @@
1.51 suiteStat.confFail = Integer.valueOf(m.group(1));
1.52 suiteStat.confSkip = Integer.valueOf(m.group(2));
1.53 } else {
1.54 - assert false : "Cannot match: '" + msg + "'.";
1.55 + assert false : "Cannot match: '" + in + "'.";
1.56 }
1.57 }
1.58 } else {
1.59 - suiteStat.name = getMessage(msg).trim();
1.60 + suiteStat.name = in.trim();
1.61 }
1.62 return;
1.63 }
1.64 //test
1.65 - if (getMessage(msg).startsWith("INVOKING: ")) {
1.66 - Matcher m = Pattern.compile(RegexpUtils.TEST_REGEX).matcher(msg);
1.67 + if (in.startsWith("INVOKING: ")) {
1.68 + Matcher m = Pattern.compile(RegexpUtils.TEST_REGEX).matcher(in);
1.69 if (m.matches()) {
1.70 testStarted(m.group(1), m.group(2), m.group(4), m.group(6));
1.71 } else {
1.72 - assert false : "Cannot match: '" + msg + "'.";
1.73 + assert false : "Cannot match: '" + in + "'.";
1.74 + }
1.75 + if (txt.size() > 0) {
1.76 + addStackTrace(txt);
1.77 + txt.clear();
1.78 + }
1.79 + last = null;
1.80 + return;
1.81 + }
1.82 +
1.83 + Matcher m = Pattern.compile(RegexpUtils.TEST_REGEX).matcher(in);
1.84 + if (in.startsWith("PASSED: ")) {
1.85 + if (m.matches()) {
1.86 + testFinished("PASSED", m.group(1), m.group(2), m.group(4), m.group(6), m.group(8));
1.87 + } else {
1.88 + assert false : "Cannot match: '" + in + "'.";
1.89 }
1.90 return;
1.91 }
1.92
1.93 - Matcher m = Pattern.compile(RegexpUtils.TEST_REGEX).matcher(msg);
1.94 - if (getMessage(msg).startsWith("PASSED: ")) {
1.95 + if (in.startsWith("PASSED with failures: ")) {
1.96 + }
1.97 +
1.98 + if (in.startsWith("SKIPPED: ")) {
1.99 if (m.matches()) {
1.100 - testFinished("PASSED", m.group(1), m.group(2), m.group(4), m.group(6), m.group(8));
1.101 + testFinished("SKIPPED", m.group(1), m.group(2), m.group(4), m.group(6), m.group(8));
1.102 } else {
1.103 - assert false : "Cannot match: '" + msg + "'.";
1.104 + assert false : "Cannot match: '" + in + "'.";
1.105 }
1.106 return;
1.107 }
1.108
1.109 - if (getMessage(msg).startsWith("PASSED with failures: ")) {
1.110 - }
1.111 -
1.112 - if (getMessage(msg).startsWith("SKIPPED: ")) {
1.113 - if (m.matches()) {
1.114 - testFinished("SKIPPED", m.group(1), m.group(2), m.group(4), m.group(6), m.group(8));
1.115 - } else {
1.116 - assert false : "Cannot match: '" + msg + "'.";
1.117 - }
1.118 - return;
1.119 - }
1.120 -
1.121 - if (getMessage(msg).startsWith("FAILED: ")) {
1.122 + if (in.startsWith("FAILED: ")) {
1.123 if (m.matches()) {
1.124 testFinished("FAILED", m.group(1), m.group(2), m.group(4), m.group(6), m.group(8));
1.125 } else {
1.126 - assert false : "Cannot match: '" + msg + "'.";
1.127 + assert false : "Cannot match: '" + in + "'.";
1.128 }
1.129 return;
1.130 }
1.131
1.132 //configuration methods
1.133 -// Matcher matcher = RegexpUtils.JAVA_EXECUTABLE.matcher(msg);
1.134 -// if (matcher.find()) {
1.135 -// String executable = matcher.group(1);
1.136 -// ClassPath platformSrcs = findPlatformSources(executable);
1.137 -// if (platformSrcs != null) {
1.138 -// this.platformSources = platformSrcs;
1.139 -// }
1.140 -// }
1.141 + if (in.contains(" CONFIGURATION: ")) {
1.142 + if (txt.size() > 0) {
1.143 + addStackTrace(txt);
1.144 + txt.clear();
1.145 + }
1.146 + return;
1.147 + }
1.148 +
1.149 + Matcher m1 = Pattern.compile(RegexpUtils.RUNNING_SUITE_REGEX).matcher(in);
1.150 + if ((m.matches() || m1.matches()) && last != null) {
1.151 + //update last testcase with the stacktrace
1.152 + if (txt.size() > 0) {
1.153 + addStackTrace(txt);
1.154 + txt.clear();
1.155 + }
1.156 + } else {
1.157 + if (txt.isEmpty() && in.startsWith(" ")) {
1.158 + //we received test description
1.159 + addDescription(in.trim());
1.160 + } else {
1.161 + //we have a stacktrace
1.162 + txt.add(in);
1.163 + }
1.164 + }
1.165 }
1.166
1.167 synchronized void messageLogged(final AntEvent event) {
1.168 @@ -635,6 +658,8 @@
1.169 }
1.170 }
1.171
1.172 + private TestNGTestcase last = null;
1.173 +
1.174 private void testFinished(String st, String suiteName, String testCase, String parameters, String values, String duration) {
1.175 testSession.setCurrentSuite(suiteName);
1.176 TestNGTestcase tc = ((TestNGTestSuite) ((TestNGTestSession) testSession).getCurrentSuite()).getTestCase(testCase, values);
1.177 @@ -661,10 +686,21 @@
1.178 Report r = reports.get(suiteName);
1.179 r.update(testSession.getReport(dur));
1.180 manager.displayReport(testSession, r, false);
1.181 + last = tc;
1.182 }
1.183
1.184 private String getMessage(String msg) {
1.185 int prefixLength = RegexpUtils.TEST_LISTENER_PREFIX.length();
1.186 return msg.substring(prefixLength);
1.187 }
1.188 +
1.189 + private void addDescription(String in) {
1.190 + last.setDescription(in);
1.191 + }
1.192 +
1.193 + private void addStackTrace(List<String> txt) {
1.194 + Trouble t = new Trouble(false);
1.195 + t.setStackTrace(txt.toArray(new String[txt.size()]));
1.196 + last.setTrouble(t);
1.197 + }
1.198 }
2.1 --- a/testng/src/org/netbeans/modules/contrib/testng/output/TestNGTestcase.java Wed Dec 21 12:03:19 2011 +0100
2.2 +++ b/testng/src/org/netbeans/modules/contrib/testng/output/TestNGTestcase.java Thu Dec 22 01:37:54 2011 +0100
2.3 @@ -56,6 +56,7 @@
2.4 private boolean confMethod = false;
2.5 private String parameters;
2.6 private List<String> values = new ArrayList<String>();
2.7 + private String description;
2.8
2.9 //TODO: there should be subnode for each value instead
2.10 public TestNGTestcase(String name, String params, String values, TestSession session) {
2.11 @@ -92,4 +93,12 @@
2.12 public void setConfigMethod(boolean isConfigMethod) {
2.13 confMethod = isConfigMethod;
2.14 }
2.15 +
2.16 + public void setDescription(String description) {
2.17 + this.description = description;
2.18 + }
2.19 +
2.20 + public String getDescription() {
2.21 + return description;
2.22 + }
2.23 }