package test; import java.io.File; import java.util.regex.Pattern; import aQute.bnd.build.Project; import aQute.bnd.build.ProjectBuilder; import aQute.bnd.build.Workspace; import aQute.bnd.osgi.Builder; import aQute.bnd.osgi.Processor; import aQute.bnd.osgi.Processor.FileLine; import aQute.lib.io.IO; import junit.framework.TestCase; public class LocationTest extends TestCase { Workspace ws; private File tmp; public void setUp() throws Exception { tmp = IO.getFile("generated/tmp"); IO.copy(IO.getFile("testresources/ws-location"), tmp); ws = new Workspace(tmp); } public void tearDown() throws Exception { IO.delete(tmp); } public void testMerged() throws Exception { Project project = ws.getProject("locationtest"); FileLine fl = project.getHeader("-merged", "BAZ"); assertNotNull(fl); assertEquals(project.getPropertiesFile().getAbsolutePath(), fl.file.getAbsolutePath()); assertEquals(18, fl.line); assertEquals(167, fl.start); assertEquals(170, fl.end); } public void testProjectHeaderClauses() throws Exception { Project project = ws.getProject("locationtest"); assertNotNull(project); FileLine fl = project.getHeader("-inprojectsep", "BAZ"); assertNotNull(fl); assertEquals(project.getPropertiesFile().getAbsolutePath(), fl.file.getAbsolutePath()); assertEquals(10, fl.line); assertEquals(104, fl.start); assertEquals(107, fl.end); fl = project.getHeader("-inproject", "BAZ"); assertNotNull(fl); assertEquals(project.getPropertiesFile().getAbsolutePath(), fl.file.getAbsolutePath()); assertEquals(3, fl.line); assertEquals(23, fl.start); assertEquals(26, fl.end); } public void testHeaderInSub() throws Exception { Project project = ws.getProject("locationtest"); Builder builder = project.getSubBuilders().iterator().next(); assertNotNull(builder); FileLine fl = builder.getHeader("-inprojectsep", "BAZ"); assertNotNull(fl); assertEquals(project.getPropertiesFile().getAbsolutePath(), fl.file.getAbsolutePath()); assertEquals(10, fl.line); assertEquals(104, fl.start); assertEquals(107, fl.end); } public void testBasic() throws Exception { Project project = ws.getProject("p1"); assertNotNull(project); ProjectBuilder sub1 = project.getSubBuilder("sub1"); assertNotNull(sub1); ProjectBuilder sub2 = project.getSubBuilder("sub2"); assertNotNull(sub2); assertTrue(find(sub1, "sub1", "p1/sub1.bnd", 4)); assertTrue(find(sub1, "bnd.bnd", "p1/bnd.bnd", 4)); assertTrue(find(project, "bnd.bnd", "p1/bnd.bnd", 4)); assertTrue(find(sub1, "i1", "p1/i1.bnd", 2)); assertTrue(find(project, "i1", "p1/i1.bnd", 2)); assertTrue(find(sub1, "i2", "p1/i2.bnd", 2)); assertTrue(find(project, "i2", "p1/i2.bnd", 2)); assertTrue(find(sub2, "sub2", "p1/sub2.bnd", 3)); assertTrue(find(sub2, "bnd.bnd", "p1/bnd.bnd", 4)); assertTrue(find(sub2, "workspace", "cnf/build.bnd", 6)); assertTrue(find(project, "workspace", "cnf/build.bnd", 6)); assertTrue(find(project.getWorkspace(), "workspace", "cnf/build.bnd", 6)); } private boolean find(Processor p, String what, String file, int line) throws Exception { Pattern pattern = Pattern.compile("^" + what, Pattern.MULTILINE); Processor.FileLine fl = p.getHeader(pattern); assertNotNull(fl); assertTrue(fl.file.getAbsolutePath().replace(File.separatorChar, '/').endsWith(file)); assertEquals(line, fl.line); return true; } }