| /* | |
| * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. | |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. | |
| */ | |
| package test.concurrent | |
| import java.util.* | |
| import kotlin.concurrent.* | |
| import kotlin.test.* | |
| import java.util.concurrent.CountDownLatch | |
| import java.util.concurrent.TimeUnit | |
| import java.util.concurrent.TimeoutException | |
| class TimerTest { | |
| @Test fun scheduledTask() { | |
| val timer = Timer() | |
| val latch = CountDownLatch(10) | |
| val startedAt = System.nanoTime() | |
| lateinit var callbackTask: TimerTask | |
| val task = timer.scheduleAtFixedRate(100, 10) { | |
| callbackTask = this | |
| latch.countDown() | |
| if (latch.count == 0L) this.cancel() | |
| } | |
| if (!latch.await(2500, TimeUnit.MILLISECONDS)) throw TimeoutException() | |
| val elapsed = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startedAt) | |
| val expectedAtLeast = 180L | |
| assertTrue(elapsed > expectedAtLeast, "Expected elapsed ($elapsed ms) to be at least $expectedAtLeast ms") | |
| assertSame(task, callbackTask) | |
| } | |
| } |