Skip to content

Commit

Permalink
autogenerated MainFragmentTest
Browse files Browse the repository at this point in the history
  • Loading branch information
NickZt committed Mar 9, 2021
1 parent 0b7cabd commit 4d19c7b
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 82 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ua.zt.mezon.graphomania.fsmandstrategydemo.ui.main

import junit.framework.TestCase

class MainFragmentTest : TestCase() {

fun testRender() {}

fun testShowInitState() {}

fun testShowLoadProgress() {}

fun testShowError() {}

fun testShowEmptyState() {}

fun testShowList() {}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ua.zt.mezon.graphomania.fsmandstrategydemo.datasources

interface Repository {
interface MainFragmentRepository {
fun iniLoad()

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package ua.zt.mezon.graphomania.fsmandstrategydemo.datasources

import android.content.Context

class MockDataModel(context: Context) : Repository {
class MockDataRepository(context: Context) : MainFragmentRepository {
override fun iniLoad() {
percent = 0;
percent = 0
errorState = ""
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ class MainFragment : Fragment(), MainFragmentViewStatesRenderContract {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View {
viewModel = ViewModelProvider(this).get(MainFragmentViewModel::class.java)
viewModel.mViewState.observe(viewLifecycleOwner, Observer {
viewModel.mViewState.observe(viewLifecycleOwner, {
it?.let { render(it) }
})
viewModel.initialize(this)
viewModel.startLoadData()
return inflater.inflate(R.layout.main_fragment, container, false)
}

override fun showInitState() {
override fun showIni() {
SimpleLog.d("showInitState() called")
greetingTextView.visibility = View.VISIBLE
greetingTextView.text = "Prepare to download"
Expand All @@ -41,31 +41,31 @@ class MainFragment : Fragment(), MainFragmentViewStatesRenderContract {
progressBar.progress = 0
}

override fun showLoadProgress(percent: Int) {
override fun showLoadCounterPercentData(percent: Int) {
SimpleLog.d("showLoadProgress() called with: percent = $percent")
greetingTextView.visibility = View.GONE;
greetingTextView.visibility = View.GONE
progressBar.progress = percent
progressBar.visibility = View.VISIBLE
errorTextView.visibility = View.GONE
}

override fun showError(error: String?) {
override fun showLoadError(error: String?) {
SimpleLog.d("showError() called with: error = $error")
greetingTextView.visibility = View.GONE;
greetingTextView.visibility = View.GONE
progressBar.visibility = View.GONE
errorTextView.visibility = View.VISIBLE
errorTextView.text = error
}

override fun showEmptyState() {
override fun showListEmpty() {
SimpleLog.d("showEmptyState() called")
greetingTextView.visibility = View.VISIBLE
greetingTextView.text = "No Data"
progressBar.visibility = View.GONE
errorTextView.visibility = View.GONE
}

override fun showList(listItems: ArrayList<ItemData>) {
override fun showListShow(listItems: ArrayList<ItemData>) {
SimpleLog.d("showList() called with: listItems = $listItems")
var tmpstr = "\n"
for (item in listItems) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ package ua.zt.mezon.graphomania.fsmandstrategydemo.ui.main
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.ItemData

sealed class MainFragmentUiStatesModel {
object Initial : MainFragmentUiStatesModel()
object IniState : MainFragmentUiStatesModel()
data class LoadCounterPercentDataState(val percent: Int) : MainFragmentUiStatesModel()
data class LoadErrorState(val errorCode: String) : MainFragmentUiStatesModel()
object ListEmptyState : MainFragmentUiStatesModel()
data class ListShowState(val listItem: ArrayList<ItemData>) : MainFragmentUiStatesModel()
// object NoInDataStateState : MainFragmentUiStates()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,22 @@ package ua.zt.mezon.graphomania.fsmandstrategydemo.ui.main

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.Repository
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.MockDataModel
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.ItemData
import kotlin.random.Random
import kotlin.random.nextLong
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.MainFragmentRepository
import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.MockDataRepository

class MainFragmentViewModel : ViewModel() {
fun initialize(context: MainFragment) {
mViewState.value = MainFragmentUiStatesModel.Initial;
mRepository = MockDataModel(context.requireContext())
mRepository.iniLoad()
mViewState.value = MainFragmentUiStatesModel.IniState
mGateway = MockDataRepository(context.requireContext())
mGateway.iniLoad()
}

val mViewState: MutableLiveData<MainFragmentUiStatesModel> = MutableLiveData()

lateinit var mRepository: Repository
lateinit var mGateway: MainFragmentRepository


fun startLoadData() {
viewModelScope.launch {
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(10)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(30)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(42)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(50)
delay()

if (Random.nextBoolean()) {
mViewState.value = MainFragmentUiStatesModel.LoadErrorState("The hurricane cut the connection")
return@launch
}

mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(70)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(90)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(94)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(99)
delay()
mViewState.value = MainFragmentUiStatesModel.LoadCounterPercentDataState(100)
if (Random.nextBoolean()) {
mViewState.value = MainFragmentUiStatesModel.ListEmptyState
return@launch
}
mViewState.value = MainFragmentUiStatesModel.ListShowState(arrayListOf(ItemData("One"), ItemData("Two")))
}
}

private suspend fun delay() {
kotlinx.coroutines.delay(Random.nextLong(500L..1200L))
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,11 @@ import ua.zt.mezon.graphomania.fsmandstrategydemo.datasources.ItemData

interface MainFragmentViewStatesRenderContract {
fun render(viewState: MainFragmentUiStatesModel) {
when (viewState) {
is MainFragmentUiStatesModel.Initial -> {
showInitState()
}
is MainFragmentUiStatesModel.LoadCounterPercentDataState -> {
showLoadProgress(viewState.percent)
}
is MainFragmentUiStatesModel.LoadErrorState -> {
showError(viewState.errorCode)
}
is MainFragmentUiStatesModel.ListEmptyState -> {
showEmptyState()
}
is MainFragmentUiStatesModel.ListShowState -> {
showList(viewState.listItem)
}
}
}

fun showInitState()
fun showLoadProgress(percent: Int)
fun showError(error: String?)
fun showEmptyState()
fun showList(listItems: ArrayList<ItemData>)
fun showIni()
fun showLoadCounterPercentData(percent: Int)
fun showLoadError(error: String?)
fun showListEmpty()
fun showListShow(listItems: ArrayList<ItemData>)
}

0 comments on commit 4d19c7b

Please sign in to comment.