File: TimerTest.kt

package info (click to toggle)
kotlin 1.3.31%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 109,908 kB
  • sloc: java: 454,756; xml: 18,599; javascript: 10,452; sh: 513; python: 97; makefile: 69; ansic: 4
file content (36 lines) | stat: -rw-r--r-- 1,125 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * Copyright 2010-2018 JetBrains s.r.o. 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(1500, TimeUnit.MILLISECONDS)) throw TimeoutException()
        val elapsed = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startedAt)

        val expectedRange = 100L..500L
        assertTrue(elapsed in expectedRange, "Expected elapsed ($elapsed ms) to fit in range $expectedRange")
        assertSame(task, callbackTask)
    }
}