This is an automated email from the git hooks/post-receive script. sylvestre pushed a commit to branch master in repository jscover.
commit a53511b1465c9e363e0613397f84eed7649e1e61 Author: tntim96 <[email protected]> Date: Sun Jun 22 20:18:58 2014 +1000 Add `--save-json-only` to only save coverage data (https://github.com/tntim96/JSCover/issues/142) --- History.md | 1 + build.xml | 2 +- .../jscover/server/ConfigurationForServer.java | 8 ++++ .../server/InstrumentingRequestHandler.java | 37 ++++++++++------- .../jscover/server/ConfigurationForServerTest.java | 6 +++ .../server/InstrumentingRequestHandlerTest.java | 47 +++++++++++++++++++--- 6 files changed, 79 insertions(+), 22 deletions(-) diff --git a/History.md b/History.md index 9e6c671..e9087d2 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,6 @@ 1.0.12 / 2014-??-?? ================== + * Add `--save-json-only` to only save coverage data (https://github.com/tntim96/JSCover/issues/142) * Allow merging if no `original-src` directory exists (https://github.com/tntim96/JSCover/issues/142) * Internal: Fix tests failing with non-english locale (https://github.com/tntim96/JSCover/issues/141) diff --git a/build.xml b/build.xml index d53f6fe..02018ac 100644 --- a/build.xml +++ b/build.xml @@ -167,7 +167,7 @@ </target> <target name="coverage-check"> - <cobertura-check totallinerate="89" totalbranchrate="89"/> + <cobertura-check totallinerate="89" totalbranchrate="90"/> </target> <target name="coverage-check-all"> diff --git a/src/main/java/jscover/server/ConfigurationForServer.java b/src/main/java/jscover/server/ConfigurationForServer.java index 8ef475e..26a6d53 100644 --- a/src/main/java/jscover/server/ConfigurationForServer.java +++ b/src/main/java/jscover/server/ConfigurationForServer.java @@ -358,6 +358,7 @@ public class ConfigurationForServer extends ConfigurationCommon { public static final String DOC_ROOT_PREFIX = "--document-root="; public static final String PORT_PREFIX = "--port="; public static final String PROXY_PREFIX = "--proxy"; + public static final String SAVE_JSON_ONLY = "--save-json-only"; public static final String REPORT_DIR_PREFIX = "--report-dir="; public static final String INCLUDE_UNLOADED_JS_PREFIX = "--include-unloaded-js"; public static final String URI_TO_FILE_MATCHER_PREFIX = "--uri-to-file-matcher="; @@ -366,6 +367,7 @@ public class ConfigurationForServer extends ConfigurationCommon { private File documentRoot = new File(System.getProperty("user.dir")); private Integer port = 8080; private boolean proxy; + private boolean saveJSONOnly; private File reportDir = new File(System.getProperty("user.dir")); private boolean includeUnloadedJS; private Pattern uriToFileMatcher; @@ -400,6 +402,10 @@ public class ConfigurationForServer extends ConfigurationCommon { return reportDir; } + public boolean isSaveJSONOnly() { + return saveJSONOnly; + } + public String getHelpText() { return ioUtils.toString(getClass().getResourceAsStream("help.txt")); } @@ -440,6 +446,8 @@ public class ConfigurationForServer extends ConfigurationCommon { port = Integer.valueOf(arg.substring(PORT_PREFIX.length())); } else if (arg.equals(PROXY_PREFIX)) { proxy = true; + } else if (arg.equals(SAVE_JSON_ONLY)) { + saveJSONOnly = true; } else if (arg.equals(INCLUDE_UNLOADED_JS_PREFIX)) { includeUnloadedJS = true; } else if (arg.startsWith(REPORT_DIR_PREFIX)) { diff --git a/src/main/java/jscover/server/InstrumentingRequestHandler.java b/src/main/java/jscover/server/InstrumentingRequestHandler.java index 51da8fe..5bb1e61 100644 --- a/src/main/java/jscover/server/InstrumentingRequestHandler.java +++ b/src/main/java/jscover/server/InstrumentingRequestHandler.java @@ -410,7 +410,8 @@ public class InstrumentingRequestHandler extends HttpServer { unloadJSData = unloadedSourceProcessor.getEmptyCoverageData(uris.keySet()); for (ScriptCoverageCount scriptLinesAndSource : unloadJSData) { File src = new File(configuration.getDocumentRoot(), scriptLinesAndSource.getUri()); - ioUtils.copy(src, new File(reportDir, Main.reportSrcSubDir + scriptLinesAndSource.getUri())); + if (!configuration.isSaveJSONOnly()) + ioUtils.copy(src, new File(reportDir, Main.reportSrcSubDir + scriptLinesAndSource.getUri())); } } long skipped = request.getInputStream().skip(request.getPostIndex()); @@ -418,21 +419,10 @@ public class InstrumentingRequestHandler extends HttpServer { String data = ioUtils.toStringNoClose(request.getInputStream(), request.getContentLength()); logger.finest(data); jsonDataSaver.saveJSONData(reportDir, data, unloadJSData, uriFileTranslator); - if (configuration.isProxy()) { - for (String jsURI : uris.keySet()) { - File dest = new File(reportDir, Main.reportSrcSubDir + "/" + jsURI); - logger.log(FINE, "Copying {0} to {1}", new Object[]{jsURI, dest.getCanonicalPath()}); - ioUtils.copy(uris.get(jsURI), dest); - } - } else { - for (String jsURI : uris.keySet()) { - File src = new File(configuration.getDocumentRoot(), jsURI); - File dest = new File(reportDir, Main.reportSrcSubDir + "/" + jsURI); - logger.log(FINE, "Copying {0} to {1}", new Object[]{jsURI, dest.getCanonicalPath()}); - ioUtils.copy(src, dest); - } + if (!configuration.isSaveJSONOnly()) { + copyJSSourceIntoReportDir(reportDir); + ioService.generateJSCoverFilesForWebServer(reportDir, configuration.getVersion()); } - ioService.generateJSCoverFilesForWebServer(reportDir, configuration.getVersion()); sendResponse(HTTP_STATUS.HTTP_OK, MIME.TEXT_PLAIN, "Coverage data stored at " + reportDir); } catch(Throwable t) { logger.log(SEVERE, "Error saving coverage data", t); @@ -441,6 +431,23 @@ public class InstrumentingRequestHandler extends HttpServer { } } + private void copyJSSourceIntoReportDir(File reportDir) throws IOException { + if (configuration.isProxy()) { + for (String jsURI : uris.keySet()) { + File dest = new File(reportDir, Main.reportSrcSubDir + "/" + jsURI); + logger.log(FINE, "Copying {0} to {1}", new Object[]{jsURI, dest.getCanonicalPath()}); + ioUtils.copy(uris.get(jsURI), dest); + } + } else { + for (String jsURI : uris.keySet()) { + File src = new File(configuration.getDocumentRoot(), jsURI); + File dest = new File(reportDir, Main.reportSrcSubDir + "/" + jsURI); + logger.log(FINE, "Copying {0} to {1}", new Object[]{jsURI, dest.getCanonicalPath()}); + ioUtils.copy(src, dest); + } + } + } + @Override protected void handleGet(HttpRequest request) throws IOException { String uri = request.getPath(); diff --git a/src/test/java/jscover/server/ConfigurationForServerTest.java b/src/test/java/jscover/server/ConfigurationForServerTest.java index dc6c157..88ca10b 100644 --- a/src/test/java/jscover/server/ConfigurationForServerTest.java +++ b/src/test/java/jscover/server/ConfigurationForServerTest.java @@ -367,6 +367,7 @@ public class ConfigurationForServerTest { assertThat(configuration.skipInstrumentation("/"), is(false)); assertThat(configuration.getCompilerEnvirons().getLanguageVersion(), equalTo(150)); assertThat(configuration.isProxy(), is(false)); + assertThat(configuration.isSaveJSONOnly(), is(false)); assertThat(configuration.isIncludeUnloadedJS(), is(false)); assertThat(configuration.isIncludeBranch(), is(true)); assertThat(configuration.isIncludeFunction(), is(true)); @@ -456,6 +457,11 @@ public class ConfigurationForServerTest { } @Test + public void shouldParseSaveJSONOnly() { + assertThat(ConfigurationForServer.parse(new String[]{"--save-json-only"}).isSaveJSONOnly(), is(true)); + } + + @Test public void shouldParseIncludedUnloadedJS() { assertThat(ConfigurationForServer.parse(new String[]{"--include-unloaded-js"}).isIncludeUnloadedJS(), is(true)); } diff --git a/src/test/java/jscover/server/InstrumentingRequestHandlerTest.java b/src/test/java/jscover/server/InstrumentingRequestHandlerTest.java index 8cc4a3c..b4f21fe 100644 --- a/src/test/java/jscover/server/InstrumentingRequestHandlerTest.java +++ b/src/test/java/jscover/server/InstrumentingRequestHandlerTest.java @@ -371,6 +371,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; +import static org.mockito.Mockito.verifyZeroInteractions; @RunWith(MockitoJUnitRunner.class) public class InstrumentingRequestHandlerTest { @@ -553,10 +554,15 @@ public class InstrumentingRequestHandlerTest { @Test public void shouldStoreJSCoverageJSONInSpecifiedSubDirectoryAndCopySourceForReport() { + testStoreJSCoverageJSONInSpecifiedSubDirectory(false); + } + + private void testStoreJSCoverageJSONInSpecifiedSubDirectory(boolean saveJSONOnly) { InstrumentingRequestHandler.uris = new HashMap<String, String>(){{put("js/util.js",null);}}; File file = new File("target/temp"); file.deleteOnExit(); given(configuration.getReportDir()).willReturn(file); + given(configuration.isSaveJSONOnly()).willReturn(saveJSONOnly); given(configuration.getVersion()).willReturn("theVersion"); given(ioUtils.toStringNoClose(bais, 12)).willReturn("data"); given(bais.skip(50)).willReturn(50L); @@ -565,19 +571,32 @@ public class InstrumentingRequestHandlerTest { File subdirectory = new File(file, "subdirectory"); verify(jsonDataSaver).saveJSONData(subdirectory, "data", null, uriFileTranslator); - verify(ioService).generateJSCoverFilesForWebServer(subdirectory, "theVersion"); + if (saveJSONOnly) + verifyZeroInteractions(ioService); + else + verify(ioService).generateJSCoverFilesForWebServer(subdirectory, "theVersion"); verify(bais).skip(50); - verify(ioUtils).copy(new File("js/util.js"), new File(configuration.getReportDir(), "subdirectory/" + Main.reportSrcSubDir + "/js/util.js")); + verify(ioUtils, times(saveJSONOnly ? 0 : 1)).copy(new File("js/util.js"), new File(configuration.getReportDir(), "subdirectory/" + Main.reportSrcSubDir + "/js/util.js")); verifyZeroInteractions(instrumenterService); assertThat(stringWriter.toString(), containsString(format("Coverage data stored at %s", subdirectory))); } @Test public void shouldStoreJSCoverageJSONInSpecifiedSubDirectoryAndCopySourceForReportForProxy() { + testStoreJSCoverageJSONInSpecifiedSubDirectoryForProxy(false); + } + + @Test + public void shouldStoreJSCoverageJSONInSpecifiedSubDirectoryAndNotCopySourceForReportForProxy() { + testStoreJSCoverageJSONInSpecifiedSubDirectoryForProxy(true); + } + + private void testStoreJSCoverageJSONInSpecifiedSubDirectoryForProxy(boolean saveJSONOnly) { InstrumentingRequestHandler.uris = new HashMap<String, String>(){{put("js/util.js","someJavaScript");}}; File file = new File("target/temp"); file.deleteOnExit(); given(configuration.isProxy()).willReturn(true); + given(configuration.isSaveJSONOnly()).willReturn(saveJSONOnly); given(configuration.getReportDir()).willReturn(file); given(configuration.getVersion()).willReturn("theVersion"); given(ioUtils.toStringNoClose(bais, 12)).willReturn("data"); @@ -587,18 +606,31 @@ public class InstrumentingRequestHandlerTest { File subdirectory = new File(file, "subdirectory"); verify(jsonDataSaver).saveJSONData(subdirectory, "data", null, uriFileTranslator); - verify(ioService).generateJSCoverFilesForWebServer(subdirectory, "theVersion"); + if (saveJSONOnly) + verifyZeroInteractions(ioService); + else + verify(ioService).generateJSCoverFilesForWebServer(subdirectory, "theVersion"); verify(bais).skip(50); - verify(ioUtils).copy("someJavaScript", new File(configuration.getReportDir(), "subdirectory/" + Main.reportSrcSubDir + "/js/util.js")); + verify(ioUtils, times(saveJSONOnly ? 0 : 1)).copy("someJavaScript", new File(configuration.getReportDir(), "subdirectory/" + Main.reportSrcSubDir + "/js/util.js")); verifyZeroInteractions(instrumenterService); assertThat(stringWriter.toString(), containsString(format("Coverage data stored at %s", subdirectory))); } @Test public void shouldStoreJSCoverageJSONWithUnloadedJSAndCopySourceForReport() { + testStoreJSCoverageJSONWithUnloadedJS(false); + } + + @Test + public void shouldStoreJSCoverageJSONWithUnloadedJSAndNotCopySourceForReport() { + testStoreJSCoverageJSONWithUnloadedJS(true); + } + + private void testStoreJSCoverageJSONWithUnloadedJS(boolean saveJSONOnly) { File reportDir = new File("target/temp"); reportDir.deleteOnExit(); given(configuration.isIncludeUnloadedJS()).willReturn(true); + given(configuration.isSaveJSONOnly()).willReturn(saveJSONOnly); given(configuration.getReportDir()).willReturn(reportDir); given(configuration.getVersion()).willReturn("theVersion"); given(ioUtils.toStringNoClose(bais, 12)).willReturn("data"); @@ -610,9 +642,12 @@ public class InstrumentingRequestHandlerTest { webServer.handlePostOrPut(new HttpRequest(JSCOVERAGE_STORE, bais, null, 50, headers)); verify(jsonDataSaver).saveJSONData(reportDir, "data", unloadedJS, uriFileTranslator); - verify(ioService).generateJSCoverFilesForWebServer(reportDir, "theVersion"); + if (saveJSONOnly) + verifyZeroInteractions(ioService); + else + verify(ioService).generateJSCoverFilesForWebServer(reportDir, "theVersion"); verify(bais).skip(50); - verify(ioUtils).copy(new File("/js/unloaded.js"), new File(configuration.getReportDir(), Main.reportSrcSubDir + "/js/unloaded.js")); + verify(ioUtils, times(saveJSONOnly ? 0 : 1)).copy(new File("/js/unloaded.js"), new File(configuration.getReportDir(), Main.reportSrcSubDir + "/js/unloaded.js")); verifyZeroInteractions(instrumenterService); assertThat(stringWriter.toString(), containsString(format("Coverage data stored at %s", reportDir))); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jscover.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

