package jscover.filesystem; import jscover.ConfigurationCommon; import jscover.report.FileData; import jscover.report.JSONDataMerger; import jscover.util.IoUtils; import org.junit.Before; import org.junit.Test; import java.io.File; import java.util.Properties; import java.util.SortedMap; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; public class FileSystemInstrumenterIntegrationTest { private FileSystemInstrumenter fileSystemInstrumenter = new FileSystemInstrumenter(); private ConfigurationForFS configurationForFS = new ConfigurationForFS(); private IoUtils ioUtils = IoUtils.getInstance(); private JSONDataMerger jsonMerger = new JSONDataMerger(); private File srcDir = new File("src/test-integration/resources/jsSearch"); private File destDir = new File("target/fs-test"); @Before public void setUp() { Properties properties = new Properties(); properties.put("version", "test"); configurationForFS.setProperties(properties); File jsCoverJSON = new File(destDir, "jscoverage.json"); if (jsCoverJSON.exists()) jsCoverJSON.delete(); } @Test public void shouldGenerateEmptyCoverageDataFile() { configurationForFS.setSrcDir(srcDir); configurationForFS.setDestDir(destDir); configurationForFS.setIncludeUnloadedJS(true); fileSystemInstrumenter.run(configurationForFS); String json = ioUtils.loadFromFileSystem(new File(destDir, "jscoverage.json")); SortedMap<String, FileData> map = jsonMerger.jsonToMap(json); assertThat(map.keySet().size(), equalTo(6)); assertThat(map.containsKey("/root.js"), is(true)); assertThat(map.containsKey("/root-empty.js"), is(true)); assertThat(map.containsKey("/level1/level1.js"), is(true)); assertThat(map.containsKey("/level1/level2/level2-empty.js"), is(true)); assertThat(map.containsKey("/level1/level2/level2.js"), is(true)); assertThat(map.containsKey("/noInstrument/noInstrument.js"), is(true)); FileData fileData = map.get("/level1/level1.js"); assertThat(fileData.getLines().size(), equalTo(5)); assertThat(fileData.getLines().get(0), nullValue()); assertThat(fileData.getLines().get(1), equalTo(0)); assertThat(fileData.getLines().get(2), equalTo(0)); assertThat(fileData.getLines().get(3), equalTo(0)); assertThat(fileData.getLines().get(4), equalTo(0)); } @Test public void shouldGenerateEmptyCoverageDataFileWithExclusions() { configurationForFS.setSrcDir(srcDir); configurationForFS.setDestDir(destDir); configurationForFS.setIncludeUnloadedJS(true); configurationForFS.addNoInstrument(ConfigurationCommon.NO_INSTRUMENT_PREFIX + "/noInstrument"); configurationForFS.addExclude(ConfigurationForFS.EXLCUDE_PREFIX + "/level1/level2"); fileSystemInstrumenter.run(configurationForFS); String json = ioUtils.loadFromFileSystem(new File(destDir, "jscoverage.json")); SortedMap<String, FileData> map = jsonMerger.jsonToMap(json); assertThat(map.keySet().size(), equalTo(3)); assertThat(map.containsKey("/root.js"), is(true)); assertThat(map.containsKey("/root-empty.js"), is(true)); assertThat(map.containsKey("/level1/level1.js"), is(true)); assertThat(map.containsKey("/level1/level2/level2-empty.js"), is(false)); assertThat(map.containsKey("/level1/level2/level2.js"), is(false)); assertThat(map.containsKey("/noInstrument/noInstrument.js"), is(false)); FileData fileData = map.get("/level1/level1.js"); assertThat(fileData.getLines().size(), equalTo(5)); assertThat(fileData.getLines().get(0), nullValue()); assertThat(fileData.getLines().get(1), equalTo(0)); assertThat(fileData.getLines().get(2), equalTo(0)); assertThat(fileData.getLines().get(3), equalTo(0)); assertThat(fileData.getLines().get(4), equalTo(0)); } }