Project

General

Profile

Download (20.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.model.common;
10

    
11
import static org.junit.Assert.assertEquals;
12
import static org.junit.Assert.assertFalse;
13
import static org.junit.Assert.assertNotNull;
14
import static org.junit.Assert.assertNull;
15
import static org.junit.Assert.assertTrue;
16

    
17
import java.util.Calendar;
18

    
19
import org.apache.log4j.Logger;
20
import org.joda.time.DateTimeFieldType;
21
import org.joda.time.MutableDateTime;
22
import org.joda.time.Partial;
23
import org.joda.time.ReadableInstant;
24
import org.junit.Assert;
25
import org.junit.Before;
26
import org.junit.Test;
27

    
28
/**
29
 * @author a.mueller
30
 * @since 29.04.2020
31
 */
32
public class ExtendedTimePeriodTest {
33

    
34
    @SuppressWarnings("unused")
35
    private static final Logger logger = Logger.getLogger(ExtendedTimePeriodTest.class);
36

    
37
    private ExtendedTimePeriod onlyStartYear;
38
    private ExtendedTimePeriod onlyEndYear;
39
    private ExtendedTimePeriod startAndEndYear;
40
    private ExtendedTimePeriod noStartAndEndYear;
41
    private static final Integer year = 1982;
42
    private static final Integer month = 1;
43
    private static final Integer day = 5;
44

    
45
    private static final String SEP = TimePeriod.SEP;
46

    
47
    @Before
48
    public void setUp() throws Exception {
49
        onlyStartYear = ExtendedTimePeriod.NewExtendedYearInstance(1922);
50
        onlyEndYear = ExtendedTimePeriod.NewExtendedYearInstance(null, 1857);
51
        startAndEndYear = ExtendedTimePeriod.NewExtendedYearInstance(1931, 1957);
52
        Integer start = null;
53
        Integer end = null;
54
        noStartAndEndYear = ExtendedTimePeriod.NewExtendedYearInstance(start, end);
55
    }
56

    
57
  //************************ TESTS ******************************************
58

    
59
    /**
60
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance()}.
61
     */
62
    @Test
63
    public void testNewExtendedInstance() {
64
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance();
65
        Assert.assertNotNull(tp);
66
        Assert.assertTrue("VerbatimTimeperiod should be empty",tp.isEmpty());
67
    }
68

    
69
    /**
70
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(org.joda.time.Partial)}.
71
     */
72
    @Test
73
    public void testNewExtendedInstancePartial() {
74
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(new Partial().with(DateTimeFieldType.dayOfWeek(), 5));
75
        Assert.assertNotNull(tp);
76
        Assert.assertFalse("VerbatimTimeperiod should not be empty",tp.isEmpty());
77
    }
78

    
79
    /**
80
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(org.joda.time.Partial, org.joda.time.Partial)}.
81
     */
82
    @Test
83
    public void testNewExtendedInstancePartialPartial() {
84
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(new Partial().with(DateTimeFieldType.dayOfMonth(),day));
85
        Assert.assertNotNull(tp);
86
        Assert.assertFalse("VerbatimTimeperiod should not be empty",tp.isEmpty());
87
        Assert.assertEquals("VerbatimTimeperiod's should not be empty", day, tp.getStartDay());
88
    }
89

    
90
    /**
91
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(java.lang.Integer)}.
92
     */
93
    @Test
94
    public void testNewExtendedInstanceInteger() {
95
        onlyStartYear = ExtendedTimePeriod.NewExtendedYearInstance(1922);
96
        assertEquals(Integer.valueOf(1922), onlyStartYear.getStartYear());
97
        assertNull(onlyStartYear.getEndYear());
98
        assertEquals("1922", onlyStartYear.getYear());
99
    }
100

    
101
    /**
102
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(java.lang.Integer, java.lang.Integer)}.
103
     */
104
    @Test
105
    public void testNewExtendedInstanceIntegerInteger() {
106
        startAndEndYear = ExtendedTimePeriod.NewExtendedYearInstance(1931, 1957);
107
        assertEquals(Integer.valueOf(1957), startAndEndYear.getEndYear());
108
        assertEquals(Integer.valueOf(1931), startAndEndYear.getStartYear());
109
        assertEquals("1931"+SEP+"1957", startAndEndYear.getYear());
110
    }
111

    
112
    /**
113
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(java.util.Calendar)}.
114
     */
115
    @Test
116
    public void testNewExtendedInstanceCalendar() {
117
        Calendar cal = Calendar.getInstance();
118
        cal.set(1982, 1, day);
119
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(cal);
120
        Assert.assertNotNull(tp);
121
        Assert.assertFalse("Timeperiod should not be empty",tp.isEmpty());
122
        Assert.assertEquals("Timeperiod's should not be empty", day, tp.getStartDay());
123
    }
124

    
125
    /**
126
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(java.util.Calendar, java.util.Calendar)}.
127
     */
128
    @Test
129
    public void testNewExtendedInstanceCalendarCalendar() {
130
        Calendar cal = Calendar.getInstance();
131
        cal.set(year, month, day);
132
        Calendar cal2 = Calendar.getInstance();
133
        Integer day2 = 20;
134
        Integer month2 = 7;
135
        Integer year2 = 1985;
136
        cal2.set(year2, month2, day2);
137
        Calendar cal3 = Calendar.getInstance();
138
        Integer day3 = 12;
139
        Integer month3 = 3;
140
        Integer year3 = 1980;
141
        cal3.set(year3, month3, day3);
142
        Calendar cal4 = Calendar.getInstance();
143
        Integer day4 = 2;
144
        Integer month4 = 1;
145
        Integer year4 = 1986;
146
        cal4.set(year4, month4, day4);
147
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(cal, cal2, cal3, cal4);
148
        Assert.assertNotNull(tp);
149
        Assert.assertFalse("Timeperiod should not be empty",tp.isEmpty());
150
        Assert.assertEquals("Timeperiod's start year shold be equal to year", year, tp.getStartYear());
151
        //Calendar starts counting months with 0
152
        Assert.assertEquals("Timeperiod's start month should be equal to month+1 ", (Integer)(month +1), tp.getStartMonth());
153
        Assert.assertEquals("Timeperiod's start day should be equal to day", day, tp.getStartDay());
154

    
155
        Assert.assertEquals("Timeperiod's end year should be equal to year2", year2, tp.getEndYear());
156
        //Calendar starts counting months with 0
157
        Assert.assertEquals("Timeperiod's end month should be equal with month2(+1)", (Integer)(month2+1), tp.getEndMonth());
158
        Assert.assertEquals("Timeperiod's end day should be equal with day2", day2, tp.getEndDay());
159

    
160
        Assert.assertEquals("Timeperiod's extreme start year shold be equal to year3", year3, tp.getExtremeStartYear());
161
        //Calendar starts counting months with 0
162
        Assert.assertEquals("Timeperiod's extreme start month should be equal to month3+1 ", (Integer)(month3 +1), tp.getExtremeStartMonth());
163
        Assert.assertEquals("Timeperiod's extreme start day should be equal to day3", day3, tp.getExtremeStartDay());
164

    
165
        Assert.assertEquals("Timeperiod's extreme end year should be equal to year4", year4, tp.getExtremeEndYear());
166
        //Calendar starts counting months with 0
167
        Assert.assertEquals("Timeperiod's extreme end month should be equal with month4(+1)", (Integer)(month4+1), tp.getExtremeEndMonth());
168
        Assert.assertEquals("Timeperiod's extreme end day should be equal with day4", day4, tp.getExtremeEndDay());
169
    }
170

    
171
    /**
172
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(org.joda.time.ReadableInstant)}.
173
     */
174
    @Test
175
    public void testNewExtendedInstanceReadableInstant() {
176
        ReadableInstant readInst = new MutableDateTime();
177
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(readInst);
178
        Assert.assertNotNull(tp);
179
        Assert.assertFalse("Timeperiod should not be empty",tp.isEmpty());
180
        Assert.assertEquals("Timeperiod's should not be empty", (Integer)readInst.get(DateTimeFieldType.dayOfMonth()), tp.getStartDay());
181
    }
182

    
183
    /**
184
     * Test method for {@link eu.etaxonomy.cdm.model.common.ExtendedTimePeriod#NewExtendedInstance(org.joda.time.ReadableInstant, org.joda.time.ReadableInstant)}.
185
     */
186
    @Test
187
    public void testNewExtendedInstanceReadableInstantReadableInstant() {
188
        ReadableInstant readInst = new MutableDateTime();
189
        ReadableInstant readInst2 = new MutableDateTime();
190
        ((MutableDateTime)readInst).addDays(5);
191
        ReadableInstant readInst3 = new MutableDateTime();
192
        ReadableInstant readInst4 = new MutableDateTime();
193
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(readInst, readInst2, readInst3, readInst4);
194

    
195
        Assert.assertNotNull(tp);
196
        Assert.assertFalse("Timeperiod should not be empty",tp.isEmpty());
197
        Assert.assertEquals("Timeperiod's day should be equal to readable instant day", (Integer)readInst.get(DateTimeFieldType.dayOfMonth()), tp.getStartDay());
198
        Assert.assertEquals("Timeperiod's day should be equal to readable instant day", (Integer)readInst2.get(DateTimeFieldType.dayOfMonth()), tp.getEndDay());
199
    }
200

    
201
    /**
202
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#calendarToPartial(java.util.Calendar)}.
203
     */
204
    @Test
205
    public void testCalendarToPartial() {
206
        Calendar cal = Calendar.getInstance();
207
        cal.set(year, month, day);
208
        Partial part = TimePeriod.calendarToPartial(cal);
209
        Assert.assertEquals("Partial's day should not be equal to calednars day", day, (Integer)part.get(DateTimeFieldType.dayOfMonth()));
210
    }
211

    
212
    /**
213
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#readableInstantToPartial(org.joda.time.ReadableInstant)}.
214
     */
215
    @Test
216
    public void testReadableInstantToPartial() {
217
        ReadableInstant readInst = new MutableDateTime();
218
        Partial part = TimePeriod.readableInstantToPartial(readInst);
219
        part.get(DateTimeFieldType.dayOfMonth());
220
        Assert.assertEquals("Partial's day should not be equal to calednars day", (Integer)part.get(DateTimeFieldType.dayOfMonth()), (Integer)part.get(DateTimeFieldType.dayOfMonth()));
221
    }
222

    
223
    /**
224
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#TimePeriod()}.
225
     */
226
    @Test
227
    public void testTimePeriod() {
228
        TimePeriod tp = new TimePeriod();
229
        Assert.assertNotNull("Time period must be created",tp);
230
    }
231

    
232
    @Test
233
    public void testSetStart(){
234
        Partial startDate = new Partial().with(DateTimeFieldType.year(), 2010)
235
                .with(DateTimeFieldType.monthOfYear(), 12)
236
                .with(DateTimeFieldType.dayOfMonth(), 16);
237
        Partial newStartDate = new Partial().with(DateTimeFieldType.year(), 1984)
238
            .with(DateTimeFieldType.monthOfYear(), 12)
239
            .with(DateTimeFieldType.dayOfMonth(), 14);
240

    
241
        ExtendedTimePeriod tp = ExtendedTimePeriod.NewExtendedInstance(startDate);
242
        String startString = tp.toString();
243
        assertNull("Freetext should be not set", tp.getFreeText());
244
        tp.setStart(newStartDate);
245
        String changedString = tp.toString();
246
        Assert.assertTrue("Setting the partial should change the string representation of the TimePeriod", !startString.equals(changedString));
247

    
248
//        //
249
//        tp = TimePeriodParser.parseStringVerbatim("1752");
250
//        assertNull("Freetext should be not set", tp.getFreeText());
251
//        startString = tp.toString();
252
//        tp.setStart(newStartDate);
253
//        changedString = tp.toString();
254
//        Assert.assertTrue("Setting a partial for a parsed time period should change the string representation of the TimePeriod ", !startString.equals(changedString));
255
//
256
//        //
257
//        tp = TimePeriodParser.parseStringVerbatim("any strange date");
258
//        assertNotNull("Freetext should be set", tp.getFreeText());
259
//        startString = tp.toString();
260
//        tp.setStart(newStartDate);
261
//        changedString = tp.toString();
262
//        Assert.assertEquals("Setting a partial for a time period having the freetext set should not change the string representation of the TimePeriod  ", startString, changedString);
263
//
264

    
265
        //
266
//      tp = TimePeriodParser.parseString("15.12.1730"); //TODO currently not parsed
267
//
268
//      startString = tp.toString();
269
//      tp.setStart(newStartDate);
270
//      changedString = tp.toString();
271
//
272
//      Assert.assertTrue("Setting a partial for a parsed time period should change the string representation of the TimePeriod ", !startString.equals(changedString));
273
    }
274

    
275
    /**
276
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#isPeriod()}.
277
     */
278
    @Test
279
    public void testIsPeriod() {
280
        assertTrue(startAndEndYear.isPeriod());
281
        assertFalse(onlyStartYear.isPeriod());
282
        assertFalse(onlyEndYear.isPeriod());
283
        assertFalse(noStartAndEndYear.isPeriod());
284
        onlyStartYear.setEndDay(14);
285
        assertFalse(onlyStartYear.isPeriod());
286
        onlyStartYear.setEndYear(1988);
287
        assertTrue(onlyStartYear.isPeriod()); //may be discussed
288
    }
289

    
290
    /**
291
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#getStart()}.
292
     */
293
    @Test
294
    public void testGetStart() {
295
        TimePeriod tp = new TimePeriod();
296
        Partial start = new Partial(DateTimeFieldType.year(), 1999);
297
        tp.setStart(start);
298
        Assert.assertEquals("Start year should be 1999", Integer.valueOf(1999), tp.getStartYear());
299
        Assert.assertEquals("Start should be 'start'", start, tp.getStart());
300
    }
301

    
302

    
303
    /**
304
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#getEnd()}.
305
     */
306
    @Test
307
    public void testGetEnd() {
308
        TimePeriod tp = new TimePeriod();
309
        Partial end = new Partial(DateTimeFieldType.year(), 1999);
310
        tp.setEnd(end);
311
        Assert.assertEquals("End year should be 1999", Integer.valueOf(1999), tp.getEndYear());
312
        Assert.assertEquals("End should be 'end'", end, tp.getEnd());
313
    }
314

    
315
    /**
316
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#getYear()}.
317
     */
318
    @Test
319
    public void testGetYear() {
320
        TimePeriod tp = new TimePeriod();
321
        tp.setStartYear(1999);
322
        Assert.assertEquals("Year should be 1999", "1999", tp.getYear());
323
        tp.setEndYear(2002);
324
        Assert.assertEquals("Year should be 1999"+SEP+"2002", "1999"+SEP+"2002", tp.getYear());
325
    }
326

    
327

    
328
    /**
329
     * TODO should be partly moved to a test class for {@link TimePeriodPartialFormatter}
330
     */
331
    @Test
332
    public void testToStringTimePeriod() {
333
        Integer startYear = 1788;
334
        Integer startMonth = 6;
335
        Integer startDay = 25;
336
        Integer endDay = 21;
337
        Integer endMonth = 12;
338
        Integer endYear = 1799;
339
        Integer startYear2 = 1787;
340
        Integer startMonth2 = 5;
341
        Integer startDay2 = 24;
342
        Integer endDay2 = 20;
343
        Integer endMonth2 = 11;
344
        Integer endYear2 = 1800;
345
        ExtendedTimePeriod tp1 = ExtendedTimePeriod.NewExtendedYearInstance(startYear,endYear,startYear2,endYear2);
346

    
347
        String endash = TimePeriod.SEP;
348
        assertNotNull(tp1);
349
        Assert.assertEquals("(1787"+endash+")1788"+endash+"1799("+endash+"1800)", tp1.toString());
350
        tp1.setStartDay(startDay);
351
        tp1.setStartMonth(startMonth);
352
        tp1.setEndDay(endDay);
353
        tp1.setEndMonth(endMonth);
354
        tp1.setExtremeStartDay(startDay2);
355
        tp1.setExtremeStartMonth(startMonth2);
356
        tp1.setExtremeEndDay(endDay2);
357
        tp1.setExtremeEndMonth(endMonth2);
358
        Assert.assertEquals("(1787 May 24"+endash+")1788 Jun 25"+endash+"1799 Dec 21("+endash+"1800 Nov 20)", tp1.toString()); //date formatting may change in future
359

    
360
        tp1.setFreeText("My extended period");
361
        Assert.assertEquals("My extended period", tp1.toString());
362
    }
363

    
364

    
365
    /**
366
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#clone()}.
367
     */
368
    @Test
369
    public void testClone() {
370
        Integer startYear = 1788;
371
        Integer startMonth = 6;
372
        Integer startDay = 25;
373
        Integer endDay = 21;
374
        Integer endMonth = 12;
375
        Integer endYear = 1799;
376
        Integer startYear2 = 1787;
377
        Integer startMonth2 = 5;
378
        Integer startDay2 = 24;
379
        Integer endDay2 = 20;
380
        Integer endMonth2 = 11;
381
        Integer endYear2 = 1798;
382
        String freeText = "A free period";
383
        ExtendedTimePeriod tp1 = ExtendedTimePeriod.NewExtendedYearInstance(startYear,endYear,startYear2,endYear2);
384
        tp1.setStartDay(startDay);
385
        tp1.setStartMonth(startMonth);
386
        tp1.setEndDay(endDay);
387
        tp1.setEndMonth(endMonth);
388
        tp1.setExtremeStartDay(startDay2);
389
        tp1.setExtremeStartMonth(startMonth2);
390
        tp1.setExtremeEndDay(endDay2);
391
        tp1.setExtremeEndMonth(endMonth2);
392
        tp1.setFreeText(freeText);
393
        TimePeriod tpClone = tp1.clone();
394
        Assert.assertEquals("Start year must be 1788.", startYear, tpClone.getStartYear());
395
        Assert.assertEquals("Start month must be 6.", startMonth, tpClone.getStartMonth());
396
        Assert.assertEquals("Start day must be 25.", startDay, tpClone.getStartDay());
397
        Assert.assertEquals("End year must be 1799.", endYear, tpClone.getEndYear());
398
        Assert.assertEquals("End month must be 12.", endMonth, tpClone.getEndMonth());
399
        Assert.assertEquals("End day must be 21.", endDay, tpClone.getEndDay());
400

    
401
        ExtendedTimePeriod tpCloneExtended = (ExtendedTimePeriod)tpClone;
402
        Assert.assertEquals("Extreme start year must be 1787.", startYear2, tpCloneExtended.getExtremeStartYear());
403
        Assert.assertEquals("Extreme start month must be 5.", startMonth2, tpCloneExtended.getExtremeStartMonth());
404
        Assert.assertEquals("Extreme start day must be 24.", startDay2, tpCloneExtended.getExtremeStartDay());
405
        Assert.assertEquals("Extreme end year must be 1798.", endYear2, tpCloneExtended.getExtremeEndYear());
406
        Assert.assertEquals("Extreme end month must be 11.", endMonth2, tpCloneExtended.getExtremeEndMonth());
407
        Assert.assertEquals("Extreme end day must be 20.", endDay2, tpCloneExtended.getExtremeEndDay());
408
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
409
    }
410

    
411
    /**
412
     * Test method for {@link eu.etaxonomy.cdm.model.common.TimePeriod#clone()}.
413
     */
414
    @Test
415
    public void testEquals() {
416
        Integer startYear = 1788;
417
        Integer startMonth = 6;
418
        Integer endDay = 21;
419
        Integer endYear = 1799;
420
        String freeText = "A free period";
421

    
422
        ExtendedTimePeriod tp1 = ExtendedTimePeriod.NewExtendedYearInstance(startYear);
423
        ExtendedTimePeriod tpClone = tp1.clone();
424
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
425

    
426
        tp1.setStartMonth(startMonth);
427
        Assert.assertFalse("Cloned time period must not be equal to originial", tp1.equals(tpClone));
428
        tpClone = tp1.clone();
429
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
430

    
431

    
432
        tp1.setEndYear(endYear);
433
        Assert.assertFalse("Cloned time period must not be equal to originial", tp1.equals(tpClone));
434
        tpClone = tp1.clone();
435
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
436

    
437
        tp1.setEndDay(endDay);
438
        Assert.assertFalse("Cloned time period must not be equal to originial", tp1.equals(tpClone));
439
        tpClone = tp1.clone();
440
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
441

    
442
        tp1.setFreeText(freeText);
443
        Assert.assertFalse("Cloned time period must not be equal to originial", tp1.equals(tpClone));
444
        tpClone = tp1.clone();
445
        Assert.assertEquals("Cloned time period must be equal to originial", tp1, tpClone);
446

    
447
        tp1 = ExtendedTimePeriod.NewExtendedInstance();
448
        Assert.assertFalse("Cloned time period must not be equal to originial", tp1.equals(tpClone));
449
        ExtendedTimePeriod tp2 = ExtendedTimePeriod.NewExtendedInstance();
450
        Assert.assertEquals("Empty time periods must be equal", tp1, tp2);
451

    
452
        tp1.setFreeText(freeText);
453
        Assert.assertFalse("Tp2 must not be equal to originial", tp1.equals(tp2));
454
        tp2.setFreeText("jldskjlfi");
455
        Assert.assertFalse("Tp2 must not be equal to originial", tp1.equals(tpClone));
456
        tp2.setFreeText(freeText);
457
        Assert.assertEquals("Tp2 must be equal", tp1, tp2);
458
    }
459

    
460
}
(4-4/12)