1package org.testng.reporters.jq;
2
3import org.testng.IInvokedMethod;
4import org.testng.ISuite;
5import org.testng.ITestNGMethod;
6import org.testng.ITestResult;
7import org.testng.reporters.XMLStringBuffer;
8
9import java.util.Collections;
10import java.util.Comparator;
11import java.util.List;
12
13public class ChronologicalPanel extends BaseMultiSuitePanel {
14
15  public ChronologicalPanel(Model model) {
16    super(model);
17  }
18
19  @Override
20  public String getPrefix() {
21    return "chronological-";
22  }
23
24  @Override
25  public String getHeader(ISuite suite) {
26    return "Methods in chronological order";
27  }
28
29  @Override
30  public String getContent(ISuite suite, XMLStringBuffer main) {
31    XMLStringBuffer xsb = new XMLStringBuffer(main.getCurrentIndent());
32    List<IInvokedMethod> invokedMethods = suite.getAllInvokedMethods();
33
34    Collections.sort(invokedMethods, new Comparator<IInvokedMethod>() {
35      @Override
36      public int compare(IInvokedMethod arg0, IInvokedMethod arg1) {
37        return (int)
38            (arg0.getTestResult().getStartMillis() - arg1.getTestResult().getStartMillis());
39      }
40    });
41
42    String currentClass = "";
43    long start = 0;
44    for (IInvokedMethod im : invokedMethods) {
45      ITestNGMethod m = im.getTestMethod();
46//    for (ITestResult tr : results) {
47//      ITestNGMethod m = tr.getMethod();
48      String cls = "test-method";
49      if (m.isBeforeSuiteConfiguration()) {
50        cls = "configuration-suite before";
51      } else if (m.isAfterSuiteConfiguration()) {
52        cls = "configuration-suite after";
53      } else if (m.isBeforeTestConfiguration()) {
54        cls = "configuration-test before";
55      } else if (m.isAfterTestConfiguration()) {
56        cls = "configuration-test after";
57      } else if (m.isBeforeClassConfiguration()) {
58        cls = "configuration-class before";
59      } else if (m.isAfterClassConfiguration()) {
60        cls = "configuration-class after";
61      } else if (m.isBeforeMethodConfiguration()) {
62        cls = "configuration-method before";
63      } else if (m.isAfterMethodConfiguration()) {
64        cls = "configuration-method after";
65      }
66      ITestResult tr = im.getTestResult();
67      String methodName = Model.getTestResultName(tr);
68
69      if (!m.getTestClass().getName().equals(currentClass)) {
70        if (!"".equals(currentClass)) {
71          xsb.pop(D);
72        }
73        xsb.push(D, C, "chronological-class");
74        xsb.addRequired(D, m.getTestClass().getName(), C, "chronological-class-name");
75        currentClass = m.getTestClass().getName();
76      }
77      xsb.push(D, C, cls);
78      if (tr.getStatus() == ITestResult.FAILURE) {
79        xsb.push("img", "src", Model.getImage("failed"));
80        xsb.pop("img");
81      }
82
83      // No need to check for skipped methods since by definition, they were never
84      // invoked.
85
86      xsb.addRequired(S, methodName, C, "method-name");
87      if (start == 0) {
88        start = tr.getStartMillis();
89      }
90      xsb.addRequired(S, Long.toString(tr.getStartMillis() - start)  + " ms", C, "method-start");
91      xsb.pop(D);
92    }
93    return xsb.toXML();
94  }
95
96  @Override
97  public String getNavigatorLink(ISuite suite) {
98    return "Chronological view";
99  }
100
101}
102