Program: 54813
Project: 54813
Buggy source:
/** 
 * Runs a particular test case.
 */
private void runTestImpl(String moduleName,TestCase testCase,TestResult testResult,Strategy strategy) throws UnableToCompleteException {
  if (lastLaunchFailed) {
    throw new UnableToCompleteException();
  }
  String syntheticModuleName=moduleName + "String_Node_Str" + strategy.getSyntheticModuleExtension();
  boolean sameTest=(currentModule != null) && syntheticModuleName.equals(currentModule.getName());
  if (sameTest && lastLaunchFailed) {
    throw new UnableToCompleteException();
  }
  if (!sameTest) {
    currentModule=ModuleDefLoader.createSyntheticModule(getTopLogger(),syntheticModuleName,new String[]{moduleName,strategy.getModuleInherit()},true);
    currentModule.clearEntryPoints();
    currentModule.addEntryPointTypeName(GWTRunner.class.getName());
    Property moduleNameProp=currentModule.getProperties().create("String_Node_Str");
    moduleNameProp.addKnownValue(moduleName);
    moduleNameProp.setActiveValue(moduleName);
    runStyle.maybeCompileModule(syntheticModuleName);
  }
  messageQueue.setNextTest(new TestInfo(currentModule.getName(),testCase.getClass().getName(),testCase.getName()));
  try {
    if (firstLaunch) {
      runStyle.launchModule(currentModule.getName());
    }
  }
 catch (  UnableToCompleteException e) {
    lastLaunchFailed=true;
    testResult.addError(testCase,new JUnitFatalLaunchException(e));
    return;
  }
  try {
    testBeginTime=System.currentTimeMillis();
    testBeginTimeout=testBeginTime + TEST_BEGIN_TIMEOUT_MILLIS;
    pumpEventLoop();
  }
 catch (  TimeoutException e) {
    lastLaunchFailed=true;
    testResult.addError(testCase,e);
    return;
  }
  assert(messageQueue.hasResult());
  Map<String,JUnitResult> results=messageQueue.getResults();
  boolean parallelTesting=numClients > 1;
  for (  Entry<String,JUnitResult> entry : results.entrySet()) {
    String clientId=entry.getKey();
    JUnitResult result=entry.getValue();
    Throwable exception=result.getException();
    if (parallelTesting && exception != null) {
      String msg="String_Node_Str" + clientId;
      if (exception instanceof AssertionFailedError) {
        AssertionFailedError newException=new AssertionFailedError(msg + "String_Node_Str" + exception.getMessage());
        newException.setStackTrace(exception.getStackTrace());
        exception=newException;
      }
 else {
        exception=new RuntimeException(msg,exception);
      }
    }
    if (exception instanceof AssertionFailedError) {
      testResult.addFailure(testCase,(AssertionFailedError)exception);
    }
 else     if (exception != null) {
      if (exception instanceof JUnitFatalLaunchException) {
        lastLaunchFailed=true;
      }
      testResult.addError(testCase,exception);
    }
    strategy.processResult(testCase,result);
  }
}

Fixed version (ground truth):
/** 
 * Runs a particular test case.
 */
private void runTestImpl(String moduleName,TestCase testCase,TestResult testResult,Strategy strategy) throws UnableToCompleteException {
  if (lastLaunchFailed) {
    throw new UnableToCompleteException();
  }
  String syntheticModuleName=moduleName + "String_Node_Str" + strategy.getSyntheticModuleExtension();
  boolean sameTest=(currentModule != null) && syntheticModuleName.equals(currentModule.getName());
  if (sameTest && lastLaunchFailed) {
    throw new UnableToCompleteException();
  }
  if (!sameTest) {
    currentModule=ModuleDefLoader.createSyntheticModule(getTopLogger(),syntheticModuleName,new String[]{moduleName,strategy.getModuleInherit()},true);
    currentModule.clearEntryPoints();
    currentModule.addEntryPointTypeName(GWTRunner.class.getName());
    Property moduleNameProp=currentModule.getProperties().create("String_Node_Str");
    moduleNameProp.addKnownValue(moduleName);
    moduleNameProp.setActiveValue(moduleName);
    runStyle.maybeCompileModule(syntheticModuleName);
  }
  messageQueue.setNextTest(new TestInfo(currentModule.getName(),testCase.getClass().getName(),testCase.getName()));
  try {
    if (firstLaunch) {
      runStyle.launchModule(currentModule.getName());
    }
  }
 catch (  UnableToCompleteException e) {
    lastLaunchFailed=true;
    testResult.addError(testCase,new JUnitFatalLaunchException(e));
    return;
  }
  try {
    testBeginTime=System.currentTimeMillis();
    testBeginTimeout=testBeginTime + TEST_BEGIN_TIMEOUT_MILLIS;
    pumpEventLoop();
  }
 catch (  TimeoutException e) {
    lastLaunchFailed=true;
    testResult.addError(testCase,e);
    return;
  }
  assert(messageQueue.hasResult());
  Map<String,JUnitResult> results=messageQueue.getResults();
  boolean parallelTesting=numClients > 1;
  for (  Entry<String,JUnitResult> entry : results.entrySet()) {
    String clientId=entry.getKey();
    JUnitResult result=entry.getValue();
    Throwable exception=null;
    if (result == null) {
      String msg="String_Node_Str" + clientId;
      exception=new RuntimeException();
    }
 else {
      exception=result.getException();
      if (parallelTesting && exception != null) {
        String msg="String_Node_Str" + clientId;
        if (exception instanceof AssertionFailedError) {
          AssertionFailedError newException=new AssertionFailedError(msg + "String_Node_Str" + exception.getMessage());
          newException.setStackTrace(exception.getStackTrace());
          exception=newException;
        }
 else {
          exception=new RuntimeException(msg,exception);
        }
      }
    }
    if (exception instanceof AssertionFailedError) {
      testResult.addFailure(testCase,(AssertionFailedError)exception);
    }
 else     if (exception != null) {
      if (exception instanceof JUnitFatalLaunchException) {
        lastLaunchFailed=true;
      }
      testResult.addError(testCase,exception);
    }
    strategy.processResult(testCase,result);
  }
}