/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.wicket.util.time; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.text.NumberFormat; import java.util.Locale; import java.util.Locale.Category; import org.apache.wicket.util.string.StringValueConversionException; import org.junit.Test; /** * Test cases for this object * * @author Jonathan Locke */ public final class DurationTest { /** * @throws StringValueConversionException */ @Test public void values() throws StringValueConversionException { assertEquals(Duration.milliseconds(3000), Duration.seconds(3)); assertEquals(Duration.seconds(120), Duration.minutes(2)); assertEquals(Duration.minutes(1440), Duration.hours(24)); assertEquals(Duration.hours(48), Duration.days(2)); assertEquals(Duration.minutes(90), Duration.valueOf("90 minutes")); assertEquals(Duration.days(9), Duration.valueOf("9 days")); assertEquals(Duration.hours(1), Duration.valueOf("1 hour")); assertTrue(9 == Duration.days(9).days()); assertTrue(11 == Duration.hours(11).hours()); assertTrue(21 == Duration.minutes(21).minutes()); assertTrue(51 == Duration.seconds(51).seconds()); } /** */ @Test public void operations() { assertTrue(Duration.milliseconds(3001).greaterThan(Duration.seconds(3))); assertTrue(Duration.milliseconds(3001).greaterThanOrEqual(Duration.seconds(3))); assertTrue(Duration.milliseconds(3000).greaterThanOrEqual(Duration.seconds(3))); assertTrue(Duration.milliseconds(2999).lessThan(Duration.seconds(3))); assertTrue(Duration.milliseconds(2999).lessThanOrEqual(Duration.seconds(3))); assertTrue(Duration.milliseconds(3000).lessThanOrEqual(Duration.seconds(3))); assertEquals(-1, Duration.milliseconds(2999).compareTo(Duration.seconds(3))); assertEquals(1, Duration.milliseconds(3001).compareTo(Duration.seconds(3))); assertEquals(0, Duration.milliseconds(3000).compareTo(Duration.seconds(3))); assertEquals(Duration.minutes(10), Duration.minutes(4).add(Duration.minutes(6))); assertEquals(Duration.ONE_HOUR, Duration.minutes(90).subtract(Duration.minutes(30))); String value = NumberFormat.getNumberInstance().format(1.5); assertEquals(value + " minutes", Duration.seconds(90).toString()); assertEquals("12 hours", Duration.days(0.5).toString()); } @Test public void formatLocale() throws Exception { final Locale oldFormatLocale = Locale.getDefault(Category.FORMAT); final Locale oldDefaultLocale = Locale.getDefault(); try { Locale.setDefault(Locale.US); Locale.setDefault(Category.FORMAT, Locale.GERMANY); assertEquals("should take formatting locale into account", "1,5 minutes", Duration.seconds(90) .toString()); } finally { Locale.setDefault(oldDefaultLocale); Locale.setDefault(Category.FORMAT, oldFormatLocale); } } /** */ @Test public void testSleep() { assertTrue(Duration.seconds(0.5).lessThan(Duration.benchmark(new Runnable() { @Override public void run() { Duration.seconds(1.5).sleep(); } }))); assertTrue(Duration.seconds(1).greaterThan(Duration.benchmark(new Runnable() { @Override public void run() { Duration.hours(-1).sleep(); } }))); } /** * @throws StringValueConversionException */ @Test public void locale() throws StringValueConversionException { assertEquals(Duration.minutes(90), Duration.valueOf("90 minutes")); assertEquals(Duration.hours(1.5), Duration.valueOf("1.5 hour", Locale.US)); assertEquals(Duration.hours(1.5), Duration.valueOf("1,5 hour", Locale.GERMAN)); assertEquals("1.5 hours", Duration.hours(1.5).toString(Locale.US)); assertEquals("1,5 hours", Duration.hours(1.5).toString(Locale.GERMAN)); } /** * Check if toString(Locale locale) respects the appropriate value and format (in English). */ @Test public void toStringValues() { assertEquals("1 day", Duration.days(1).toString(Locale.ENGLISH)); assertEquals("5 days", Duration.days(5).toString(Locale.ENGLISH)); assertEquals("1 hour", Duration.hours(1).toString(Locale.ENGLISH)); assertEquals("23 hours", Duration.hours(23).toString(Locale.ENGLISH)); assertEquals("1 minute", Duration.minutes(1).toString(Locale.ENGLISH)); assertEquals("2 minutes", Duration.minutes(2).toString(Locale.ENGLISH)); assertEquals("1 second", Duration.seconds(1).toString(Locale.ENGLISH)); assertEquals("2 seconds", Duration.seconds(2).toString(Locale.ENGLISH)); assertEquals("1 millisecond", Duration.milliseconds(1).toString(Locale.ENGLISH)); assertEquals("955 milliseconds", Duration.milliseconds(955).toString(Locale.ENGLISH)); } }