From 0a7a168e0dfff19a683a5b157510aa78db30c8c4 Mon Sep 17 00:00:00 2001 From: James Strachan Date: Thu, 5 Apr 2012 08:44:01 +0100 Subject: [PATCH] provided a helper method to create a new TimerTask from a function block and added a simple test case for using timers --- .../stdlib/src/kotlin/concurrent/Timer.kt | 14 +++++----- libraries/stdlib/test/concurrent/TimerTest.kt | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 libraries/stdlib/test/concurrent/TimerTest.kt diff --git a/libraries/stdlib/src/kotlin/concurrent/Timer.kt b/libraries/stdlib/src/kotlin/concurrent/Timer.kt index 6df1e340b9d..4f316d6415b 100644 --- a/libraries/stdlib/src/kotlin/concurrent/Timer.kt +++ b/libraries/stdlib/src/kotlin/concurrent/Timer.kt @@ -5,37 +5,37 @@ import java.util.TimerTask import java.util.Date public fun Timer.schedule(delay: Long, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) schedule(task, delay) return task } public fun Timer.schedule(time: Date, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) schedule(task, time) return task } public fun Timer.schedule(delay: Long, period: Long, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) schedule(task, delay, period) return task } public fun Timer.schedule(time: Date, period: Long, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) schedule(task, time, period) return task } public fun Timer.scheduleAtFixedRate(delay: Long, period: Long, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) scheduleAtFixedRate(task, delay, period) return task } public fun Timer.scheduleAtFixedRate(time: Date, period: Long, action: TimerTask.()->Unit) : TimerTask { - val task = createTask(action) + val task = timerTask(action) scheduleAtFixedRate(task, time, period) return task } @@ -64,7 +64,7 @@ public fun fixedRateTimer(name: String? = null, daemon: Boolean = false, startAt return timer } -private fun createTask(action: TimerTask.()->Unit) : TimerTask = object: TimerTask() { +public fun timerTask(action: TimerTask.()->Unit) : TimerTask = object: TimerTask() { public override fun run() { action() } diff --git a/libraries/stdlib/test/concurrent/TimerTest.kt b/libraries/stdlib/test/concurrent/TimerTest.kt new file mode 100644 index 00000000000..50a40cb7bb4 --- /dev/null +++ b/libraries/stdlib/test/concurrent/TimerTest.kt @@ -0,0 +1,26 @@ +package concurrent + +import kotlin.concurrent.* +import kotlin.test.* + +import java.util.concurrent.atomic.AtomicInteger +import java.util.Timer + +import org.junit.Test as test + +class TimerTest { + test fun scheduledTask() { + val counter = AtomicInteger(0) + val timer = Timer() + val task = timer.scheduleAtFixedRate(1000, 1000) { + val current = counter.incrementAndGet() + println("Tiemer fired at $current") + } + + Thread.sleep(5000) + task.cancel() + + val value = counter.get() + assertTrue(value > 2, "currnet counter is $value") + } +} \ No newline at end of file