Program: 62938
Project: 62938
Buggy source:
public static boolean compare(Node actual,Node expected,String indentation,StringBuilder expectedOutput,StringBuilder actualOutput){
  if (expected.getNodeType() == Node.TEXT_NODE) {
    expectedOutput.append(indentation + expected.getNodeValue() + "String_Node_Str");
  }
  if (expected.getNodeType() != Node.TEXT_NODE) {
    expectedOutput.append(indentation + "String_Node_Str" + expected.getNodeName()+ "String_Node_Str");
  }
  if (actual.getNodeType() == Node.TEXT_NODE) {
    actualOutput.append(indentation + actual.getNodeValue() + "String_Node_Str");
  }
  if (actual.getNodeType() != Node.TEXT_NODE) {
    actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
  }
  Node debugNode=actual.cloneNode(false);
  if (expected.getNodeType() == Node.ELEMENT_NODE) {
    if (actual.getNodeType() != Node.ELEMENT_NODE) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append("String_Node_Str" + actual.getNodeName() + "String_Node_Str");
      return false;
    }
    if (!actual.getNodeName().equals(expected.getNodeName())) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append("String_Node_Str" + expected.getNodeName() + "String_Node_Str"+ actual.getNodeName()+ "String_Node_Str");
      return false;
    }
    NamedNodeMap actualAttributeList=actual.getAttributes();
    NamedNodeMap expectedAttributeList=expected.getAttributes();
    boolean dhtmltooltipIgnore=false;
    for (int i=0; i < expectedAttributeList.getLength(); i++) {
      Node expectedAttribute=expectedAttributeList.item(i);
      expectedOutput.append(expectedAttribute.getNodeName() + "String_Node_Str" + expectedAttribute.getNodeValue()+ "String_Node_Str");
    }
    expectedOutput.append("String_Node_Str");
    for (int i=0; i < actualAttributeList.getLength(); i++) {
      Node actualAttribute=actualAttributeList.item(i);
      actualOutput.append(actualAttribute.getNodeName() + "String_Node_Str" + actualAttribute.getNodeValue()+ "String_Node_Str");
    }
    actualOutput.append("String_Node_Str");
    for (int i=0; i < expectedAttributeList.getLength(); i++) {
      Node expectedAttribute=expectedAttributeList.item(i);
      Node actualAttribute=null;
      try {
        actualAttribute=actualAttributeList.removeNamedItem(expectedAttribute.getNodeName());
        if (actualAttribute.getNodeName().equals("String_Node_Str") && actualAttribute.getNodeValue().equals("String_Node_Str")) {
          dhtmltooltipIgnore=true;
        }
      }
 catch (      DOMException e) {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str" + expectedAttribute.getNodeName() + "String_Node_Str");
        return false;
      }
      if (expectedAttribute.getNodeValue().trim().equals("String_Node_Str")) {
      }
 else       if (!actualAttribute.getNodeValue().equals(expectedAttribute.getNodeValue())) {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str" + expectedAttribute.getNodeName() + "String_Node_Str"+ actualAttribute.getNodeValue()+ "String_Node_Str"+ expectedAttribute.getNodeValue()+ "String_Node_Str");
        return false;
      }
    }
    if (actualAttributeList.getLength() > 0) {
      if (dhtmltooltipIgnore && actualAttributeList.getLength() == 1 && actualAttributeList.item(0).getNodeName().equals("String_Node_Str")) {
      }
 else {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str");
        for (int i=0; i < actualAttributeList.getLength(); i++) {
          Node actualAttribute=actualAttributeList.item(i);
          actualOutput.append("String_Node_Str" + actualAttribute.getNodeName() + "String_Node_Str"+ actualAttribute.getNodeValue()+ "String_Node_Str");
        }
        return false;
      }
    }
  }
 else   if (expected.getNodeType() == Node.TEXT_NODE) {
    if (actual.getNodeType() != Node.TEXT_NODE) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
      return false;
    }
 else     if (expected.getNodeValue().trim().equals("String_Node_Str")) {
    }
 else     if (!actual.getNodeValue().trim().equals(expected.getNodeValue().trim())) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str" + expected.getNodeValue()+ "String_Node_Str"+ actual.getNodeValue()+ "String_Node_Str");
      return false;
    }
  }
  if (expected.hasChildNodes() || expected.hasChildNodes()) {
    NodeList actualChildNodes=actual.getChildNodes();
    NodeList expectedChildNodes=expected.getChildNodes();
    if (actualChildNodes.getLength() != expectedChildNodes.getLength()) {
      actualOutput.append(indentation + "String_Node_Str");
      actualOutput.append(indentation + "String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str");
      for (int i=0; i < actualChildNodes.getLength(); i++) {
        actualOutput.append(indentation + indentation + actualChildNodes.item(i).getNodeName()+ "String_Node_Str");
        NamedNodeMap actualAttributeList=actualChildNodes.item(i).getAttributes();
        for (int j=0; j < actualAttributeList.getLength(); j++) {
          actualOutput.append(actualAttributeList.item(j).getNodeName() + "String_Node_Str" + actualAttributeList.item(j).getNodeValue()+ "String_Node_Str");
        }
        actualOutput.append("String_Node_Str");
      }
      actualOutput.append("String_Node_Str");
      actualOutput.append(indentation + "String_Node_Str" + printHtmlFromNode(expected));
      actualOutput.append(indentation + "String_Node_Str");
      for (int i=0; i < expectedChildNodes.getLength(); i++) {
        actualOutput.append(indentation + indentation + expectedChildNodes.item(i).getNodeName()+ "String_Node_Str");
        NamedNodeMap expectedAttributeList=expectedChildNodes.item(i).getAttributes();
        for (int j=0; j < expectedAttributeList.getLength(); j++) {
          actualOutput.append(expectedAttributeList.item(j).getNodeName() + "String_Node_Str" + expectedAttributeList.item(j).getNodeValue()+ "String_Node_Str");
        }
        actualOutput.append("String_Node_Str");
      }
      actualOutput.append("String_Node_Str");
      return false;
    }
 else {
      for (int i=0; i < actualChildNodes.getLength(); i++) {
        if (!compare(actualChildNodes.item(i),expectedChildNodes.item(i),indentation + "String_Node_Str",expectedOutput,actualOutput)) {
          return false;
        }
      }
    }
  }
  if (expected.getNodeType() != Node.TEXT_NODE) {
    expectedOutput.append(indentation + "String_Node_Str" + expected.getNodeName()+ "String_Node_Str");
  }
  if (actual.getNodeType() != Node.TEXT_NODE) {
    actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
  }
  return true;
}

Fixed version (ground truth):
public static boolean compare(Node actual,Node expected,String indentation,StringBuilder actualOutput,StringBuilder expectedOutput){
  if (expected.getNodeType() == Node.TEXT_NODE) {
    expectedOutput.append(indentation + expected.getNodeValue() + "String_Node_Str");
  }
  if (expected.getNodeType() != Node.TEXT_NODE) {
    expectedOutput.append(indentation + "String_Node_Str" + expected.getNodeName()+ "String_Node_Str");
  }
  if (actual.getNodeType() == Node.TEXT_NODE) {
    actualOutput.append(indentation + actual.getNodeValue() + "String_Node_Str");
  }
  if (actual.getNodeType() != Node.TEXT_NODE) {
    actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
  }
  Node debugNode=actual.cloneNode(false);
  if (expected.getNodeType() == Node.ELEMENT_NODE) {
    if (actual.getNodeType() != Node.ELEMENT_NODE) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append("String_Node_Str" + actual.getNodeName() + "String_Node_Str");
      return false;
    }
    if (!actual.getNodeName().equals(expected.getNodeName())) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append("String_Node_Str" + expected.getNodeName() + "String_Node_Str"+ actual.getNodeName()+ "String_Node_Str");
      return false;
    }
    NamedNodeMap actualAttributeList=actual.getAttributes();
    NamedNodeMap expectedAttributeList=expected.getAttributes();
    boolean dhtmltooltipIgnore=false;
    for (int i=0; i < expectedAttributeList.getLength(); i++) {
      Node expectedAttribute=expectedAttributeList.item(i);
      expectedOutput.append(expectedAttribute.getNodeName() + "String_Node_Str" + expectedAttribute.getNodeValue()+ "String_Node_Str");
    }
    expectedOutput.append("String_Node_Str");
    for (int i=0; i < actualAttributeList.getLength(); i++) {
      Node actualAttribute=actualAttributeList.item(i);
      actualOutput.append(actualAttribute.getNodeName() + "String_Node_Str" + actualAttribute.getNodeValue()+ "String_Node_Str");
    }
    actualOutput.append("String_Node_Str");
    for (int i=0; i < expectedAttributeList.getLength(); i++) {
      Node expectedAttribute=expectedAttributeList.item(i);
      Node actualAttribute=null;
      try {
        actualAttribute=actualAttributeList.removeNamedItem(expectedAttribute.getNodeName());
        if (actualAttribute.getNodeName().equals("String_Node_Str") && actualAttribute.getNodeValue().equals("String_Node_Str")) {
          dhtmltooltipIgnore=true;
        }
      }
 catch (      DOMException e) {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str" + expectedAttribute.getNodeName() + "String_Node_Str");
        return false;
      }
      if (expectedAttribute.getNodeValue().trim().equals("String_Node_Str")) {
      }
 else       if (!actualAttribute.getNodeValue().equals(expectedAttribute.getNodeValue())) {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str" + expectedAttribute.getNodeName() + "String_Node_Str"+ actualAttribute.getNodeValue()+ "String_Node_Str"+ expectedAttribute.getNodeValue()+ "String_Node_Str");
        return false;
      }
    }
    if (actualAttributeList.getLength() > 0) {
      if (dhtmltooltipIgnore && actualAttributeList.getLength() == 1 && actualAttributeList.item(0).getNodeName().equals("String_Node_Str")) {
      }
 else {
        actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
        actualOutput.append("String_Node_Str");
        for (int i=0; i < actualAttributeList.getLength(); i++) {
          Node actualAttribute=actualAttributeList.item(i);
          actualOutput.append("String_Node_Str" + actualAttribute.getNodeName() + "String_Node_Str"+ actualAttribute.getNodeValue()+ "String_Node_Str");
        }
        return false;
      }
    }
  }
 else   if (expected.getNodeType() == Node.TEXT_NODE) {
    if (actual.getNodeType() != Node.TEXT_NODE) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
      return false;
    }
 else     if (expected.getNodeValue().trim().equals("String_Node_Str")) {
    }
 else     if (!actual.getNodeValue().trim().equals(expected.getNodeValue().trim())) {
      actualOutput.append("String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str" + expected.getNodeValue()+ "String_Node_Str"+ actual.getNodeValue()+ "String_Node_Str");
      return false;
    }
  }
  if (expected.hasChildNodes() || expected.hasChildNodes()) {
    NodeList actualChildNodes=actual.getChildNodes();
    NodeList expectedChildNodes=expected.getChildNodes();
    if (actualChildNodes.getLength() != expectedChildNodes.getLength()) {
      actualOutput.append(indentation + "String_Node_Str");
      actualOutput.append(indentation + "String_Node_Str" + printHtmlFromNode(debugNode));
      actualOutput.append(indentation + "String_Node_Str");
      for (int i=0; i < actualChildNodes.getLength(); i++) {
        actualOutput.append(indentation + indentation + actualChildNodes.item(i).getNodeName()+ "String_Node_Str");
        NamedNodeMap actualAttributeList=actualChildNodes.item(i).getAttributes();
        for (int j=0; j < actualAttributeList.getLength(); j++) {
          actualOutput.append(actualAttributeList.item(j).getNodeName() + "String_Node_Str" + actualAttributeList.item(j).getNodeValue()+ "String_Node_Str");
        }
        actualOutput.append("String_Node_Str");
      }
      actualOutput.append("String_Node_Str");
      actualOutput.append(indentation + "String_Node_Str" + printHtmlFromNode(expected));
      actualOutput.append(indentation + "String_Node_Str");
      for (int i=0; i < expectedChildNodes.getLength(); i++) {
        actualOutput.append(indentation + indentation + expectedChildNodes.item(i).getNodeName()+ "String_Node_Str");
        NamedNodeMap expectedAttributeList=expectedChildNodes.item(i).getAttributes();
        for (int j=0; j < expectedAttributeList.getLength(); j++) {
          actualOutput.append(expectedAttributeList.item(j).getNodeName() + "String_Node_Str" + expectedAttributeList.item(j).getNodeValue()+ "String_Node_Str");
        }
        actualOutput.append("String_Node_Str");
      }
      actualOutput.append("String_Node_Str");
      return false;
    }
 else {
      for (int i=0; i < actualChildNodes.getLength(); i++) {
        if (!compare(actualChildNodes.item(i),expectedChildNodes.item(i),indentation + "String_Node_Str",expectedOutput,actualOutput)) {
          return false;
        }
      }
    }
  }
  if (expected.getNodeType() != Node.TEXT_NODE) {
    expectedOutput.append(indentation + "String_Node_Str" + expected.getNodeName()+ "String_Node_Str");
  }
  if (actual.getNodeType() != Node.TEXT_NODE) {
    actualOutput.append(indentation + "String_Node_Str" + actual.getNodeName()+ "String_Node_Str");
  }
  return true;
}