Package org.gitective.tests

Source Code of org.gitective.tests.HistogramTest

/*
* Copyright (c) 2011 Kevin Sawicki <kevinsawicki@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
package org.gitective.tests;

import java.util.Date;
import java.util.TimeZone;

import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.filter.RevFilter;
import org.gitective.core.CommitFinder;
import org.gitective.core.stat.AuthorHistogramFilter;
import org.gitective.core.stat.CommitCountComparator;
import org.gitective.core.stat.CommitHistogram;
import org.gitective.core.stat.CommitHistogramFilter;
import org.gitective.core.stat.CommitterHistogramFilter;
import org.gitective.core.stat.EarliestComparator;
import org.gitective.core.stat.FileCommitActivity;
import org.gitective.core.stat.FileHistogram;
import org.gitective.core.stat.FileHistogramFilter;
import org.gitective.core.stat.LatestComparator;
import org.gitective.core.stat.RevisionCountComparator;
import org.gitective.core.stat.UserCommitActivity;
import org.junit.Test;

/**
* Unit tests of {@link CommitHistogramFilter}
*/
public class HistogramTest extends GitTestCase {

  /**
   * Test empty histogram
   */
  @Test
  public void emptyHistogram() {
    CommitHistogram histogram = new CommitHistogram();
    assertNull(histogram.getActivity(null));
    assertNotNull(histogram.getUserActivity());
    assertEquals(0, histogram.getUserActivity().length);
  }

  /**
   * Test empty user activity
   */
  @Test
  public void emptyUserActivity() {
    UserCommitActivity activity = new UserCommitActivity("test", "test2");
    assertEquals("test", activity.getName());
    assertEquals("test2", activity.getEmail());
    assertEquals(0, activity.getEarliest());
    assertEquals(0, activity.getLatest());
    assertEquals(0, activity.getCount());
    assertNull(activity.getFirst());
    assertNull(activity.getLast());
  }

  /**
   * Test histogram with single commit
   *
   * @throws Exception
   */
  @Test
  public void singleAuthorCommit() throws Exception {
    RevCommit commit = add("test.txt", "content");
    CommitFinder finder = new CommitFinder(testRepo);
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    finder.setFilter(filter).find();

    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);

    UserCommitActivity authorActivity = histogram.getActivity(author
        .getEmailAddress());
    assertNotNull(authorActivity);
    assertEquals(author.getName(), authorActivity.getName());
    assertEquals(author.getEmailAddress(), authorActivity.getEmail());
    assertEquals(authorActivity, histogram.getUserActivity()[0]);
    assertEquals(1, authorActivity.getCount());
    assertEquals(commit, authorActivity.getFirst());
    assertEquals(commit, authorActivity.getLast());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        authorActivity.getEarliest());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        authorActivity.getLatest());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        authorActivity.getTimes()[0]);
  }

  /**
   * Test histogram with single commit
   *
   * @throws Exception
   */
  @Test
  public void singleCommitterCommit() throws Exception {
    RevCommit commit = add("test.txt", "content");
    CommitFinder finder = new CommitFinder(testRepo);
    CommitHistogramFilter filter = new CommitterHistogramFilter();
    finder.setFilter(filter).find();

    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);

    UserCommitActivity committerActivity = histogram.getActivity(committer
        .getEmailAddress());
    assertNotNull(committerActivity);
    assertEquals(committer.getName(), committerActivity.getName());
    assertEquals(committer.getEmailAddress(), committerActivity.getEmail());
    assertEquals(committerActivity, histogram.getUserActivity()[0]);
    assertEquals(1, committerActivity.getCount());
    assertEquals(commit, committerActivity.getFirst());
    assertEquals(commit, committerActivity.getLast());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        committerActivity.getEarliest());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        committerActivity.getLatest());
    assertEquals(commit.getAuthorIdent().getWhen().getTime(),
        committerActivity.getTimes()[0]);
  }

  /**
   * Unit test of {@link LatestComparator}
   *
   * @throws Exception
   */
  @Test
  public void sortLatestFirst() throws Exception {
    RevCommit commit = add("test.txt", "content");
    author = new PersonIdent("abcd", "a@b.d", new Date(
        System.currentTimeMillis() + 5000), TimeZone.getDefault());
    RevCommit commit2 = add("test.txt", "content2");
    CommitFinder finder = new CommitFinder(testRepo);
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    finder.setFilter(filter).find();

    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);

    UserCommitActivity[] authors = histogram
        .getUserActivity(new LatestComparator());
    assertEquals(commit2, authors[0].getLast());
    assertEquals(commit, authors[1].getLast());
  }

  /**
   * Unit test of {@link EarliestComparator}
   *
   * @throws Exception
   */
  @Test
  public void sortEarliestFirst() throws Exception {
    RevCommit commit = add("test.txt", "content");
    author = new PersonIdent("abcd", "a@b.d", new Date(
        System.currentTimeMillis() + 5000), TimeZone.getDefault());
    RevCommit commit2 = add("test.txt", "content2");
    CommitFinder finder = new CommitFinder(testRepo);
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    finder.setFilter(filter).find();

    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);

    UserCommitActivity[] authors = histogram
        .getUserActivity(new EarliestComparator());
    assertEquals(commit, authors[0].getLast());
    assertEquals(commit2, authors[1].getLast());
  }

  /**
   * Unit test of {@link CommitCountComparator}
   *
   * @throws Exception
   */
  @Test
  public void sortMostFirst() throws Exception {
    RevCommit commit = add("test.txt", "content");
    author = new PersonIdent(author, new Date(
        System.currentTimeMillis() + 5000));
    add("a", "b.txt");
    author = new PersonIdent("abcd", "a@b.d", new Date(
        System.currentTimeMillis() + 5000), TimeZone.getDefault());
    RevCommit commit2 = add("test.txt", "content2");
    CommitFinder finder = new CommitFinder(testRepo);
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    finder.setFilter(filter).find();

    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);

    UserCommitActivity[] authors = histogram
        .getUserActivity(new CommitCountComparator());
    assertEquals(commit, authors[0].getFirst());
    assertEquals(commit2, authors[1].getLast());
  }

  /**
   * Unit test of {@link CommitHistogramFilter#reset()}
   *
   * @throws Exception
   */
  @Test
  public void resetAuthorFilter() throws Exception {
    add("test.txt", "content");
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    CommitHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);
    new CommitFinder(testRepo).setFilter(filter).find();
    assertSame(histogram, filter.getHistogram());
    filter.reset();
    assertNotNull(filter.getHistogram());
    assertSame(histogram, filter.getHistogram());
  }

  /**
   * Unit test of {@link FileHistogramFilter#reset()}
   *
   * @throws Exception
   */
  @Test
  public void resetFileFilter() throws Exception {
    add("test.txt", "content");
    FileHistogramFilter filter = new FileHistogramFilter();
    FileHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);
    new CommitFinder(testRepo).setFilter(filter).find();
    assertSame(histogram, filter.getHistogram());
    filter.reset();
    assertNotNull(filter.getHistogram());
    assertNotSame(histogram, filter.getHistogram());
  }

  /**
   * Unit test of {@link AuthorHistogramFilter#clone()}
   *
   * @throws Exception
   */
  @Test
  public void authorCloneFilter() throws Exception {
    CommitHistogramFilter filter = new AuthorHistogramFilter();
    RevFilter clone = filter.clone();
    assertNotNull(clone);
    assertNotSame(filter, clone);
    assertTrue(clone instanceof AuthorHistogramFilter);
    AuthorHistogramFilter clonedFilter = (AuthorHistogramFilter) clone;
    assertNotNull(clonedFilter.getHistogram());
    assertNotSame(filter.getHistogram(), clonedFilter.getHistogram());
  }

  /**
   * Unit test of {@link CommitterHistogramFilter#clone()}
   *
   * @throws Exception
   */
  @Test
  public void committerCloneFilter() throws Exception {
    CommitHistogramFilter filter = new CommitterHistogramFilter();
    RevFilter clone = filter.clone();
    assertNotNull(clone);
    assertNotSame(filter, clone);
    assertTrue(clone instanceof CommitterHistogramFilter);
    CommitterHistogramFilter clonedFilter = (CommitterHistogramFilter) clone;
    assertNotNull(clonedFilter.getHistogram());
    assertNotSame(filter.getHistogram(), clonedFilter.getHistogram());
  }

  /**
   * Unit test of {@link FileHistogramFilter#clone()}
   *
   * @throws Exception
   */
  @Test
  public void fileCloneFilter() throws Exception {
    FileHistogramFilter filter = new FileHistogramFilter();
    RevFilter clone = filter.clone();
    assertNotNull(clone);
    assertNotSame(filter, clone);
    assertTrue(clone instanceof FileHistogramFilter);
    FileHistogramFilter clonedFilter = (FileHistogramFilter) clone;
    assertNotNull(clonedFilter.getHistogram());
    assertNotSame(filter.getHistogram(), clonedFilter.getHistogram());
  }

  /**
   * Test {@link FileHistogramFilter} with single commit
   *
   * @throws Exception
   */
  @Test
  public void singleCommitFileActivity() throws Exception {
    add("file.txt", "abcd");
    FileHistogramFilter filter = new FileHistogramFilter();
    CommitFinder finder = new CommitFinder(testRepo);
    finder.setFilter(filter).find();

    FileHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);
    assertNull(histogram.getActivity(null));
    FileCommitActivity activity = histogram.getActivity("file.txt");
    assertNotNull(activity);
    assertEquals(1, activity.getRevisions());
    assertEquals(1, activity.getAdds());
    assertEquals(0, activity.getCopies());
    assertEquals(0, activity.getEdits());
    assertEquals(0, activity.getDeletes());
    assertEquals(0, activity.getRenames());
    assertEquals("file.txt", activity.getPath());
    assertNotNull(activity.getPreviousPaths());
    assertTrue(activity.getPreviousPaths().isEmpty());
    assertNotNull(histogram.getFileActivity());
    assertEquals(1, histogram.getFileActivity().length);
    assertEquals(activity, histogram.getFileActivity()[0]);
  }

  /**
   * Test {@link FileHistogramFilter} with three commits
   *
   * @throws Exception
   */
  @Test
  public void addEditDeleteFileActivity() throws Exception {
    add("file.txt", "abcd");
    add("file.txt", "abce");
    delete("file.txt");

    FileHistogramFilter filter = new FileHistogramFilter();
    CommitFinder finder = new CommitFinder(testRepo);
    finder.setFilter(filter).find();

    FileHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);
    FileCommitActivity activity = histogram.getActivity("file.txt");
    assertNotNull(activity);
    assertEquals(3, activity.getRevisions());
    assertEquals(1, activity.getAdds());
    assertEquals(1, activity.getEdits());
    assertEquals(1, activity.getDeletes());
    assertTrue(activity.getPreviousPaths().isEmpty());
  }

  /**
   * Test of {@link RevisionCountComparator}
   *
   * @throws Exception
   */
  @Test
  public void sortFileActivity() throws Exception {
    // File 1 has three revisions
    add("file1.txt", "1");
    add("file1.txt", "2");
    add("file1.txt", "3");
    // File 2 has one revision
    add("file2.txt", "1");
    // File 3 has 2 revsions
    add("file3.txt", "1");
    add("file3.txt", "2");
    // File 4 has one revision
    add("file4.txt", "1");

    FileHistogramFilter filter = new FileHistogramFilter();
    CommitFinder finder = new CommitFinder(testRepo);
    finder.setFilter(filter).find();
    FileHistogram histogram = filter.getHistogram();
    assertNotNull(histogram);
    FileCommitActivity[] files = histogram
        .getFileActivity(new RevisionCountComparator());
    assertNotNull(files);
    assertEquals(4, files.length);
    assertEquals("file1.txt", files[0].getPath());
    assertEquals("file3.txt", files[1].getPath());
    assertEquals("file2.txt", files[2].getPath());
    assertEquals("file4.txt", files[3].getPath());
  }
}
TOP

Related Classes of org.gitective.tests.HistogramTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.