/**
* Copyright 2011 Sven Diedrichsen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package de.jollyday.tests.parsers;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import de.jollyday.Holiday;
import de.jollyday.config.ChristianHoliday;
import de.jollyday.config.ChristianHolidayType;
import de.jollyday.config.ChronologyType;
import de.jollyday.config.Holidays;
import de.jollyday.config.RelativeToEasterSunday;
import de.jollyday.parser.AbstractHolidayParser;
import de.jollyday.parser.impl.ChristianHolidayParser;
import de.jollyday.parser.impl.RelativeToEasterSundayParser;
import de.jollyday.util.CalendarUtil;
public class ChristianHolidayParserTest {
private AbstractHolidayParser hp = new ChristianHolidayParser();
private CalendarUtil calendarUtil = new CalendarUtil();
@Test
public void testEmpty() {
Set<Holiday> holidays = new HashSet<>();
Holidays config = new Holidays();
hp.parse(2010, holidays, config);
Assert.assertTrue("Expected to be empty.", holidays.isEmpty());
}
@Test
public void testEaster() {
Set<Holiday> holidays = new HashSet<>();
Holidays config = createConfig(ChristianHolidayType.EASTER);
hp.parse(2011, holidays, config);
Assert.assertEquals("Wrong number of holidays.", 1, holidays.size());
Holiday easterDate = holidays.iterator().next();
LocalDate ed = calendarUtil.create(2011, 4, 24);
Assert.assertEquals("Wrong easter date.", ed, easterDate.getDate());
}
@Test
public void testChristianInvalidDate() {
Set<Holiday> holidays = new HashSet<>();
Holidays config = createConfig(ChristianHolidayType.EASTER);
config.getChristianHoliday().get(0).setValidTo(2010);
hp.parse(2011, holidays, config);
Assert.assertEquals("Wrong number of holidays.", 0, holidays.size());
}
@Test
public void testRelativeToEasterSunday() {
Set<Holiday> holidays = new HashSet<>();
Holidays config = createConfig(1);
RelativeToEasterSundayParser p = new RelativeToEasterSundayParser();
p.parse(2011, holidays, config);
List<LocalDate> expected = new ArrayList<>();
expected.add(calendarUtil.create(2011, 4, 25));
Assert.assertEquals("Wrong number of holidays.", expected.size(), holidays.size());
Assert.assertEquals("Wrong holiday.", expected.get(0), holidays.iterator().next().getDate());
}
@Test
public void testChristianDates() {
Set<Holiday> holidays = new HashSet<>();
Holidays config = createConfig(ChristianHolidayType.EASTER, ChristianHolidayType.CLEAN_MONDAY,
ChristianHolidayType.EASTER_SATURDAY, ChristianHolidayType.EASTER_TUESDAY,
ChristianHolidayType.GENERAL_PRAYER_DAY, ChristianHolidayType.PENTECOST,
ChristianHolidayType.SACRED_HEART);
hp.parse(2011, holidays, config);
List<LocalDate> expected = new ArrayList<>();
expected.add(calendarUtil.create(2011, 3, 7));
expected.add(calendarUtil.create(2011, 4, 23));
expected.add(calendarUtil.create(2011, 4, 24));
expected.add(calendarUtil.create(2011, 4, 26));
expected.add(calendarUtil.create(2011, 5, 20));
expected.add(calendarUtil.create(2011, 6, 12));
expected.add(calendarUtil.create(2011, 7, 1));
Assert.assertEquals("Wrong number of holidays.", expected.size(), holidays.size());
Collections.sort(expected);
List<Holiday> found = new ArrayList<>(holidays);
Collections.sort(found, new HolidayComparator());
for (int i = 0; i < expected.size(); i++) {
Assert.assertEquals("Wrong date.", expected.get(i), found.get(i).getDate());
}
}
private Holidays createConfig(int... days) {
Holidays config = new Holidays();
for (int day : days) {
RelativeToEasterSunday d = new RelativeToEasterSunday();
d.setDays(day);
d.setChronology(ChronologyType.GREGORIAN);
config.getRelativeToEasterSunday().add(d);
}
return config;
}
private Holidays createConfig(ChristianHolidayType... types) {
Holidays config = new Holidays();
for (ChristianHolidayType type : types) {
ChristianHoliday h = new ChristianHoliday();
h.setType(type);
config.getChristianHoliday().add(h);
}
return config;
}
}