All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fm.last.commons.test.file.TemporaryFolder Maven / Gradle / Ivy

There is a newer version: 7.0.2
Show newest version
/*
 * Copyright 2012 Last.fm
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package fm.last.commons.test.file;

import java.io.File;
import java.io.IOException;

import org.junit.Rule;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;

/**
 * Why we have our own version of this class: http://stackoverflow.com/questions/7738881/junit-rule-lifecycle-interaction-with-before
 * 

* The TemporaryFolder Rule allows creation of files and folders that are guaranteed to be deleted when the test method * finishes (whether it passes or fails): * *

 * public static class HasTempFolder {
 *   @Rule
 *   public TemporaryFolder folder = new TemporaryFolder();
 * 
 *   @Test
 *   public void testUsingTempFolder() throws IOException {
 *     File createdFile = folder.newFile("myfile.txt");
 *     File createdFolder = folder.newFolder("subfolder");
 *     // ...
 *   }
 * }
 * 
*/ public class TemporaryFolder implements MethodRule { private File folder; @Override public final Statement apply(final Statement base, FrameworkMethod method, Object target) { Throwable caught; try { create(); caught = null; } catch (Throwable e) { caught = e; } final Throwable toRethrow = caught; return new Statement() { @Override public void evaluate() throws Throwable { if (toRethrow != null) { throw toRethrow; } try { base.evaluate(); } finally { delete(); } } }; } // testing purposes only /** * for testing purposes only. Do not use. */ public void create() throws IOException { folder = File.createTempFile("junit", ""); folder.delete(); folder.mkdir(); } /** * Returns a new fresh file with the given name under the temporary folder. */ public File newFile(String fileName) throws IOException { File file = new File(folder, fileName); file.createNewFile(); return file; } /** * Returns a new fresh folder with the given name under the temporary folder. */ public File newFolder(String folderName) { File file = new File(folder, folderName); file.mkdir(); return file; } /** * @return the location of this temporary folder. */ public File getRoot() { return folder; } /** * Delete all files and folders under the temporary folder. Usually not called directly, since it is automatically * applied by the {@link Rule} */ public void delete() { recursiveDelete(folder); } private void recursiveDelete(File file) { File[] files = file.listFiles(); if (files != null) { for (File each : files) { recursiveDelete(each); } } file.delete(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy