Skip to content

Instantly share code, notes, and snippets.

View KwabenBerko's full-sized avatar

Kwabena Bio Berko KwabenBerko

View GitHub Profile
@KwabenBerko
KwabenBerko / JobStatusComponentTest.kt
Created July 18, 2023 22:37
Job Status Component Test
@OptIn(ExperimentalCoroutinesApi::class)
class JobStatusComponentTest {
@Test
fun `should call refresh function only once`() = runTest {
val jobs = mutableListOf<Job>()
val component = JobStatusComponent(scope = this)
repeat(10){
jobs += launch { component.refresh() }
}
@KwabenBerko
KwabenBerko / JobStatusComponent.kt
Created July 18, 2023 22:35
Job Status Component
class JobStatusComponent(private val scope: CoroutineScope): Component {
var job: Job? = null
var refreshesCount: Int = 0
private set
override suspend fun refresh() {
if (job?.isActive == false){
job = scope.launch {
try {
delay(1L)
@KwabenBerko
KwabenBerko / MutexEnabledComponentTest.kt
Created July 4, 2023 09:07
Mutex Enabled Component Test
@OptIn(ExperimentalCoroutinesApi::class)
class MutexEnabledComponentTest {
@Test
fun `should call refresh function only once`() = runTest {
val jobs = mutableListOf<Job>()
val component = MutexEnabledComponent()
repeat(10){
jobs += launch { component.refresh() }
}
@KwabenBerko
KwabenBerko / PlainComponentTest.kt
Created July 4, 2023 09:06
Plain Component Test
@OptIn(ExperimentalCoroutinesApi::class)
class PlainComponentTest {
@Test
fun `should call refresh function multiple times`() = runTest {
val jobs = mutableListOf<Job>()
val component = PlainComponent()
repeat(10){
jobs += launch { component.refresh() }
}
@KwabenBerko
KwabenBerko / MutexEnabledComponent.kt
Created July 4, 2023 09:05
Mutex Enabled Component
class MutexEnabledComponent: Component {
private val mutex = Mutex()
var refreshesCount: Int = 0
private set
override suspend fun refresh() {
if (!mutex.isLocked){
mutex.withLock {
delay(1L) // Delay to simulate a long running operation
refreshesCount++
@KwabenBerko
KwabenBerko / PlainComponent.kt
Created July 4, 2023 09:04
Plain Component
class PlainComponent: Component {
var refreshesCount: Int = 0
private set
override suspend fun refresh(){
delay(1L) // Delay to simulate a long running operation
refreshesCount++
}
}
@KwabenBerko
KwabenBerko / Component.kt
Created July 4, 2023 09:03
Component Interface
interface Component {
suspend fun refresh()
}
class FlowViewModelTest {
@get:Rule
val rule = MainCoroutineRule()
private companion object {
val CHARACTERS = listOf('A', 'B', 'C')
}
private val repository = mock<CharacterRepository>().apply {
class MainCoroutineRule : TestWatcher() {
private val testDispatcher = TestCoroutineDispatcher()
override fun starting(description: Description?) {
Dispatchers.setMain(testDispatcher)
}
fun setup(setupBody: () -> Unit){
testDispatcher.pauseDispatcher()
@KwabenBerko
KwabenBerko / ConverterScreen.kt
Created August 11, 2021 18:19
Snackbars In Compose
@Composable
fun ConverterScreen(
navController: NavController,
viewModel: ConverterViewModel
) {
val scaffoldState = rememberScaffoldState()
val viewState by viewModel.viewState.collectAsState()
val viewEffects by viewModel.viewEffects.collectAsState(initial = null)