diff options
Diffstat (limited to 'app/src/test/kotlin/com/pitchedapps/frost/rx')
-rw-r--r-- | app/src/test/kotlin/com/pitchedapps/frost/rx/ResettableFlyweightTest.kt | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/src/test/kotlin/com/pitchedapps/frost/rx/ResettableFlyweightTest.kt b/app/src/test/kotlin/com/pitchedapps/frost/rx/ResettableFlyweightTest.kt new file mode 100644 index 00000000..ec92b059 --- /dev/null +++ b/app/src/test/kotlin/com/pitchedapps/frost/rx/ResettableFlyweightTest.kt @@ -0,0 +1,61 @@ +package com.pitchedapps.frost.rx + +import org.junit.Before +import org.junit.Test +import java.util.concurrent.CountDownLatch +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals + +/** + * Created by Allan Wang on 07/01/18. + */ +private inline val threadId + get() = Thread.currentThread().id + +class ResettableFlyweightTest { + + class IntFlyweight : RxFlyweight<Int, Long, Long>() { + override fun call(input: Int): Long { + println("Call for $input on thread $threadId") + Thread.sleep(20) + return System.currentTimeMillis() + } + + override fun validate(input: Int, cond: Long) = System.currentTimeMillis() - cond < 500 + + override fun cache(input: Int): Long = System.currentTimeMillis() + } + + private lateinit var flyweight: IntFlyweight + private lateinit var latch: CountDownLatch + + @Before + fun init() { + flyweight = IntFlyweight() + latch = CountDownLatch(1) + } + + @Test + fun testCache() { + flyweight(1).subscribe { i -> + flyweight(1).subscribe { j -> + assertEquals(i, j, "Did not use cache during calls") + latch.countDown() + } + } + latch.await() + } + + @Test + fun testNoCache() { + flyweight(1).subscribe { i -> + flyweight(2).subscribe { j -> + assertNotEquals(i, j, "Should not use cache for calls with different keys") + latch.countDown() + } + } + latch.await() + } + + +}
\ No newline at end of file |