1234c85874acc0cd3360639949fbd566255ab31edCédric Beustpackage org.testng.reporters.jq;
2234c85874acc0cd3360639949fbd566255ab31edCédric Beust
3234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport org.testng.IInvokedMethod;
4234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport org.testng.ISuite;
5234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport org.testng.ITestNGMethod;
6234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport org.testng.ITestResult;
7234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport org.testng.reporters.XMLStringBuffer;
8234c85874acc0cd3360639949fbd566255ab31edCédric Beust
9234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport java.util.Collections;
10234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport java.util.Comparator;
11234c85874acc0cd3360639949fbd566255ab31edCédric Beustimport java.util.List;
12234c85874acc0cd3360639949fbd566255ab31edCédric Beust
13234c85874acc0cd3360639949fbd566255ab31edCédric Beustpublic class ChronologicalPanel extends BaseMultiSuitePanel {
14234c85874acc0cd3360639949fbd566255ab31edCédric Beust
15234c85874acc0cd3360639949fbd566255ab31edCédric Beust  public ChronologicalPanel(Model model) {
16234c85874acc0cd3360639949fbd566255ab31edCédric Beust    super(model);
17234c85874acc0cd3360639949fbd566255ab31edCédric Beust  }
18234c85874acc0cd3360639949fbd566255ab31edCédric Beust
19aa5fe9ce987968d97b2cc613d21487eb87e45cf4Cédric Beust  @Override
20aa5fe9ce987968d97b2cc613d21487eb87e45cf4Cédric Beust  public String getPrefix() {
21aa5fe9ce987968d97b2cc613d21487eb87e45cf4Cédric Beust    return "chronological-";
22234c85874acc0cd3360639949fbd566255ab31edCédric Beust  }
23234c85874acc0cd3360639949fbd566255ab31edCédric Beust
24234c85874acc0cd3360639949fbd566255ab31edCédric Beust  @Override
25234c85874acc0cd3360639949fbd566255ab31edCédric Beust  public String getHeader(ISuite suite) {
26234c85874acc0cd3360639949fbd566255ab31edCédric Beust    return "Methods in chronological order";
27234c85874acc0cd3360639949fbd566255ab31edCédric Beust  }
28234c85874acc0cd3360639949fbd566255ab31edCédric Beust
29234c85874acc0cd3360639949fbd566255ab31edCédric Beust  @Override
30234c85874acc0cd3360639949fbd566255ab31edCédric Beust  public String getContent(ISuite suite, XMLStringBuffer main) {
310710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust    XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent());
320710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust    List<IInvokedMethod> invokedMethods = suite.getAllInvokedMethods();
33234c85874acc0cd3360639949fbd566255ab31edCédric Beust
340710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust    Collections.sort(invokedMethods, new Comparator<IInvokedMethod>() {
35234c85874acc0cd3360639949fbd566255ab31edCédric Beust      @Override
360710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust      public int compare(IInvokedMethod arg0, IInvokedMethod arg1) {
370710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust        return (int)
380710b19b8aa1faf47bc34bd2557948dccc59fd3dCédric Beust            (arg0.getTestResult().getStartMillis() - arg1.getTestResult().getStartMillis());
39234c85874acc0cd3360639949fbd566255ab31edCédric Beust      }
40234c85874acc0cd3360639949fbd566255ab31edCédric Beust    });
41234c85874acc0cd3360639949fbd566255ab31edCédric Beust
42234c85874acc0cd3360639949fbd566255ab31edCédric Beust    String currentClass = "";
43234c85874acc0cd3360639949fbd566255ab31edCédric Beust    long start = 0;
44234c85874acc0cd3360639949fbd566255ab31edCédric Beust    for (IInvokedMethod im : invokedMethods) {
45234c85874acc0cd3360639949fbd566255ab31edCédric Beust      ITestNGMethod m = im.getTestMethod();
46234c85874acc0cd3360639949fbd566255ab31edCédric Beust//    for (ITestResult tr : results) {
47234c85874acc0cd3360639949fbd566255ab31edCédric Beust//      ITestNGMethod m = tr.getMethod();
48234c85874acc0cd3360639949fbd566255ab31edCédric Beust      String cls = "test-method";
49234c85874acc0cd3360639949fbd566255ab31edCédric Beust      if (m.isBeforeSuiteConfiguration()) {
50234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-suite before";
51234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isAfterSuiteConfiguration()) {
52234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-suite after";
53234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isBeforeTestConfiguration()) {
54234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-test before";
55234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isAfterTestConfiguration()) {
56234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-test after";
57234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isBeforeClassConfiguration()) {
58234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-class before";
59234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isAfterClassConfiguration()) {
60234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-class after";
61234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isBeforeMethodConfiguration()) {
62234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-method before";
63234c85874acc0cd3360639949fbd566255ab31edCédric Beust      } else if (m.isAfterMethodConfiguration()) {
64234c85874acc0cd3360639949fbd566255ab31edCédric Beust        cls = "configuration-method after";
65234c85874acc0cd3360639949fbd566255ab31edCédric Beust      }
66234c85874acc0cd3360639949fbd566255ab31edCédric Beust      ITestResult tr = im.getTestResult();
67234c85874acc0cd3360639949fbd566255ab31edCédric Beust      String methodName = Model.getTestResultName(tr);
68234c85874acc0cd3360639949fbd566255ab31edCédric Beust
69234c85874acc0cd3360639949fbd566255ab31edCédric Beust      if (!m.getTestClass().getName().equals(currentClass)) {
70234c85874acc0cd3360639949fbd566255ab31edCédric Beust        if (!"".equals(currentClass)) {
71234c85874acc0cd3360639949fbd566255ab31edCédric Beust          xsb.pop(D);
72234c85874acc0cd3360639949fbd566255ab31edCédric Beust        }
73234c85874acc0cd3360639949fbd566255ab31edCédric Beust        xsb.push(D, C, "chronological-class");
74234c85874acc0cd3360639949fbd566255ab31edCédric Beust        xsb.addRequired(D, m.getTestClass().getName(), C, "chronological-class-name");
75234c85874acc0cd3360639949fbd566255ab31edCédric Beust        currentClass = m.getTestClass().getName();
76234c85874acc0cd3360639949fbd566255ab31edCédric Beust      }
77234c85874acc0cd3360639949fbd566255ab31edCédric Beust      xsb.push(D, C, cls);
7837119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust      if (tr.getStatus() == ITestResult.FAILURE) {
7937119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust        xsb.push("img", "src", Model.getImage("failed"));
8037119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust        xsb.pop("img");
8137119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust      }
8237119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust
8337119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust      // No need to check for skipped methods since by definition, they were never
8437119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust      // invoked.
8537119809ca0c6f9c63cc5c64e8acfc3097e2856bCédric Beust
86234c85874acc0cd3360639949fbd566255ab31edCédric Beust      xsb.addRequired(S, methodName, C, "method-name");
87234c85874acc0cd3360639949fbd566255ab31edCédric Beust      if (start == 0) {
88234c85874acc0cd3360639949fbd566255ab31edCédric Beust        start = tr.getStartMillis();
89234c85874acc0cd3360639949fbd566255ab31edCédric Beust      }
90234c85874acc0cd3360639949fbd566255ab31edCédric Beust      xsb.addRequired(S, Long.toString(tr.getStartMillis() - start)  + " ms", C, "method-start");
91234c85874acc0cd3360639949fbd566255ab31edCédric Beust      xsb.pop(D);
92234c85874acc0cd3360639949fbd566255ab31edCédric Beust    }
93234c85874acc0cd3360639949fbd566255ab31edCédric Beust    return xsb.toXML();
94234c85874acc0cd3360639949fbd566255ab31edCédric Beust  }
95234c85874acc0cd3360639949fbd566255ab31edCédric Beust
96c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust  @Override
97c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust  public String getNavigatorLink(ISuite suite) {
98c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust    return "Chronological view";
99c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust  }
100c92c41936d66dda27d28929671ccd7d304d02781Cédric Beust
101234c85874acc0cd3360639949fbd566255ab31edCédric Beust}
102