/* * 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.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.WeeklySchedule; import de.unikassel.android.sdcframework.data.independent.GlobalSerializer; import android.test.AndroidTestCase; import android.util.Log; /** * Test for the type {@link WeeklySchedule}. * * @author Katy Hilgenberg * */ public class TestWeeklySchedule extends AndroidTestCase { /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#equals(java.lang.Object)} * . */ public final void testEquals() { WeeklySchedule schedule = createWeeklyScheduleForTest(); WeeklySchedule otherSchedule = new WeeklySchedule(); assertFalse( "Expected unequal schedules", otherSchedule.equals( schedule ) ); WeekdaySchedule[] daySchedules = schedule.getSchedule(); for ( int i = 0; i < daySchedules.length; ++i ) { for ( WeekdayScheduleEntry entry : daySchedules[ i ].getEntries() ) { otherSchedule.getScheduleForWeekday( daySchedules[ i ].getWeekday() ).addEntry( new WeekdayScheduleEntry( entry ) ); } } assertTrue( "Expected equal schedules", otherSchedule.equals( schedule ) ); } /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#toString()}. */ public final void testToString() { WeeklySchedule schedule = createWeeklyScheduleForTest(); String xml = null; try { xml = schedule.toXML(); } catch ( Exception e ) { fail( "Unexpected serialization exception" ); } assertEquals( "Expected string representation equals xml representation", xml, schedule.toString() ); } /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#WeeklySchedule()} * and * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#getSchedule()} * and * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#getScheduleForWeekday(de.unikassel.android.sdcframework.data.Weekday)} * . */ public final void testWeeklySchedule() { WeeklySchedule schedule = new WeeklySchedule(); assertNotNull( "Expected day schedules available", schedule.getSchedule() ); assertEquals( "Expected day schedules available for a whole week", 7, schedule.getSchedule().length ); for ( Weekday weekday : Weekday.values() ) { assertNotNull( "Missing day schedule for " + weekday.name(), schedule.getScheduleForWeekday( weekday ) ); assertTrue( "Expected empty day schedule for " + weekday.name(), schedule.getScheduleForWeekday( weekday ).getEntries().isEmpty() ); } } /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#toXML()}. */ public final void testToXML() { WeeklySchedule schedule = createWeeklyScheduleForTest(); try { String xml = schedule.toXML(); Log.d( getClass().getSimpleName(), xml ); WeeklySchedule scheduleFromXML = GlobalSerializer.fromXML( WeeklySchedule.class, xml ); assertEquals( "Expected deserialized schedule equal to original one", schedule, scheduleFromXML ); } catch ( Exception e ) { fail( "Unexpected serialization exception" ); } } /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#size()}. */ public final void testSize() { WeeklySchedule schedule = createWeeklyScheduleForTest(); int expectedSize = 0; WeekdaySchedule[] daySchedules = schedule.getSchedule(); for ( int i = 0; i < daySchedules.length; ++i ) { expectedSize += daySchedules[ i ].getEntries().size(); } assertEquals( "Unexpected size", expectedSize, schedule.size() ); assertEquals( "Unexpected size of empty schedule", 0, new WeeklySchedule().size() ); } /** * Test method for * {@link de.unikassel.android.sdcframework.data.WeeklySchedule#isValid()}. */ public final void testIsValid() { WeeklySchedule schedule = createWeeklyScheduleForTest(); assertTrue( "Expected new intialized schedule valid", schedule.isValid() ); WeekdaySchedule[] daySchedules = schedule.getSchedule(); for ( int i = 0; i < daySchedules.length; ++i ) { assertTrue( "Expected day schedule " + i + " valid", daySchedules[ i ].isValid() ); if ( i == 0 ) { daySchedules[ i ].getEntries().get( 0 ).setValid( false ); } } assertFalse( "Expected an schedule with invalid entries is invalid", schedule.isValid() ); } /** * Does create a weekday schedule for test purpose. * * @return a weekday schedule for test purpose. */ public static WeeklySchedule createWeeklyScheduleForTest() { WeeklySchedule schedule = new WeeklySchedule(); for ( WeekdaySchedule daySchedule : schedule.getSchedule() ) { List< WeekdayScheduleEntry > entries = TestWeekdaySchedule.createWeekdayScheduleEntriesForTest(); for ( WeekdayScheduleEntry entry : entries ) { daySchedule.addEntry( entry ); } } return schedule; } }