| /* |
| * 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> |
| * @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(); |
| } |
| } |
| } |