View Javadoc
1   /*
2    * Copyright (C) 2012, Christian Halstrick and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  
11  package org.eclipse.jgit.util;
12  
13  import java.text.ParseException;
14  import java.text.SimpleDateFormat;
15  import java.util.Calendar;
16  import java.util.Date;
17  import java.util.GregorianCalendar;
18  
19  import org.eclipse.jgit.junit.MockSystemReader;
20  import org.junit.After;
21  import org.junit.Assert;
22  import org.junit.Before;
23  import org.junit.Test;
24  
25  public class GitDateParserTest {
26  	@Before
27  	public void setUp() {
28  		MockSystemReader mockSystemReader = new MockSystemReader();
29  		SystemReader.setInstance(mockSystemReader);
30  	}
31  
32  	@After
33  	public void tearDown() {
34  		SystemReader.setInstance(null);
35  	}
36  
37  	@Test
38  	public void yesterday() throws ParseException {
39  		GregorianCalendar cal = new GregorianCalendar(SystemReader
40  				.getInstance().getTimeZone(), SystemReader.getInstance()
41  				.getLocale());
42  		Date parse = GitDateParser.parse("yesterday", cal, SystemReader
43  				.getInstance().getLocale());
44  		cal.add(Calendar.DATE, -1);
45  		cal.set(Calendar.HOUR_OF_DAY, 0);
46  		cal.set(Calendar.MINUTE, 0);
47  		cal.set(Calendar.SECOND, 0);
48  		cal.set(Calendar.MILLISECOND, 0);
49  		cal.set(Calendar.MILLISECOND, 0);
50  		Assert.assertEquals(cal.getTime(), parse);
51  	}
52  
53  	@Test
54  	public void never() throws ParseException {
55  		GregorianCalendar cal = new GregorianCalendar(SystemReader
56  				.getInstance().getTimeZone(), SystemReader.getInstance()
57  				.getLocale());
58  		Date parse = GitDateParser.parse("never", cal, SystemReader
59  				.getInstance().getLocale());
60  		Assert.assertEquals(GitDateParser.NEVER, parse);
61  		parse = GitDateParser.parse("never", null);
62  		Assert.assertEquals(GitDateParser.NEVER, parse);
63  	}
64  
65  	@Test
66  	public void now() throws ParseException {
67  		String dateStr = "2007-02-21 15:35:00 +0100";
68  		Date refDate = SystemReader.getInstance()
69  				.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").parse(dateStr);
70  
71  		GregorianCalendar cal = new GregorianCalendar(SystemReader
72  				.getInstance().getTimeZone(), SystemReader.getInstance()
73  				.getLocale());
74  		cal.setTime(refDate);
75  
76  		Date parse = GitDateParser.parse("now", cal, SystemReader.getInstance()
77  				.getLocale());
78  		Assert.assertEquals(refDate, parse);
79  		long t1 = SystemReader.getInstance().getCurrentTime();
80  		parse = GitDateParser.parse("now", null);
81  		long t2 = SystemReader.getInstance().getCurrentTime();
82  		Assert.assertTrue(t2 >= parse.getTime() && parse.getTime() >= t1);
83  	}
84  
85  	@Test
86  	public void weeksAgo() throws ParseException {
87  		String dateStr = "2007-02-21 15:35:00 +0100";
88  		SimpleDateFormat df = SystemReader.getInstance()
89  				.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
90  		Date refDate = df.parse(dateStr);
91  		GregorianCalendar cal = new GregorianCalendar(SystemReader
92  				.getInstance().getTimeZone(), SystemReader.getInstance()
93  				.getLocale());
94  		cal.setTime(refDate);
95  
96  		Date parse = GitDateParser.parse("2 weeks ago", cal, SystemReader
97  				.getInstance().getLocale());
98  		Assert.assertEquals(df.parse("2007-02-07 15:35:00 +0100"), parse);
99  	}
100 
101 	@Test
102 	public void daysAndWeeksAgo() throws ParseException {
103 		String dateStr = "2007-02-21 15:35:00 +0100";
104 		SimpleDateFormat df = SystemReader.getInstance().getSimpleDateFormat(
105 				"yyyy-MM-dd HH:mm:ss Z");
106 		Date refDate = df.parse(dateStr);
107 		GregorianCalendar cal = new GregorianCalendar(SystemReader
108 				.getInstance().getTimeZone(), SystemReader.getInstance()
109 				.getLocale());
110 		cal.setTime(refDate);
111 
112 		Date parse = GitDateParser.parse("2 weeks ago", cal, SystemReader.getInstance()
113 				.getLocale());
114 		Assert.assertEquals(df.parse("2007-02-07 15:35:00 +0100"), parse);
115 		parse = GitDateParser.parse("3 days 2 weeks ago", cal);
116 		Assert.assertEquals(df.parse("2007-02-04 15:35:00 +0100"), parse);
117 		parse = GitDateParser.parse("3.day.2.week.ago", cal);
118 		Assert.assertEquals(df.parse("2007-02-04 15:35:00 +0100"), parse);
119 	}
120 
121 	@Test
122 	public void iso() throws ParseException {
123 		String dateStr = "2007-02-21 15:35:00 +0100";
124 		Date exp = SystemReader.getInstance()
125 				.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").parse(dateStr);
126 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
127 				.getInstance().getLocale());
128 		Assert.assertEquals(exp, parse);
129 	}
130 
131 	@Test
132 	public void rfc() throws ParseException {
133 		String dateStr = "Wed, 21 Feb 2007 15:35:00 +0100";
134 		Date exp = SystemReader.getInstance()
135 				.getSimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z")
136 				.parse(dateStr);
137 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
138 				.getInstance().getLocale());
139 		Assert.assertEquals(exp, parse);
140 	}
141 
142 	@Test
143 	public void shortFmt() throws ParseException {
144 		String dateStr = "2007-02-21";
145 		Date exp = SystemReader.getInstance().getSimpleDateFormat("yyyy-MM-dd")
146 				.parse(dateStr);
147 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
148 				.getInstance().getLocale());
149 		Assert.assertEquals(exp, parse);
150 	}
151 
152 	@Test
153 	public void shortWithDots() throws ParseException {
154 		String dateStr = "2007.02.21";
155 		Date exp = SystemReader.getInstance().getSimpleDateFormat("yyyy.MM.dd")
156 				.parse(dateStr);
157 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
158 				.getInstance().getLocale());
159 		Assert.assertEquals(exp, parse);
160 	}
161 
162 	@Test
163 	public void shortWithSlash() throws ParseException {
164 		String dateStr = "02/21/2007";
165 		Date exp = SystemReader.getInstance().getSimpleDateFormat("MM/dd/yyyy")
166 				.parse(dateStr);
167 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
168 				.getInstance().getLocale());
169 		Assert.assertEquals(exp, parse);
170 	}
171 
172 	@Test
173 	public void shortWithDotsReverse() throws ParseException {
174 		String dateStr = "21.02.2007";
175 		Date exp = SystemReader.getInstance().getSimpleDateFormat("dd.MM.yyyy")
176 				.parse(dateStr);
177 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
178 				.getInstance().getLocale());
179 		Assert.assertEquals(exp, parse);
180 	}
181 
182 	@Test
183 	public void defaultFmt() throws ParseException {
184 		String dateStr = "Wed Feb 21 15:35:00 2007 +0100";
185 		Date exp = SystemReader.getInstance()
186 				.getSimpleDateFormat("EEE MMM dd HH:mm:ss yyyy Z")
187 				.parse(dateStr);
188 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
189 				.getInstance().getLocale());
190 		Assert.assertEquals(exp, parse);
191 	}
192 
193 	@Test
194 	public void local() throws ParseException {
195 		String dateStr = "Wed Feb 21 15:35:00 2007";
196 		Date exp = SystemReader.getInstance()
197 				.getSimpleDateFormat("EEE MMM dd HH:mm:ss yyyy").parse(dateStr);
198 		Date parse = GitDateParser.parse(dateStr, null, SystemReader
199 				.getInstance().getLocale());
200 		Assert.assertEquals(exp, parse);
201 	}
202 }