blob: ab4cd2a7c646a3605e6ad419780cf6eee051c993 [file] [log] [blame]
/*
* Copyright 2012-present Facebook, Inc.
*
* 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 com.facebook.buck.testutil.integration;
import com.google.common.base.Preconditions;
import org.junit.rules.TemporaryFolder;
/**
* Subclass of {@link TemporaryFolder} that optionally keeps the contents of the tmp around after
* the test has finished. This is often useful when debugging a failed integration test.
* <p>
* Here is an example of how to create a {@link DebuggableTemporaryFolder} that will not delete
* itself on exit in an integration test:
* <pre>
* &#64;Rule
* public DebuggableTemporaryFolder tmp = new DebuggableTemporaryFolder().doNotDeleteOnExit();
* </pre>
*/
public class DebuggableTemporaryFolder extends TemporaryFolder {
private String name;
private boolean doNotDeleteOnExit;
public DebuggableTemporaryFolder() {}
/**
* If invoked, the directory created by this {@link TemporaryFolder} will not be deleted when the
* test finishes.
* @return {@code this}
*/
public DebuggableTemporaryFolder doNotDeleteOnExit() {
this.doNotDeleteOnExit = true;
return this;
}
/**
* Name to use to identify this {@link TemporaryFolder} when writing log messages to stdout.
* @return {@code this}
*/
public DebuggableTemporaryFolder setName(String name) {
this.name = Preconditions.checkNotNull(name);
return this;
}
@Override
public void after() {
if (doNotDeleteOnExit) {
String name = this.name == null ? "TemporaryFolder" : this.name;
System.out.printf("%s available at %s.\n", name, getRoot());
} else {
super.after();
}
}
}