/* * Copyright 2002-2006 the original author or authors. * * 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 org.springframework.scheduling.timer; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import junit.framework.TestCase; import org.springframework.scheduling.TestMethodInvokingTask; /** * @author Juergen Hoeller * @since 20.02.2004 */ public class TimerSupportTests extends TestCase { public void testTimerFactoryBean() throws Exception { final TestTimerTask timerTask0 = new TestTimerTask(); TestMethodInvokingTask task1 = new TestMethodInvokingTask(); MethodInvokingTimerTaskFactoryBean mittfb = new MethodInvokingTimerTaskFactoryBean(); mittfb.setTargetObject(task1); mittfb.setTargetMethod("doSomething"); mittfb.afterPropertiesSet(); final TimerTask timerTask1 = (TimerTask) mittfb.getObject(); final TestRunnable timerTask2 = new TestRunnable(); ScheduledTimerTask[] tasks = new ScheduledTimerTask[3]; tasks[0] = new ScheduledTimerTask(timerTask0, 0, 10, false); tasks[1] = new ScheduledTimerTask(timerTask1, 10, 20, true); tasks[2] = new ScheduledTimerTask(timerTask2, 20); final List success = new ArrayList(3); final Timer timer = new Timer(true) { public void schedule(TimerTask task, long delay, long period) { if (task == timerTask0 && delay == 0 && period == 10) { success.add(Boolean.TRUE); } } public void scheduleAtFixedRate(TimerTask task, long delay, long period) { if (task == timerTask1 && delay == 10 && period == 20) { success.add(Boolean.TRUE); } } public void schedule(TimerTask task, long delay) { if (task instanceof DelegatingTimerTask && delay == 20) { success.add(Boolean.TRUE); } } public void cancel() { success.add(Boolean.TRUE); } }; TimerFactoryBean timerFactoryBean = new TimerFactoryBean() { protected Timer createTimer(String name, boolean daemon) { return timer; } }; try { timerFactoryBean.setScheduledTimerTasks(tasks); timerFactoryBean.afterPropertiesSet(); assertTrue(timerFactoryBean.getObject() instanceof Timer); timerTask0.run(); timerTask1.run(); timerTask2.run(); } finally { timerFactoryBean.destroy(); } assertTrue("Correct Timer invocations", success.size() == 4); assertTrue("TimerTask0 works", timerTask0.counter == 1); assertTrue("TimerTask1 works", task1.counter == 1); assertTrue("TimerTask2 works", timerTask2.counter == 1); } public void testPlainTimerFactoryBean() { TimerFactoryBean tfb = new TimerFactoryBean(); tfb.afterPropertiesSet(); tfb.destroy(); } private static class TestTimerTask extends TimerTask { private int counter = 0; public void run() { counter++; } } private static class TestRunnable implements Runnable { private int counter = 0; public void run() { counter++; } } }