View Javadoc

1   package com.atlassian.webdriver.rule.test;
2   
3   import org.apache.commons.io.FileUtils;
4   import org.junit.rules.TemporaryFolder;
5   import org.junit.rules.TestWatcher;
6   import org.junit.runner.Description;
7   
8   import javax.annotation.Nonnull;
9   import java.io.File;
10  import java.io.IOException;
11  
12  import static com.google.common.base.Preconditions.checkState;
13  import static org.mockito.internal.util.Checks.checkNotNull;
14  
15  /**
16   * @since 2.3
17   */
18  public class TemporaryFolderPreservingOnFailure extends TestWatcher
19  {
20  
21      private final TemporaryFolder temporaryFolder;
22      private final File targetDir;
23  
24      public TemporaryFolderPreservingOnFailure(@Nonnull File targetDir)
25      {
26          checkNotNull(targetDir, "targetDir");
27          checkState(targetDir.isDirectory() || targetDir.getParentFile().isDirectory(),
28                  "target dir or its parent must be an existing directory: " + targetDir.getAbsolutePath());
29          this.targetDir = targetDir;
30          this.temporaryFolder = new TemporaryFolder();
31      }
32  
33      public TemporaryFolder getFolder()
34      {
35          return temporaryFolder;
36      }
37  
38      @Override
39      protected void starting(Description description)
40      {
41          try
42          {
43              temporaryFolder.create();
44          }
45          catch (IOException e)
46          {
47              throw new RuntimeException(e);
48          }
49      }
50  
51      @Override
52      protected void failed(Throwable e, Description description)
53      {
54          try
55          {
56              FileUtils.copyDirectory(temporaryFolder.getRoot(), new File(targetDir, temporaryFolder.getRoot().getName()));
57          } catch (IOException ioe)
58          {
59              throw new RuntimeException(ioe);
60          }
61      }
62  
63      @Override
64      protected void finished(Description description)
65      {
66          temporaryFolder.delete();
67      }
68  }