/*******************************************************************************
* Copyright 2013 Geoscience Australia
*
* 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 au.gov.ga.earthsci.core.temporal.timescale;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.math.BigInteger;
import org.junit.Test;
import au.gov.ga.earthsci.core.temporal.timescale.BasicTimeScale.Builder;
/**
* Unit tests for the {@link BasicTimeScale} and {@link Builder} classes
*
* @author James Navin (james.navin@ga.gov.au)
*/
public class BasicTimeScaleTest
{
@Test
public void testBuilderWithValid()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0]).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withTopLevelPeriod(period).withLevels(levels).build();
assertNotNull(classUnderTest);
assertEquals(id, classUnderTest.getId());
assertEquals(name, classUnderTest.getName());
assertEquals(description, classUnderTest.getDescription());
assertEquals(2, classUnderTest.getLevels().size());
assertEquals(levels[1], classUnderTest.getLevels().get(0));
assertEquals(levels[0], classUnderTest.getLevels().get(1));
assertEquals(1, classUnderTest.getPeriods().size());
assertEquals(period, classUnderTest.getPeriods().get(0));
}
@Test(expected = IllegalArgumentException.class)
public void testBuilderWithNoId()
{
String id = "";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0]).build();
Builder.buildTimeScale(id, name, description).withTopLevelPeriod(period).withLevels(levels).build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuilderWithNoName()
{
String id = "id";
String name = "";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0]).build();
Builder.buildTimeScale(id, name, description).withTopLevelPeriod(period).withLevels(levels).build();
}
@Test
public void testBuilderWithNoDescription()
{
String id = "id";
String name = "name";
String description = "";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0]).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withTopLevelPeriod(period).withLevels(levels).build();
assertNotNull(classUnderTest);
}
@Test(expected = IllegalArgumentException.class)
public void testBuilderWithNoLevels()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0]).build();
Builder.buildTimeScale(id, name, description).withTopLevelPeriod(period).build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuilderWithNoPeriods()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
Builder.buildTimeScale(id, name, description).withLevels(levels).build();
}
@Test(expected = IllegalArgumentException.class)
public void testBuilderWithPeriodContainingInvalidLevel()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimeScaleLevel invalidLevel = new BasicTimeScaleLevel("bad", "bad", BigInteger.TEN, 2);
ITimePeriod subPeriod =
BasicTimePeriod.Builder.buildTimePeriod("sub1", "sub1", "sub1").atLevel(invalidLevel).build();
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[0])
.withSubPeriod(subPeriod).build();
Builder.buildTimeScale(id, name, description).withLevels(levels).withTopLevelPeriod(period).build();
}
@Test
public void testHasPeriodWithNull()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod subPeriod =
BasicTimePeriod.Builder.buildTimePeriod("sub1", "sub1", "sub1").atLevel(levels[0]).build();
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[1])
.withSubPeriod(subPeriod).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withLevels(levels).withTopLevelPeriod(period).build();
assertFalse(classUnderTest.hasPeriod(null));
}
@Test
public void testHasPeriodWithTopLevelPeriod()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod subPeriod =
BasicTimePeriod.Builder.buildTimePeriod("sub1", "sub1", "sub1").atLevel(levels[0]).build();
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[1])
.withSubPeriod(subPeriod).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withLevels(levels).withTopLevelPeriod(period).build();
assertTrue(classUnderTest.hasPeriod(period));
}
@Test
public void testHasPeriodWithSubPeriod()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod subPeriod =
BasicTimePeriod.Builder.buildTimePeriod("sub1", "sub1", "sub1").atLevel(levels[0]).build();
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[1])
.withSubPeriod(subPeriod).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withLevels(levels).withTopLevelPeriod(period).build();
assertTrue(classUnderTest.hasPeriod(subPeriod));
}
@Test
public void testHasPeriodWithNonChildPeriod()
{
String id = "id";
String name = "name";
String description = "description";
ITimeScaleLevel[] levels =
new ITimeScaleLevel[] { new BasicTimeScaleLevel("level2", "level2", BigInteger.ONE, 1),
new BasicTimeScaleLevel("level1", "level1", BigInteger.TEN, 0), };
ITimePeriod subPeriod =
BasicTimePeriod.Builder.buildTimePeriod("sub1", "sub1", "sub1").atLevel(levels[0]).build();
ITimePeriod period =
BasicTimePeriod.Builder.buildTimePeriod("period1", "period1", "period1").atLevel(levels[1])
.withSubPeriod(subPeriod).build();
ITimePeriod nonChildPeriod =
BasicTimePeriod.Builder.buildTimePeriod("odd", "odd", "odd").atLevel(levels[0]).build();
BasicTimeScale classUnderTest =
Builder.buildTimeScale(id, name, description).withLevels(levels).withTopLevelPeriod(period).build();
assertFalse(classUnderTest.hasPeriod(nonChildPeriod));
}
}