Ejemplo n.º 1
0
  private boolean parseResult(InputStream in, JUnitEETest test) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();

    Document document;
    byte[] buffer = readInput(in);

    try {
      document = builder.parse(new ByteArrayInputStream(buffer));
    } catch (SAXException e) {
      log("Invalid xml:\n " + new String(buffer), Project.MSG_ERR);

      throw new BuildException("Unable to parse test result (no valid xml).");
    }

    Element root = document.getDocumentElement();
    if (root.getAttributeNode("unfinished") != null) {
      log(String.valueOf(root.getAttributeNode("unfinished")), Project.MSG_DEBUG);
      return false;
    }
    root.normalize();

    NodeList testcases = root.getElementsByTagName("testsuite");
    Vector<JUnitEEResultFormatter> resultFormatters = createFormatters(test);

    for (int i = 0; i < testcases.getLength(); i++) {
      Node node = testcases.item(i);
      NamedNodeMap attributes = node.getAttributes();
      String testClass = attributes.getNamedItem("name").getNodeValue();
      String testPkg = attributes.getNamedItem("package").getNodeValue();
      int errors = Integer.parseInt(attributes.getNamedItem("errors").getNodeValue());
      int failures = Integer.parseInt(attributes.getNamedItem("failures").getNodeValue());
      String testName;

      if (testPkg != null && testPkg.length() != 0) {
        testName = testPkg + "." + testClass;
      } else {
        testName = testClass;
      }

      for (JUnitEEResultFormatter formatter : resultFormatters) {
        log("Calling formatter " + formatter + " for node " + node, Project.MSG_DEBUG);
        formatter.format(node);
        formatter.flush();
      }

      if (errors != 0) {
        if (test.getErrorproperty() != null) {
          getProject().setNewProperty(test.getErrorproperty(), "true");
        }
        if (test.getHaltonerror() || test.getHaltonfailure()) {

          throw new BuildException("Test " + testName + " failed.");
        }
      }
      if (failures != 0) {
        if (test.getFailureproperty() != null) {
          getProject().setNewProperty(test.getFailureproperty(), "true");
        }
        if (test.getHaltonfailure()) {
          throw new BuildException("Test " + testName + " failed.");
        }
      }
    }

    NodeList errorMessages = root.getElementsByTagName("errorMessage");

    for (int i = 0; i < errorMessages.getLength(); i++) {
      Node message = errorMessages.item(i);
      log(message.getFirstChild().getNodeValue(), Project.MSG_ERR);
    }
    if (errorMessages.getLength() != 0) {
      throw new BuildException("Test execution failed.");
    }
    return true;
  }