1c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton/*
2c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * Copyright (C) 2018 The Android Open Source Project
3c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton *
4c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * Licensed under the Apache License, Version 2.0 (the "License");
5c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * you may not use this file except in compliance with the License.
6c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * You may obtain a copy of the License at
7c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton *
8c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton *      http://www.apache.org/licenses/LICENSE-2.0
9c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton *
10c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * Unless required by applicable law or agreed to in writing, software
11c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * distributed under the License is distributed on an "AS IS" BASIS,
12c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * See the License for the specific language governing permissions and
14c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton * limitations under the License.
15c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton */
16c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
17c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonpackage androidx.lifecycle
18c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
19c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport androidx.arch.core.executor.testing.InstantTaskExecutorRule
20c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport com.google.common.truth.Truth.assertThat
21c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport io.reactivex.processors.PublishProcessor
22c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport io.reactivex.processors.ReplayProcessor
23c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport org.junit.Before
24c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport org.junit.Rule
25c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonimport org.junit.Test
26c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
27c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Whartonclass LiveDataReactiveStreamsTest {
28c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    @get:Rule val rule = InstantTaskExecutorRule()
29c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
30c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    private lateinit var lifecycleOwner: LifecycleOwner
31c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
32c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    @Before fun init() {
33c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        lifecycleOwner = object : LifecycleOwner {
34c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton            internal var registry = LifecycleRegistry(this)
35c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
36c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton            init {
37c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton                registry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
38c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton            }
39c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
40c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton            override fun getLifecycle(): Lifecycle {
41c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton                return registry
42c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton            }
43c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        }
44c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    }
45c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
46c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    @Test fun convertsFromPublisher() {
47c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        val processor = PublishProcessor.create<String>()
48c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        val liveData = processor.toLiveData()
49c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
50c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        val output = mutableListOf<String?>()
51c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        liveData.observe(lifecycleOwner, Observer { output.add(it) })
52c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
53c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        processor.onNext("foo")
54c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        processor.onNext("bar")
55c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        processor.onNext("baz")
56c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
57c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        assertThat(output).containsExactly("foo", "bar", "baz")
58c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    }
59c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
60c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    @Test fun convertsToPublisherWithSyncData() {
61c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        val liveData = MutableLiveData<String>()
62c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        liveData.value = "foo"
63c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
64c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        val outputProcessor = ReplayProcessor.create<String>()
65c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        liveData.toPublisher(lifecycleOwner).subscribe(outputProcessor)
66c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
67c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        liveData.value = "bar"
68c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        liveData.value = "baz"
69c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton
70c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton        assertThat(outputProcessor.values).asList().containsExactly("foo", "bar", "baz")
71c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton    }
72c57cff3120eb77417ceb2647b0345fbf505f9f7dJake Wharton}
73