content: package ru.yandex.qatools.allure.events;
  
  import org.apache.commons.io.Charsets;
  import org.junit.Before;
  import org.junit.Rule;
  import org.junit.Test;
  import org.junit.rules.TemporaryFolder;
  import ru.yandex.qatools.allure.model.Attachment;
  import ru.yandex.qatools.allure.model.Step;
  import ru.yandex.qatools.allure.utils.AllureResultsUtils;
  
  import java.io.File;
  import java.io.IOException;
  
  import static org.hamcrest.MatcherAssert.assertThat;
  import static org.hamcrest.core.Is.is;
  import static ru.yandex.qatools.allure.utils.AllureResultsUtils.writeAttachment;
  import static ru.yandex.qatools.allure.utils.DirectoryMatcher.contains;
  import static ru.yandex.qatools.allure.utils.DirectoryMatcher.notContains;
  
  /**
   * @author Dmitry Baev charlie@yandex-team.ru
   *         Date: 05.05.14
   */
  public class RemoveAttachmentsEventTest {
  
      @Rule
      public TemporaryFolder folder = new TemporaryFolder();
  
      private Step root = new Step();
  
      private File resultsDirectory;
  
      @Before
      public void setUp() throws Exception {
          resultsDirectory = folder.newFolder();
          AllureResultsUtils.setResultsDirectory(resultsDirectory);
  
          Step child1 = new Step().withName("child1");
          Step child2 = new Step().withName("child2");
  
          child1.getAttachments().add(save("firstAttach"));
          child2.getAttachments().add(save("secondAttach"));
  
          root.getAttachments().add(save("rootAttach"));
          root.getSteps().add(child1);
          root.getSteps().add(child2);
      }
  
      @Test
      public void shouldNotDeleteAnyByDefault() throws Exception {
          String[] files = resultsDirectory.list();
  
          new RemoveAttachmentsEvent("a^").process(root);
  
          for (String file : files) {
              assertThat(resultsDirectory, contains(file));
          }
  
          checkAttachmentsCount(root, 1);
      }
  
      @Test
      public void removeAllAttachmentsTest() throws Exception {
          String[] files = resultsDirectory.list();
  
          new RemoveAttachmentsEvent(".*").process(root);
  
          for (String file : files) {
              assertThat(resultsDirectory, notContains(file));
          }
  
          checkAttachmentsCount(root, 0);
      }
  
      public void checkAttachmentsCount(Step root, int count) {
          assertThat(count, is(root.getAttachments().size()));
          for (Step step : root.getSteps()) {
              checkAttachmentsCount(step, count);
          }
      }
  
      public Attachment save(String string) throws IOException {
          return writeAttachment(string.getBytes(Charsets.UTF_8), "other-title");
      }
  
  }
  