Skip to content
This repository has been archived by the owner on May 18, 2021. It is now read-only.

Commit

Permalink
Memoryless livedata returned the current value as null. When we want …
Browse files Browse the repository at this point in the history
…to reach it, we always got null. That issue is fixed.
  • Loading branch information
İbrahim Yilmaz committed Nov 6, 2019
1 parent 832c5a4 commit 7069220
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.MD
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

## [Development]
- Fix: value get null issue fixed.

## Bursa(0.0.4)
- LiveDataAction implementation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,6 @@ internal class MemoryLessLiveData<T> : MutableLiveData<T>() {
singleDataEvent.value = SingleLiveDataEvent(observers, value)
}

override fun getValue(): T? = singleDataEvent.value?.peekContent()
}

14 changes: 9 additions & 5 deletions src/main/java/me/ibrahimyilmaz/arch_data/SingleLiveDataEvent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ internal class SingleLiveDataEvent<T>(observers: MutableCollection<Observer<in T

private val receiverObservers = ArrayList(observers)

fun getContentIfNotHandled(observer: Observer<in T>): T? =
receiverObservers.firstOrNull { it == observer }?.let {
receiverObservers.remove(it)
content
}
fun getContentIfNotHandled(observer: Observer<in T>): T? {
val observer = receiverObservers.firstOrNull { it == observer } ?: return null

receiverObservers.remove(observer)
return content
}


fun peekContent() = content
}


12 changes: 12 additions & 0 deletions src/test/java/me/ibrahimyilmaz/arch_data/MemoryLessLiveDataTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,16 @@ class MemoryLessLiveDataTest {
assertEquals(false, containsAnyObserverForLifeCycleOwner)
assertEquals(true, containsAnyObserverForLifeCycleOwner2)
}

@Test
fun should_set_the_value_of_the_memoryless_livedata() {
// GIVEN
val value = 3

// WHEN
liveData.setValue(value)

// THEN
assertEquals(liveData.value, value)
}
}
14 changes: 13 additions & 1 deletion src/test/java/me/ibrahimyilmaz/arch_data/PublishLiveDataTest.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package me.ibrahimyilmaz.arch_data

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import com.nhaarman.mockitokotlin2.*
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -144,4 +144,16 @@ class PublishLiveDataTest {
inOrderVerifier.verifyNoMoreInteractions()
}


@Test
fun should_set_the_value_of_the_publish_livedata() {
//GIVEN
val value = 3

//WHEN
liveData.setValue(value)

//THEN
assertEquals(liveData.value, value)
}
}
14 changes: 14 additions & 0 deletions src/test/java/me/ibrahimyilmaz/arch_data/ReplayLiveDataTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.Observer
import com.nhaarman.mockitokotlin2.inOrder
import com.nhaarman.mockitokotlin2.mock
import junit.framework.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
Expand Down Expand Up @@ -83,6 +84,7 @@ class ReplayLiveDataTest {

liveData.postValue(6)

//THEN
val inOrderVerifier = inOrder(observer)
inOrderVerifier.verify(observer).onChanged(1)
inOrderVerifier.verify(observer).onChanged(2)
Expand All @@ -96,4 +98,16 @@ class ReplayLiveDataTest {
inOrderVerifier.verifyNoMoreInteractions()
}

@Test
fun should_set_the_value_of_the_replay_livedata() {
//GIVEN
val value = 3

//WHEN
liveData.setValue(value)

//THEN
assertEquals(liveData.value, value)
}

}

0 comments on commit 7069220

Please sign in to comment.