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