diff --git a/tmc-langs-r/src/main/java/fi/helsinki/cs/tmc/langs/r/RPlugin.java b/tmc-langs-r/src/main/java/fi/helsinki/cs/tmc/langs/r/RPlugin.java index 579352cf5..620dcf040 100644 --- a/tmc-langs-r/src/main/java/fi/helsinki/cs/tmc/langs/r/RPlugin.java +++ b/tmc-langs-r/src/main/java/fi/helsinki/cs/tmc/langs/r/RPlugin.java @@ -121,6 +121,8 @@ public Optional scanExercise(Path path, String exerciseName) { @Override public RunResult runTests(Path path) { ProcessRunner runner = new ProcessRunner(getTestCommand(), path); + + deleteResultsJson(path); try { ProcessResult result = runner.call(); @@ -189,6 +191,14 @@ public String[] getAvailablePointsCommand() { return ArrayUtils.addAll(command, args); } + public void deleteResultsJson(Path path) { + try { + Files.deleteIfExists(path.resolve(".results.json")); + } catch (Exception e) { + log.error("Could not delete .results.json", e); + } + } + /** * No operation for now. To be possibly implemented later: remove .Rdata, .Rhistory etc */ diff --git a/tmc-langs-r/src/test/java/fi/helsinki/cs/tmc/langs/r/RPluginTest.java b/tmc-langs-r/src/test/java/fi/helsinki/cs/tmc/langs/r/RPluginTest.java index 8646628e8..66b78cadd 100644 --- a/tmc-langs-r/src/test/java/fi/helsinki/cs/tmc/langs/r/RPluginTest.java +++ b/tmc-langs-r/src/test/java/fi/helsinki/cs/tmc/langs/r/RPluginTest.java @@ -120,7 +120,8 @@ public void runTestsReturnsStackTraceWhenPathDoesNotExist() { RunResult res = plugin.runTests(doesNotExist); String stackTrace = new String(res.logs.get(SpecialLogs.GENERIC_ERROR_MESSAGE)); - assertEquals("java.lang.NullPointerException", stackTrace.split("\n")[0]); + assertEquals("java.lang.NullPointerException", + stackTrace.split(System.getProperty("line.separator"))[0]); assertTrue(stackTrace.split("\n").length > 1); } @@ -155,4 +156,17 @@ public void getStudentFilePolicyReturnsRStudentFilePolicy() { assertTrue(policy instanceof RStudentFilePolicy); } + + @Test + public void resultsJsonIsDeletedBeforeRunning() throws IOException { + Files.createFile(simpleAllTestsPassProject.resolve(".results.json")); + plugin.deleteResultsJson(simpleAllTestsPassProject); + assertTrue(!Files.exists(simpleAllTestsPassProject.resolve(".results.json"))); + } + + @Test + public void deleteResultsJsonWorksCorrectlyWhenNoJson() throws IOException { + plugin.deleteResultsJson(simpleAllTestsPassProject); + assertTrue(!Files.exists(simpleAllTestsPassProject.resolve(".results.json"))); + } }