public void testUnpackOverWriteIfNewer() throws Exception {
    final long now = System.currentTimeMillis();

    setSilent(mojo, false);
    stubFactory.setCreateFiles(true);
    Artifact artifact = stubFactory.getSnapshotArtifact();
    assertTrue(artifact.getFile().setLastModified(now - 20000));

    ArtifactItem item = new ArtifactItem(artifact);

    List<ArtifactItem> list = Collections.singletonList(item);
    mojo.setArtifactItems(list);
    mojo.setOverWriteIfNewer(true);
    mojo.execute();
    File unpackedFile = getUnpackedFile(item);

    // round down to the last second
    long time = now;
    time = time - (time % 1000);
    // go back 10 more seconds for linux
    time -= 10000;
    // set to known value
    assertTrue(unpackedFile.setLastModified(time));
    // set source to be newer was 4s but test is brittle on MacOS if less than 5s
    assertTrue(artifact.getFile().setLastModified(time + 5000));

    // manually set markerfile (must match getMarkerFile in DefaultMarkerFileHandler)
    File marker =
        new File(mojo.getMarkersDirectory(), artifact.getId().replace(':', '-') + ".marker");
    assertTrue(marker.setLastModified(time));

    displayFile("unpackedFile", unpackedFile);
    displayFile("artifact    ", artifact.getFile());
    displayFile("marker      ", marker);
    System.out.println("mojo.execute()");
    mojo.execute();
    displayFile("unpackedFile", unpackedFile);
    displayFile("artifact    ", artifact.getFile());
    displayFile("marker      ", marker);
    System.out.println("marker.lastModified() = " + marker.lastModified());
    System.out.println("unpackedFile.lastModified() = " + unpackedFile.lastModified());
    assertTrue(
        "unpackedFile '"
            + unpackedFile
            + "' lastModified() == "
            + marker.lastModified()
            + ": should be different",
        marker.lastModified() != unpackedFile.lastModified());
  }
  public void dotestArtifactExceptions(boolean are, boolean anfe) throws Exception {
    ArtifactItem item = new ArtifactItem();

    item.setArtifactId("artifactId");
    item.setClassifier("");
    item.setGroupId("groupId");
    item.setType("type");
    item.setVersion("1.0");

    List<ArtifactItem> list = new ArrayList<ArtifactItem>();
    list.add(item);
    mojo.setArtifactItems(list);

    // init classifier things
    mojo.setFactory(DependencyTestUtils.getArtifactFactory());
    mojo.setResolver(new StubArtifactResolver(null, are, anfe));
    mojo.setLocal(new StubArtifactRepository(this.testDir.getAbsolutePath()));

    try {
      mojo.execute();
      fail("ExpectedException");
    } catch (MojoExecutionException e) {
      if (are) {
        assertEquals("Unable to resolve artifact.", e.getMessage());
      } else {
        assertEquals("Unable to find artifact.", e.getMessage());
      }
    }
  }
  public void testMissingVersionFromDependencyMgtWithClassifier() throws Exception {
    ArtifactItem item = new ArtifactItem();

    item.setArtifactId("artifactId");
    item.setClassifier("classifier");
    item.setGroupId("groupId");
    item.setType("jar");

    MavenProject project = mojo.getProject();
    project.setDependencies(getDependencyList(item));

    item = new ArtifactItem();

    item.setArtifactId("artifactId-2");
    item.setClassifier("classifier");
    item.setGroupId("groupId");
    item.setType("jar");

    List<ArtifactItem> list = new ArrayList<ArtifactItem>();
    list.add(item);

    mojo.setArtifactItems(list);

    project.getDependencyManagement().setDependencies(getDependencyMgtList(item));

    mojo.execute();

    assertMarkerFile(true, item);
    assertEquals("3.1", item.getVersion());
  }
  public void testUnpackFile() throws Exception {
    List<ArtifactItem> list = stubFactory.getArtifactItems(stubFactory.getClassifiedArtifacts());

    mojo.setArtifactItems(list);

    mojo.execute();

    assertMarkerFiles(list, true);
  }
  public void testUnpackToLocation() throws Exception {
    List<ArtifactItem> list = stubFactory.getArtifactItems(stubFactory.getClassifiedArtifacts());
    ArtifactItem item = list.get(0);
    item.setOutputDirectory(new File(mojo.getOutputDirectory(), "testOverride"));

    mojo.setArtifactItems(list);

    mojo.execute();

    assertMarkerFiles(list, true);
  }
  public void testUnpackOverWriteReleases() throws Exception {
    stubFactory.setCreateFiles(true);
    Artifact release = stubFactory.getReleaseArtifact();
    release.getFile().setLastModified(System.currentTimeMillis() - 2000);

    ArtifactItem item = new ArtifactItem(release);

    List<ArtifactItem> list = new ArrayList<ArtifactItem>(1);
    list.add(item);
    mojo.setArtifactItems(list);

    mojo.setOverWriteIfNewer(false);
    mojo.setOverWriteReleases(true);
    mojo.execute();

    assertUnpacked(item, true);
  }
  public void assertUnpacked(ArtifactItem item, boolean overWrite) throws Exception {

    File unpackedFile = getUnpackedFile(item);

    Thread.sleep(100);
    // round down to the last second
    long time = System.currentTimeMillis();
    time = time - (time % 1000);
    unpackedFile.setLastModified(time);

    assertEquals(time, unpackedFile.lastModified());
    mojo.execute();

    if (overWrite) {
      assertTrue(time != unpackedFile.lastModified());
    } else {
      assertEquals(time, unpackedFile.lastModified());
    }
  }
  public void testMissingVersionNotFound() throws Exception {
    ArtifactItem item = new ArtifactItem();

    item.setArtifactId("artifactId");
    item.setClassifier("");
    item.setGroupId("groupId");
    item.setType("type");

    List<ArtifactItem> list = new ArrayList<ArtifactItem>();
    list.add(item);
    mojo.setArtifactItems(list);

    try {
      mojo.execute();
      fail("Expected Exception Here.");
    } catch (MojoExecutionException e) {
      // caught the expected exception.
    }
  }