Program: 93556
Project: 93556
Buggy source:
/** 
 * Sets up the repository so that there are three commits affecting two interlinked files (part of the same logical model). The files won't be part of the same logical model initially, the link will be created in one of the commits we'll merge. <ul> <li>initial commit : "file1" contains package P1 and classes C1 and C2. "file2" contains P2 containing C3 and C4.</li> <li>master commit : delete C3</li> <li>branch commit : make C3 a super-class of C1</li> </ul> <p> There is no textual conflict in these changes, so a textual merge will end successfully, corrupting the model by breaking the links between them. However, logical merging will see the conflict and should mark both files as conflicting, without touching either of them. </p> <p> This case also presents the particularity of having a "single file" locally (file1 is not linked to file2) whereas the model is comprised of two files in the right. This will allow us to make sure that we are able to resolve the logical model in such cases. </p>
 * @throws Exception
 */
private void setUp007() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  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);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  root2.getEClassifiers().remove(class3);
  save(resource2);
  repository.addAndCommit(project,"String_Node_Str",file2);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  final EClass class1=(EClass)findObject(resource1,"String_Node_Str");
  class3=(EClass)findObject(resource2,"String_Node_Str");
  class1.getESuperTypes().add(class3);
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareBothDirectionsAndCheck(iFile1,MASTER,BRANCH,1,1,1);
  compareBothDirectionsAndCheck(iFile2,MASTER,BRANCH,0,1,0);
}

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 won't be part of the same logical model initially, the link will be created in one of the commits we'll merge. <ul> <li>initial commit : "file1" contains package P1 and classes C1 and C2. "file2" contains P2 containing C3 and C4.</li> <li>master commit : delete C3</li> <li>branch commit : make C3 a super-class of C1</li> </ul> <p> There is no textual conflict in these changes, so a textual merge will end successfully, corrupting the model by breaking the links between them. However, logical merging will see the conflict and should mark both files as conflicting, without touching either of them. </p> <p> This case also presents the particularity of having a "single file" locally (file1 is not linked to file2) whereas the model is comprised of two files in the right. This will allow us to make sure that we are able to resolve the logical model in such cases. </p>
 * @throws Exception
 */
private void setUp007() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  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);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  root2.getEClassifiers().remove(class3);
  save(resource2);
  repository.addAndCommit(project,"String_Node_Str",file2);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  final EClass class1=(EClass)findObject(resource1,"String_Node_Str");
  class3=(EClass)findObject(resource2,"String_Node_Str");
  class1.getESuperTypes().add(class3);
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareBothDirectionsAndCheck(iFile1,MASTER,BRANCH,1,1,1);
  compareADirectionAndCheck(iFile2,MASTER,BRANCH,0,1,0);
  compareADirectionAndCheck(iFile2,BRANCH,MASTER,1,1,1);
  repository.checkoutBranch(MASTER);
}