/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.frontend.delta;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import abs.frontend.ast.ClassDecl;
import abs.frontend.ast.DeltaDecl;
import abs.frontend.ast.Model;
public class SourceCodePositionTest extends DeltaTest {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void test() throws IOException {
File fcore = folder.newFile("core.abs");
File fd1 = folder.newFile("delta1.abs");
File fd2 = folder.newFile("delta2.abs");
{
FileWriter writer = new FileWriter(fcore);
writer.write(
"module M;"
+ "class C0 { Unit m() {} }"
);
writer.close();
}
{
FileWriter writer = new FileWriter(fd1);
writer.write(
"delta D1; uses M;"
+ "adds class C1 { Unit m() {} }"
+ "modifies class C0 { modifies Unit m() {} }"
);
writer.close();
}
{
FileWriter writer = new FileWriter(fd2);
writer.write(
"delta D2; uses M;"
+ "modifies class C1 { modifies Unit m() { original(); } }"
);
writer.close();
}
HashSet<String> fileNames = new HashSet<String>();
fileNames.add(fcore.getCanonicalPath());
fileNames.add(fd1.getCanonicalPath());
fileNames.add(fd2.getCanonicalPath());
Model model = assertParseFilesOk(fileNames, true);
DeltaDecl d1 = findDelta(model, "D1");
DeltaDecl d2 = findDelta(model, "D2");
model.applyDeltas(new ArrayList<DeltaDecl>(Arrays.asList(d1,d2)));
{
ClassDecl cls = (ClassDecl)findDecl(model, "M", "C0");
assertEquals(cls.getMethod(0).getFileName(), d1.getFileName());
}
{
ClassDecl cls = (ClassDecl)findDecl(model, "M", "C1");
assertEquals(cls.getFileName(), d1.getFileName());
assertEquals(cls.getMethod(0).getFileName(), d2.getFileName());
}
}
//TODO test line and column positions
}