Program: 27244
Project: 27244
Buggy source:
@Override public void visit(NodeTraversal t,Node n,Node parent){
  if (parent == null) {
    return;
  }
  if (parent.isScript()) {
    if (NodeUtil.isFunctionDeclaration(n)) {
      String functionName=NodeUtil.getName(n);
      if (isTestFunction(functionName)) {
        exportTestFunctionAsSymbol(functionName,n,parent);
      }
    }
 else     if (isNameDeclaredFunction(n)) {
      Node functionNode=n.getFirstFirstChild();
      String functionName=NodeUtil.getName(functionNode);
      if (isTestFunction(functionName)) {
        exportTestFunctionAsSymbol(functionName,n,parent);
      }
    }
 else     if (n.isClass()) {
      exportClass(parent,n);
    }
  }
 else   if (NodeUtil.isExprAssign(parent) && !n.getLastChild().isAssign()) {
    Node grandparent=parent.getParent();
    if (grandparent != null && grandparent.isScript()) {
      String functionName=n.getFirstChild().getQualifiedName();
      if (isTestFunction(functionName)) {
        if (n.getFirstChild().isName()) {
          exportTestFunctionAsSymbol(functionName,parent,grandparent);
        }
 else {
          exportTestFunctionAsProperty(functionName,parent,n,grandparent);
        }
      }
    }
  }
 else   if (n.isObjectLit() && isCallTargetQName(n.getParent(),"String_Node_Str")) {
    for (    Node c : n.children()) {
      if (c.isStringKey() && !c.isQuotedString()) {
        c.setQuotedString();
        compiler.reportChangeToEnclosingScope(c);
      }
 else       if (c.isMemberFunctionDef()) {
        rewriteMemberDefInObjLit(c,n);
      }
    }
  }
}

Fixed version (ground truth):
@Override public void visit(NodeTraversal t,Node n,Node parent){
  if (parent == null) {
    return;
  }
  if (parent.isScript()) {
    if (NodeUtil.isFunctionDeclaration(n)) {
      String functionName=NodeUtil.getName(n);
      if (isTestFunction(functionName)) {
        exportTestFunctionAsSymbol(functionName,n,parent);
      }
    }
 else     if (isNameDeclaredFunction(n)) {
      Node functionNode=n.getFirstFirstChild();
      String functionName=NodeUtil.getName(functionNode);
      if (isTestFunction(functionName)) {
        exportTestFunctionAsSymbol(functionName,n,parent);
      }
    }
 else     if (isNameDeclaredClass(n)) {
      Node classNode=n.getFirstFirstChild();
      String className=NodeUtil.getName(classNode);
      exportClass(parent,classNode,className,n);
    }
 else     if (n.isClass()) {
      exportClass(parent,n);
    }
  }
 else   if (NodeUtil.isExprAssign(parent) && !n.getLastChild().isAssign()) {
    Node grandparent=parent.getParent();
    if (grandparent != null && grandparent.isScript()) {
      Node firstChild=n.getFirstChild();
      Node lastChild=n.getLastChild();
      String nodeName=firstChild.getQualifiedName();
      if (lastChild.isFunction()) {
        if (isTestFunction(nodeName)) {
          if (n.getFirstChild().isName()) {
            exportTestFunctionAsSymbol(nodeName,parent,grandparent);
          }
 else {
            exportTestFunctionAsProperty(nodeName,parent,n,grandparent);
          }
        }
      }
 else       if (lastChild.isClass()) {
        exportClass(grandparent,lastChild,nodeName,parent);
      }
    }
  }
 else   if (n.isObjectLit() && isCallTargetQName(n.getParent(),"String_Node_Str")) {
    for (    Node c : n.children()) {
      if (c.isStringKey() && !c.isQuotedString()) {
        c.setQuotedString();
        compiler.reportChangeToEnclosingScope(c);
      }
 else       if (c.isMemberFunctionDef()) {
        rewriteMemberDefInObjLit(c,n);
      }
    }
  }
}