/*
* Copyright (C) 2012, Katy Hilgenberg.
* Special acknowledgments to: Knowledge & Data Engineering Group, University of Kassel (http://www.kde.cs.uni-kassel.de).
* Contact: sdcf@cs.uni-kassel.de
*
* This file is part of the SDCFramework (Sensor Data Collection Framework) project.
*
* The SDCFramework is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The SDCFramework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the SDCFramework. If not, see <http://www.gnu.org/licenses/>.
*/
package de.unikassel.android.sdcframework.data.tests;
import java.util.ArrayList;
import java.util.List;
import de.unikassel.android.sdcframework.data.Weekday;
import de.unikassel.android.sdcframework.data.WeekdaySchedule;
import de.unikassel.android.sdcframework.data.WeekdayScheduleEntry;
import de.unikassel.android.sdcframework.data.WeekdaySchedulerAction;
import de.unikassel.android.sdcframework.data.independent.GlobalSerializer;
import android.annotation.SuppressLint;
import android.os.Parcel;
import android.test.AndroidTestCase;
/**
* Tests for the type {@link WeekdaySchedule}.
*
* @author Katy Hilgenberg
*
*/
public class TestWeekdaySchedule extends AndroidTestCase
{
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#equals(java.lang.Object)}
* .
*/
public final void testEquals()
{
WeekdaySchedule daySchedule = createWeekdayScheduleForTest();
WeekdaySchedule otherDaySchedule = new WeekdaySchedule( daySchedule.getWeekday() );
assertFalse( "Expected unequal day schedules", otherDaySchedule.equals( daySchedule ) );
for( WeekdayScheduleEntry entry : daySchedule.getEntries() )
{
otherDaySchedule.addEntry( new WeekdayScheduleEntry( entry ) );
}
assertTrue( "Expected equal day schedules", otherDaySchedule.equals( daySchedule ) );
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#WeekdaySchedule(de.unikassel.android.sdcframework.data.Weekday, java.util.List)}
* .
*/
public final void testWeekdayScheduleWeekdayListOfWeekdayScheduleEntry()
{
List< WeekdayScheduleEntry > randomEntryList =
createWeekdayScheduleEntriesForTest();
Weekday randomWeekday =
Weekday.valueOfOrdinal( (int) ( Math.random() * 7 ) );
WeekdaySchedule daySchedule =
new WeekdaySchedule( randomWeekday, randomEntryList );
assertEquals( "Unexpected weekday", randomWeekday, daySchedule.getWeekday() );
assertNotNull( "Expected entry list intitialized", daySchedule.getEntries() );
assertEquals( "Expected same entry count", randomEntryList.size(),
daySchedule.getEntries().size() );
assertTrue( "Expected all entries added",
daySchedule.getEntries().containsAll( randomEntryList ) );
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#WeekdaySchedule(de.unikassel.android.sdcframework.data.Weekday)}
* and
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#getWeekday()}
* .
*/
public final void testWeekdayScheduleWeekday()
{
for ( Weekday weekday : Weekday.values() )
{
WeekdaySchedule daySchedule = new WeekdaySchedule( weekday );
assertEquals( "Unexpected weekday", weekday, daySchedule.getWeekday() );
assertNotNull( "Expected entry list intitialized",
daySchedule.getEntries() );
assertTrue( "Expected entry list empty",
daySchedule.getEntries().isEmpty() );
}
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#addEntry(de.unikassel.android.sdcframework.data.WeekdayScheduleEntry)}
* and
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#getEntries()}
* and
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#removeEntry(de.unikassel.android.sdcframework.data.WeekdayScheduleEntry)}
* .
*/
public final void testEntryList()
{
WeekdaySchedule daySchedule = new WeekdaySchedule( Weekday.Saturday );
assertNotNull( "Expected entry list available", daySchedule.getEntries() );
assertEquals( "Expected entry list empty", 0,
daySchedule.getEntries().size() );
List< WeekdayScheduleEntry > entries =
createWeekdayScheduleEntriesForTest();
int cnt = 0;
for ( WeekdayScheduleEntry entry : entries )
{
daySchedule.addEntry( entry );
cnt++;
assertTrue( "Expected entry added", daySchedule.getEntries().contains(
entry ) );
assertEquals( "Unexpected entry count", cnt,
daySchedule.getEntries().size() );
}
assertEquals( "Expected same entry count", entries.size(),
daySchedule.getEntries().size() );
assertTrue( "Expected all entries added",
daySchedule.getEntries().containsAll( entries ) );
WeekdayScheduleEntry entryToRemove = entries.get( entries.size() >> 1 );
daySchedule.removeEntry( entryToRemove );
assertFalse( "Expected entry removed", daySchedule.getEntries().contains(
entryToRemove ) );
assertEquals( "Unexpected entry count", entries.size() - 1,
daySchedule.getEntries().size() );
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#toXML()}.
*/
public final void testToXML()
{
WeekdaySchedule daySchedule = createWeekdayScheduleForTest();
try
{
String xml = daySchedule.toXML();
WeekdaySchedule dayScheduleFromXML =
GlobalSerializer.fromXML( WeekdaySchedule.class, xml );
assertEquals(
"Expected deserialized day schedule equals original one",
daySchedule,
dayScheduleFromXML );
}
catch ( Exception e )
{
fail( "Unexpected serialization exception" );
}
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#isValid()}.
*/
public final void testIsValid()
{
WeekdaySchedule daySchedule = createWeekdayScheduleForTest();
assertTrue( "Expected new intialized day schedule valid", daySchedule.isValid() );
for ( int i = 0; i < daySchedule.getEntries().size(); ++i )
{
WeekdayScheduleEntry entry = daySchedule.getEntries().get( i );
assertTrue( "Expected entry " + i + " valid", entry.isValid() );
if ( i == 0 )
{
entry.setValid( false );
}
}
assertFalse(
"Expected an weekday schedule with invalid entries is not valid",
daySchedule.isValid() );
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#describeContents()}
* .
*/
public final void testDescribeContents()
{
assertEquals( "Expected no special content", 0, new WeekdaySchedule(
Weekday.Friday ).describeContents() );
}
/**
* Test method for
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#writeToParcel(android.os.Parcel, int)}
* and
* {@link de.unikassel.android.sdcframework.data.WeekdaySchedule#WeekdaySchedule(android.os.Parcel)}
* .
*/
@SuppressLint( "Recycle" )
public final void testWriteToParcel()
{
WeekdaySchedule schedule = createWeekdayScheduleForTest();
Parcel parcel = Parcel.obtain();
schedule.writeToParcel( parcel, 0 );
parcel.setDataPosition( 0 );
WeekdaySchedule scheduleFromParcel =
WeekdaySchedule.CREATOR.createFromParcel( parcel );
assertEquals(
"Expected weekday schedule created from parcel equal to the original weekday schedule",
schedule, scheduleFromParcel );
}
/**
* Does create a weekday schedule for test purpose.
*
* @return a weekday schedule for test purpose.
*/
public static WeekdaySchedule createWeekdayScheduleForTest()
{
WeekdaySchedule schedule =
new WeekdaySchedule(
Weekday.valueOfOrdinal( (int) ( Math.random() * 7 ) ) );
List< WeekdayScheduleEntry > entries =
createWeekdayScheduleEntriesForTest();
for ( WeekdayScheduleEntry entry : entries )
{
schedule.addEntry( entry );
}
return schedule;
}
/**
* Does create a weekday schedule entry list for test purpose.
*
* @return a weekday schedule entry list.
*/
public static List< WeekdayScheduleEntry >
createWeekdayScheduleEntriesForTest()
{
List< WeekdayScheduleEntry > list = new ArrayList< WeekdayScheduleEntry >();
int rnd = 2 + (int) ( Math.random() * 10 );
for ( int i = 0; i < rnd; ++i )
{
int rndTime = (int) ( Math.random() * 24 * 60 * 60 );
list.add( new WeekdayScheduleEntry( rndTime, i % 2 == 0
? WeekdaySchedulerAction.StartService
: WeekdaySchedulerAction.StopService ) );
}
return list;
}
}