/* * Copyright (C) 2013 The Android Open Source Project * * 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 com.google.android.glass.sample.timer; import android.os.SystemClock; import android.test.AndroidTestCase; import java.util.concurrent.TimeUnit; /** * Unit tests for {@link Timer}. */ public class TimerTest extends AndroidTestCase { private static final long INITIAL_DURATION_MILLIS = TimeUnit.MINUTES.toMillis(5); private Timer mTimer; private long mElapsedRealtime; private boolean mOnStartCalled; private boolean mOnPauseCalled; private boolean mOnResetCalled; /** * Mock {@link Timer.TimerListener} to verify that callbacks are properly called. */ private class MockTimerListener implements Timer.TimerListener { @Override public void onStart() { mOnStartCalled = true; } @Override public void onPause() { mOnPauseCalled = true; } @Override public void onReset() { mOnResetCalled = true; } } @Override protected void setUp() throws Exception { super.setUp(); mTimer = new Timer(INITIAL_DURATION_MILLIS) { @Override protected long getElapsedRealtime() { return mElapsedRealtime; } }; mTimer.setListener(new MockTimerListener()); mElapsedRealtime = SystemClock.elapsedRealtime(); mOnStartCalled = false; mOnPauseCalled = false; mOnResetCalled = false; } public void testSetDurationMillisCallsListener() { long expectedDurationMillis = TimeUnit.SECONDS.toMillis(5); assertEquals(INITIAL_DURATION_MILLIS, mTimer.getDurationMillis()); mTimer.setDurationMillis(expectedDurationMillis); assertTrue(mOnResetCalled); assertFalse(mOnStartCalled); assertFalse(mOnPauseCalled); assertEquals(expectedDurationMillis, mTimer.getDurationMillis()); } public void testIsRunningNotStarted() { assertFalse(mTimer.isRunning()); assertListenersNotCalled(); } public void testIsRunningStartedAndRunning() { mTimer.start(); assertTrue(mTimer.isRunning()); } public void testIsRunningStartedAndPaused() { mTimer.start(); mElapsedRealtime += TimeUnit.SECONDS.toMillis(1); mTimer.pause(); assertFalse(mTimer.isRunning()); } public void testIsStartedNotStarted() { assertFalse(mTimer.isStarted()); assertListenersNotCalled(); } public void testIsStartedStartedAndRunning() { mTimer.start(); assertTrue(mTimer.isStarted()); } public void testIsStartedStartedAndPaused() { mTimer.start(); mElapsedRealtime += TimeUnit.SECONDS.toMillis(1); mTimer.pause(); assertTrue(mTimer.isStarted()); } public void testGetRemainingTimeMillisNotStarted() { assertEquals(INITIAL_DURATION_MILLIS, mTimer.getRemainingTimeMillis()); assertListenersNotCalled(); } public void testGetRemainingTimeMillisStartedAndRunning() { long elapsedTime = TimeUnit.SECONDS.toMillis(30); mTimer.start(); mElapsedRealtime += elapsedTime; assertEquals(INITIAL_DURATION_MILLIS - elapsedTime, mTimer.getRemainingTimeMillis()); } public void testGetRemainingTimeMillisStartedAndRunningNegative() { long elapsedTime = INITIAL_DURATION_MILLIS + TimeUnit.MINUTES.toMillis(30); mTimer.start(); mElapsedRealtime += elapsedTime; assertEquals(INITIAL_DURATION_MILLIS - elapsedTime, mTimer.getRemainingTimeMillis()); } public void testGetRemainingTimeMillisStartedAndPaused() { long elapsedTime = TimeUnit.SECONDS.toMillis(30); mTimer.start(); mElapsedRealtime += elapsedTime; mTimer.pause(); mElapsedRealtime += elapsedTime; assertEquals(INITIAL_DURATION_MILLIS - elapsedTime, mTimer.getRemainingTimeMillis()); } public void testStartCallsListener() { mTimer.start(); assertTrue(mTimer.isStarted()); assertTrue(mTimer.isRunning()); assertTrue(mOnStartCalled); assertFalse(mOnResetCalled); assertFalse(mOnPauseCalled); } public void testPauseCallsListener() { mTimer.start(); mOnStartCalled = false; mElapsedRealtime += TimeUnit.SECONDS.toMillis(5); mTimer.pause(); assertTrue(mTimer.isStarted()); assertFalse(mTimer.isRunning()); assertTrue(mOnPauseCalled); assertFalse(mOnStartCalled); assertFalse(mOnResetCalled); } public void testResetCallsListener() { mTimer.start(); mOnStartCalled = false; mElapsedRealtime += TimeUnit.SECONDS.toMillis(5); assertTrue(mTimer.isStarted()); assertTrue(mTimer.isRunning()); mTimer.reset(); assertFalse(mTimer.isStarted()); assertFalse(mTimer.isRunning()); assertTrue(mOnResetCalled); assertTrue(mOnPauseCalled); assertFalse(mOnStartCalled); } private void assertListenersNotCalled() { assertFalse(mOnStartCalled); assertFalse(mOnPauseCalled); assertFalse(mOnResetCalled); } }