001    /*
002     *  Copyright 2001-2005 Stephen Colebourne
003     *
004     *  Licensed under the Apache License, Version 2.0 (the "License");
005     *  you may not use this file except in compliance with the License.
006     *  You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     *  Unless required by applicable law or agreed to in writing, software
011     *  distributed under the License is distributed on an "AS IS" BASIS,
012     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     *  See the License for the specific language governing permissions and
014     *  limitations under the License.
015     */
016    package org.joda.time.tz;
017    
018    import java.util.Date;
019    import java.util.TimeZone;
020    
021    import junit.framework.TestCase;
022    import junit.framework.TestSuite;
023    
024    import org.joda.time.DateTimeZone;
025    
026    /**
027     * Test cases for FixedDateTimeZone.
028     *
029     * @author Stephen Colebourne
030     */
031    public class TestFixedDateTimeZone extends TestCase {
032    
033        public static void main(String[] args) {
034            junit.textui.TestRunner.run(suite());
035        }
036    
037        public static TestSuite suite() {
038            return new TestSuite(TestFixedDateTimeZone.class);
039        }
040    
041        private DateTimeZone originalDateTimeZone = null;
042    
043        public TestFixedDateTimeZone(String name) {
044            super(name);
045        }
046    
047        protected void setUp() throws Exception {
048            originalDateTimeZone = DateTimeZone.getDefault();
049            DateTimeZone.setDefault(DateTimeZone.UTC);
050        }
051    
052        protected void tearDown() throws Exception {
053            DateTimeZone.setDefault(originalDateTimeZone);
054        }
055    
056        public void testEquals() throws Exception {
057            FixedDateTimeZone zone1 = new FixedDateTimeZone("A", "B", 1, 5);
058            FixedDateTimeZone zone1b = new FixedDateTimeZone("A", "B", 1, 5);
059            FixedDateTimeZone zone2 = new FixedDateTimeZone("A", "C", 1, 5);
060            FixedDateTimeZone zone3 = new FixedDateTimeZone("A", "B", 2, 5);
061            FixedDateTimeZone zone4 = new FixedDateTimeZone("A", "B", 1, 6);
062            
063            assertEquals(true, zone1.equals(zone1));
064            assertEquals(true, zone1.equals(zone1b));
065            assertEquals(true, zone1.equals(zone2));  // second arg ignored
066            assertEquals(false, zone1.equals(zone3));
067            assertEquals(false, zone1.equals(zone4));
068        }
069    
070        public void testHashCode() throws Exception {
071            FixedDateTimeZone zone1 = new FixedDateTimeZone("A", "B", 1, 5);
072            FixedDateTimeZone zone1b = new FixedDateTimeZone("A", "B", 1, 5);
073            FixedDateTimeZone zone2 = new FixedDateTimeZone("A", "C", 1, 5);
074            FixedDateTimeZone zone3 = new FixedDateTimeZone("A", "B", 2, 5);
075            FixedDateTimeZone zone4 = new FixedDateTimeZone("A", "B", 1, 6);
076            
077            assertEquals(true, zone1.hashCode() == zone1.hashCode());
078            assertEquals(true, zone1.hashCode() == zone1b.hashCode());
079            assertEquals(true, zone1.hashCode() == zone2.hashCode());  // second arg ignored
080            assertEquals(false, zone1.hashCode() == zone3.hashCode());
081            assertEquals(false, zone1.hashCode() == zone4.hashCode());
082        }
083    
084        public void testToTimeZone1() throws Exception {
085            FixedDateTimeZone zone = new FixedDateTimeZone("+00:01", "+00:01", 60000, 60000);
086            java.util.TimeZone tz = zone.toTimeZone();
087            
088            assertEquals(60000, tz.getRawOffset());
089            assertEquals(60000, getOffset(tz, 1167638400000L));
090            assertEquals(60000, getOffset(tz, 1185951600000L));
091        }
092    
093        public void testToTimeZone2() throws Exception {
094            FixedDateTimeZone zone = new FixedDateTimeZone("A", "B", 1, 5);
095            java.util.TimeZone tz = zone.toTimeZone();
096            
097            assertEquals(1, tz.getRawOffset());
098            assertEquals(1, getOffset(tz, 1167638400000L));
099            assertEquals(1, getOffset(tz, 1185951600000L));
100        }
101    
102        /** Make test compile on JDK 1.3. */
103        private int getOffset(TimeZone zone, long millis) {
104            Date date = new Date(millis);
105            if (zone.inDaylightTime(date)) {
106                return zone.getRawOffset() + 3600000;
107            }
108            return zone.getRawOffset();
109        }
110    
111    }