package de.akquinet;

import com.thoughtworks.xstream.converters.extended.ISO8601GregorianCalendarConverter;
import org.junit.Test;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

/**
 * Created with IntelliJ IDEA.
 * User: Moritz Grauel <moritz.grauel@akquinet.de>
 * Date: 17.06.13
 */
public class ISO8601GregorianCalendarConverterDefaultLocaleBugTest {

    /**
     * Format and regular locale differ - fails.
     */
    @Test
    public void defaultLocaleWithDifferentFormatLocaleProducesCorrectCalender() {

        Locale.setDefault( Locale.US );
        Locale.setDefault( Locale.Category.FORMAT, Locale.GERMANY);

        createAndCompareCalendars();
    }

    /**
     * Both locales are identical - succeeds.
     */
    @Test
    public void defaultLocaleWithSameFormatLocaleProducesCorrectCalender() {

        Locale.setDefault( Locale.US );
        Locale.setDefault( Locale.Category.FORMAT, Locale.US);

        createAndCompareCalendars();
    }

    private void createAndCompareCalendars() {
        final ISO8601GregorianCalendarConverter calendarConverter = new ISO8601GregorianCalendarConverter();

        final GregorianCalendar aCalendar = new GregorianCalendar( 2013, Calendar.JUNE, 17, 16, 0, 0 );

        final GregorianCalendar converterResult = (GregorianCalendar) calendarConverter.fromString( "2013-06-17T16:00:00" );
        org.junit.Assert.assertTrue( "Calendars should be equal", aCalendar.equals( converterResult ) );
    }
}
