Program: 93557
Project: 93557
Buggy source:
/** 
 * Sets up the repository so that there are three commits affecting two interlinked files (part of the same logical model). The files will be linked together as a single logical model in all three sides of the comparison. <ul> <li>initial commit : "file1" contains package P1 and classes C1 and C2. "file2" contains P2 containing C3 and C4. C3 is a super-type of C1, linking the two files together.</li> <li>master commit : renamed C1 into C10</li> <li>branch commit : replace C3 by C4 as a super-class of C1, rename C4 into C40</li> </ul> <p> There is a textual conflict in the first file, none in the second. We expect the textual merge to corrupt the model with its textual conflict markers. There are no logical conflicts, so logical merging should end successfully. </p>
 * @throws Exception
 */
private void setUp008() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  EClass class1=createClass(root1,"String_Node_Str");
  createClass(root1,"String_Node_Str");
  resource1.getContents().add(root1);
  final EPackage root2=createPackage(null,"String_Node_Str");
  EClass class3=createClass(root2,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  resource2.getContents().add(root2);
  class1.getESuperTypes().add(class3);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  class1.setName("String_Node_Str");
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  class1=(EClass)findObject(resource1,"String_Node_Str");
  final EClass class4=(EClass)findObject(resource2,"String_Node_Str");
  class1.getESuperTypes().clear();
  class1.getESuperTypes().add(class4);
  class4.setName("String_Node_Str");
  save(resource1,resource2);
  repository.addAndCommit(project,"String_Node_Str",file1,file2);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareBothDirectionsAndCheck(iFile1,MASTER,BRANCH,0,1,3);
  compareBothDirectionsAndCheck(iFile2,MASTER,BRANCH,0,0,1);
}

Fixed version (ground truth):
/** 
 * Sets up the repository so that there are three commits affecting two interlinked files (part of the same logical model). The files will be linked together as a single logical model in all three sides of the comparison. <ul> <li>initial commit : "file1" contains package P1 and classes C1 and C2. "file2" contains P2 containing C3 and C4. C3 is a super-type of C1, linking the two files together.</li> <li>master commit : renamed C1 into C10</li> <li>branch commit : replace C3 by C4 as a super-class of C1, rename C4 into C40</li> </ul> <p> There is a textual conflict in the first file, none in the second. We expect the textual merge to corrupt the model with its textual conflict markers. There are no logical conflicts, so logical merging should end successfully. </p>
 * @throws Exception
 */
private void setUp008() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  EClass class1=createClass(root1,"String_Node_Str");
  createClass(root1,"String_Node_Str");
  resource1.getContents().add(root1);
  final EPackage root2=createPackage(null,"String_Node_Str");
  EClass class3=createClass(root2,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  resource2.getContents().add(root2);
  class1.getESuperTypes().add(class3);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  class1.setName("String_Node_Str");
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  class1=(EClass)findObject(resource1,"String_Node_Str");
  final EClass class4=(EClass)findObject(resource2,"String_Node_Str");
  class1.getESuperTypes().clear();
  class1.getESuperTypes().add(class4);
  class4.setName("String_Node_Str");
  save(resource1,resource2);
  repository.addAndCommit(project,"String_Node_Str",file1,file2);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareBothDirectionsAndCheck(iFile1,MASTER,BRANCH,0,1,3);
  compareBothDirectionsAndCheck(iFile2,MASTER,BRANCH,0,1,3);
}