@Test
  public void shouldDeleteExistingWithXmp() {
    registerFakeFiles(sut, "a.jpg", "a.xmp");
    sut.deleteFiles(createTestFile("a.jpg").getAbsolutePath());

    verify(sut).osDeleteFile(createTestFile("a.jpg"));
    verify(sut).osDeleteFile(createTestFile("a.xmp"));
  }
  @Test
  public void shouldCopy() {
    registerFakeFiles(sut);
    sut.moveOrCopyFilesTo(false, X_FAKE_OUTPUT_DIR, createTestFiles("a.jpg"));

    verify(sut)
        .osFileMoveOrCopy(false, new File(X_FAKE_OUTPUT_DIR, "/a.jpg"), createTestFile("a.jpg"));
  }
  @Test
  public void shouldCopyWitRenameExistingMultible() {
    registerFakeFiles(sut, "a.jpg", "b.png", "b(1).png");
    sut.moveOrCopyFilesTo(false, X_FAKE_OUTPUT_DIR, createTestFiles("a.jpg", "b.png"));

    verify(sut)
        .osFileMoveOrCopy(false, new File(X_FAKE_OUTPUT_DIR, "a(1).jpg"), createTestFile("a.jpg"));
    verify(sut)
        .osFileMoveOrCopy(false, new File(X_FAKE_OUTPUT_DIR, "b(2).png"), createTestFile("b.png"));
  }
  @Test
  public void shouldCopyRenameExistingWithXmp() {
    registerFakeFiles(sut, "a.jpg", "a.xmp", "a(1).xmp", "a(2).jpg"); // a(3) is next possible

    sut.moveOrCopyFilesTo(false, X_FAKE_OUTPUT_DIR, createTestFiles("a.jpg"));

    verify(sut)
        .osFileMoveOrCopy(false, new File(X_FAKE_OUTPUT_DIR, "a(3).jpg"), createTestFile("a.jpg"));
    verify(sut)
        .osFileMoveOrCopy(false, new File(X_FAKE_OUTPUT_DIR, "a(3).xmp"), createTestFile("a.xmp"));
  }