/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ package org.opensolaris.opengrok.history; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.opensolaris.opengrok.util.TestRepository; import static org.junit.Assert.*; /** * * @author austvik */ public class GitHistoryParserTest { GitHistoryParser instance; private static TestRepository repository = new TestRepository(); public GitHistoryParserTest() { } @BeforeClass public static void setUpClass() throws Exception { repository = new TestRepository(); repository.create(HistoryGuru.class.getResourceAsStream("repositories.zip")); } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { instance = new GitHistoryParser(); } @After public void tearDown() { instance = null; } /** * Test of parse method, of class GitHistoryParser. */ @Test public void parseEmpty() throws Exception { History result = instance.parse(""); assertNotNull(result); assertTrue("Should not contain any history entries", 0 == result.getHistoryEntries().size()); } /** * Parse something that could come out from the Memcached repository * * @throws java.lang.Exception */ @Test public void parseALaMemcached() throws Exception { String commitId1 = "1a23456789abcdef123456789abcderf123456789"; String commitId2 = "2a2323487092314kjsdafsad7829342kjhsdf3289"; String commitId3 = "3asdfq234242871934g2sadfsa327894234sa2389"; String author1 = "username "; String author2 = "username2 "; String date1 = "Sat Apr 1 15:12:51 2008 +0000"; String date2 = "Wed Mar 22 15:23:15 2006 +0000"; String output = "commit " + commitId1 + "\n" + "Author: " + author1 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + author1 + "\n" + "CommitDate: " + date1 + "\n" + "\n" + " patch from somebody :\n" + " \n" + " commit message.\n" + " \n" + " \n" + " git-svn-id: http://host.example.com/svn/product/trunk/server@324-fdws-2342-fsdaf-gds-234\n" + "\n" + "commit " + commitId2 + "\n" + "Author: " + author2 + "\n" + "AuthorDate: " + date2 + "\n" + "Commit: " + author2 + "\n" + "CommitDate: " + date2 + "\n" + "\n" + " r123@branch: username | some date\n" + " some comment\n" + " \n" + " \n" + " git-svn-id: http://host.example.com/svn/product/trunk/server@324-fdws-2342-fsdaf-gds-234\n" + "\n" + "commit " + commitId3 + "\n" + "Author: " + author1 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + author2 + "\n" + "CommitDate: " + date2 + "\n" + "\n" + " some comment\n" + " \n" + " git-svn-id: http://host.example.com/svn/product/trunk/server@324-fdws-2342-fsdaf-gds-234\n"; History result = instance.parse(output); assertNotNull(result); assertTrue("Should contain three history entries", 3 == result.getHistoryEntries().size()); HistoryEntry e0 = result.getHistoryEntries().get(0); assertEquals(commitId1, e0.getRevision()); assertEquals(author1, e0.getAuthor()); assertEquals(0, e0.getFiles().size()); HistoryEntry e1 = result.getHistoryEntries().get(1); assertEquals(commitId2, e1.getRevision()); assertEquals(author2, e1.getAuthor()); assertEquals(0, e1.getFiles().size()); HistoryEntry e2 = result.getHistoryEntries().get(2); assertEquals(commitId3, e2.getRevision()); assertEquals(author1, e2.getAuthor()); assertEquals(0, e2.getFiles().size()); } /** * Parse something that could come out from the git repository * * @throws java.lang.Exception */ @Test public void parseALaGit() throws Exception { String commitId1 = "1a23456789abcdef123456789abcderf123456789"; String commitId2 = "2a2323487092314kjsdafsad7829342kjhsdf3289"; String author1 = "username "; String author2 = "username2 "; String date1 = "Sun Jan 13 01:12:05 2008 -0700"; String filename = "filename.c"; String output = "commit " + commitId1 + "\n" + "Author: " + author1 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + author2 + "\n" + "CommitDate: " + date1 + "\n" + "\n" + " Some heading\n" + " \n" + " First paragraph of text.\n" + " \n" + " Second paragraph\n" + " of text.\n" + " \n" + " Signed-off-by: Somebody \n" + "\n" + filename + "\n" + "\n" + "commit " + commitId2 + "\n" + "Author: " + author2 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + author2 + "\n" + "CommitDate: " + date1 + "\n" + "\n" + " Make \"--somethind\" do something.\n" + " \n" + " This is a full\n" + " paragraph of text\n" + " \n" + " Signed-off-by: Somebody \n" + "\n" + filename + "\n"; History result = instance.parse(output); assertNotNull(result); assertTrue("Should contain two history entries", 2 == result.getHistoryEntries().size()); HistoryEntry e0 = result.getHistoryEntries().get(0); assertEquals(commitId1, e0.getRevision()); assertEquals(author1, e0.getAuthor()); assertEquals(1, e0.getFiles().size()); assertEquals("/" + filename, e0.getFiles().first()); assertTrue(e0.getMessage().contains("Some heading")); assertTrue(e0.getMessage().contains("Signed-off-by")); HistoryEntry e1 = result.getHistoryEntries().get(1); assertEquals(commitId2, e1.getRevision()); assertEquals(author2, e1.getAuthor()); assertEquals(1, e1.getFiles().size()); assertEquals("/" + filename, e1.getFiles().first()); assertTrue(e1.getMessage().contains("paragraph of text")); assertTrue(e1.getMessage().contains("Signed-off-by")); } /** * Parse something that could come out from the linux kernel repository * * @throws java.lang.Exception */ @Test public void parseALaLK() throws Exception { String commitId1 = "1a23456789abcdef123456789abcderf123456789"; String commitId2 = "2a2323487092314kjsdafsad7829342kjhsdf3289"; String author1 = "username "; String author2 = "username2 "; String committer = "committer "; String date1 = "Sun Jan 13 01:12:05 2008 -0700"; String date2 = "Mon Jan 14 01:12:05 2008 -0800"; String filename1 = "directory/filename.c"; String filename2 = "directory/filename.h"; String output = "commit " + commitId1 + "\n" + "Author: " + author1 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + committer + "\n" + "CommitDate: " + date2 + "\n" + "\n" + " Subject: subject title\n" + " \n" + " sdj fasodjfads jfa.kdsmf asdknf sadlfkm sad fma\n" + " dpojfv adsjv a,s.kdnvlø aok åpwaiorjf aldjfg ladijfg adkgf\n" + " jsdkgfj sadhkjfgs dlkjfg dksjgfh.\n" + " \n" + " djkhfgv ksadhg kdajhg ,dsn \n" + " x,nv ,xmcnvkadsjfnv,. zxmcnv edfhsgdksgf.\n" + " Dsdn ,dn ,dsng .,xcmnvefjhgiorfhgdskhg fdsg dfh sdf\n" + " skdjfas djskdjf ksadjhfn sa.,df .\n" + " \n" + " Zkjd flsdj flksadj fødsakjf asd jfsadijfosdhva.\n" + " \n" + " [user@example.com: something or another]\n" + " Signed-off-by: First Last \n" + " Cc: Firstr Last \n" + " Signed-off-by: First Last \n" + " Signed-off-by: Pinguin \n" + "\n" + filename1 + "\n" + "\n" + "commit " + commitId2 + "\n" + "Author: " + author2 + "\n" + "AuthorDate: " + date1 + "\n" + "Commit: " + committer + "\n" + "CommitDate: " + date2 + "\n" + "\n" + " [PATCH] Subject heading.\n" + " \n" + " Some description of what is to come:\n" + " \n" + " * item 1\n" + " * item 2\n" + " * ...\n" + " * item n\n" + " \n" + " Signed-off-by: User \n" + " Cc: \"First.Last\" \n" + " Signed-off-by: First Last \n" + " Signed-off-by: Pinguin \n" + "\n" + filename1 + "\n" + filename2 + "\n"; History result = instance.parse(output); assertNotNull(result); assertTrue("Should contain two history entries", 2 == result.getHistoryEntries().size()); HistoryEntry e0 = result.getHistoryEntries().get(0); assertEquals(commitId1, e0.getRevision()); assertEquals(author1, e0.getAuthor()); assertEquals(1, e0.getFiles().size()); assertEquals("/" + filename1, e0.getFiles().first()); assertTrue(e0.getMessage().contains("subject title")); assertTrue(e0.getMessage().contains("Signed-off-by")); HistoryEntry e1 = result.getHistoryEntries().get(1); assertEquals(commitId2, e1.getRevision()); assertEquals(author2, e1.getAuthor()); assertEquals(2, e1.getFiles().size()); assertEquals("/" + filename1, e1.getFiles().first()); assertEquals("/" + filename2, e1.getFiles().last()); assertTrue(e1.getMessage().contains("[PATCH]")); assertTrue(e1.getMessage().contains("Signed-off-by")); } }