/*
* 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 (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
package org.opensolaris.opengrok.history;
import java.io.StringReader;
import java.util.Calendar;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author austvik
*/
public class PerforceHistoryParserTest {
public PerforceHistoryParserTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of parseChanges method, of class PerforceHistoryParser.
*/
@Test
public void parseChanges() throws Exception {
String output = "Change 1234 on 2008/10/13 11:30:00 by ADMIN@UserWorkspaceName 'Comment given to changelist within single qoutes, this is change one'\n" +
"Change 6543 on 2008/10/08 18:25:38 by USER@USER_WS 'Comment given to changelist within single qoutes'\n" +
"Change 7654 on 2008/09/30 01:00:01 by USER@USER_WS 'Comment given to changelist within single qoutes'\n" +
"Change 2345 on 2008/09/30 17:45:33 by ADMIN@Workspace2 'Comment given to changelist within single qoutes'\n";
History result = PerforceHistoryParser.parseChanges(new StringReader(output));
assertNotNull(result);
assertEquals(4, result.getHistoryEntries().size());
HistoryEntry e1 = result.getHistoryEntries().get(0);
assertEquals("1234", e1.getRevision());
assertEquals("ADMIN", e1.getAuthor());
assertEquals(0, e1.getFiles().size());
assertTrue(e1.getMessage().contains("change one"));
HistoryEntry e2 = result.getHistoryEntries().get(1);
assertNotNull(e2);
HistoryEntry e3 = result.getHistoryEntries().get(2);
assertNotNull(e3);
HistoryEntry e4 = result.getHistoryEntries().get(3);
assertEquals("2345", e4.getRevision());
// Bug #16660: Months used to be off by one. Verify that they match
// the dates in the sample output above.
assertDate(e1, 2008, Calendar.OCTOBER, 13);
assertDate(e2, 2008, Calendar.OCTOBER, 8);
assertDate(e3, 2008, Calendar.SEPTEMBER, 30);
assertDate(e4, 2008, Calendar.SEPTEMBER, 30);
}
/**
* Test of parseFileLog method, of class PerforceHistoryParser.
*/
@Test
public void parseFileLog() throws Exception {
String output = "//Path/To/Folder/In/Workspace/Filename\n" +
"\n" +
"... #4 change 1234 edit on 2008/08/19 11:30:00 by User@UserWorkspaceName (text)\n" +
"\n" +
" Comment for the change number 4\n" +
"\n" +
"... #3 change 5678 edit on 2008/08/19 18:25:38 by ADMIN@UserWorkspaceName (text)\n" +
"\n" +
" Comment for the change\n" +
"\n" +
"... #2 change 8765 edit on 2008/08/01 01:00:01 by ADMIN@UserWorkspaceName (text)\n" +
"\n" +
" Comment for the change\n" +
"\n" +
"... #1 change 1 add on 2008/07/30 17:45:33 by ADMIN@UserWorkspaceName (text)\n" +
"\n" +
" Comment for the change";
History result = PerforceHistoryParser.parseFileLog(new StringReader(output));
assertNotNull(result);
assertEquals(4, result.getHistoryEntries().size());
HistoryEntry e1 = result.getHistoryEntries().get(0);
assertEquals("4", e1.getRevision());
assertEquals("User", e1.getAuthor());
assertEquals(0, e1.getFiles().size());
assertTrue(e1.getMessage().contains("number 4"));
HistoryEntry e2 = result.getHistoryEntries().get(1);
assertNotNull(e2);
HistoryEntry e3 = result.getHistoryEntries().get(2);
assertNotNull(e3);
HistoryEntry e4 = result.getHistoryEntries().get(3);
assertEquals("1", e4.getRevision());
// Bug #16660: Months used to be off by one. Verify that they match
// the dates in the sample output above.
assertDate(e1, 2008, Calendar.AUGUST, 19);
assertDate(e2, 2008, Calendar.AUGUST, 19);
assertDate(e3, 2008, Calendar.AUGUST, 1);
assertDate(e4, 2008, Calendar.JULY, 30);
}
/**
* Assert that the date of a history entry is as expected.
*
* @param entry the history entry to check
* @param year the expected year
* @param month the expected month (note: January is 0, not 1)
* @param day the expected day of the month
*/
private static void assertDate(
HistoryEntry entry, int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(entry.getDate());
assertEquals("year", year, cal.get(Calendar.YEAR));
assertEquals("month", month, cal.get(Calendar.MONTH));
assertEquals("day", day, cal.get(Calendar.DAY_OF_MONTH));
}
}