diff --git a/src/main/java/org/junit/rules/TemporaryFolder.java b/src/main/java/org/junit/rules/TemporaryFolder.java index 2bf9b03d810c..65cc199f5dea 100644 --- a/src/main/java/org/junit/rules/TemporaryFolder.java +++ b/src/main/java/org/junit/rules/TemporaryFolder.java @@ -92,15 +92,30 @@ public File newFolder(String... folderNames) throws IOException { File file = getRoot(); for (int i = 0; i < folderNames.length; i++) { String folderName = folderNames[i]; + validateIOSeparator(folderName); file = new File(file, folderName); if (!file.mkdir() && isLastElementInArray(i, folderNames)) { - throw new IOException( - "a folder with the name \'" + folderName + "\' already exists"); + throw new IOException("a folder with the name \'" + folderName + "\' already exists"); } } return file; } + /** + * Validates if a OS separator was used in the attempt to create a folder structure. + * + * @param folderName + * String passed as the temp folder name + */ + private void validateIOSeparator(String folderName) throws IOException { + if (folderName.contains(File.separator)) { + String errorMsg = "It's not possible to use the OS separator to create folder " + + "hierarchies like 'MyParentFolder'%s'MyFolder'. Please use newFolder('MyParentFolder', "+ + "'MyFolder') instead"; + throw new IOException(String.format(errorMsg,File.separator)); + } + } + private boolean isLastElementInArray(int index, String[] array) { return index == array.length - 1; } diff --git a/src/test/java/org/junit/tests/experimental/rules/TemporaryFolderUsageTest.java b/src/test/java/org/junit/tests/experimental/rules/TemporaryFolderUsageTest.java index c208aaddae58..3283397487c1 100644 --- a/src/test/java/org/junit/tests/experimental/rules/TemporaryFolderUsageTest.java +++ b/src/test/java/org/junit/tests/experimental/rules/TemporaryFolderUsageTest.java @@ -167,6 +167,19 @@ public void canSetTheBaseFileForATemporaryFolder() throws IOException { assertThat(tempDir, is(folder.getRoot().getParentFile())); } + @Test + public void fileSeparatorShouldThrowExceptionWhenUsedAsPartOfFolderNameParameter() throws IOException { + tempFolder.create(); + + thrown.expect(IOException.class); + String errorMsg = "It's not possible to use the OS separator to create folder " + + "hierarchies like 'MyParentFolder'%s'MyFolder'. Please use newFolder('MyParentFolder', "+ + "'MyFolder') instead"; + thrown.expectMessage(String.format(errorMsg,File.separator)); + tempFolder.newFolder("MyParentFolder" + File.separator + "MyFolder"); + + } + private File createTemporaryFolder() throws IOException { File tempDir = File.createTempFile("junit", "tempFolder"); assertTrue("Unable to delete temporary file", tempDir.delete());