package com.airbnb.lottie.samples

import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import androidx.fragment.app.Fragment
import androidx.fragment.app.testing.FragmentScenario
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.lifecycle.Lifecycle
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.LottieDrawable
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@LargeTest
class LottieAnimationViewTest {
    @Test
    fun inflateShouldNotCrash() {
        class TestFragment : Fragment(R.layout.lottie_activity_main)
        launchFragmentInContainer<TestFragment>()
        onView(withId(R.id.animation_view)).check(matches(isDisplayed()))
    }

    @Test
    fun testCanSetAnAnimationAndChangeItBack() {
        class TestFragment : Fragment(R.layout.lottie_activity_main)
        val scenario = launchFragmentInContainer<TestFragment>()
        scenario.moveToState(Lifecycle.State.RESUMED)
        scenario.onFragment { fragment ->
            val composition = LottieCompositionFactory.fromRawResSync(fragment.requireContext(), R.raw.hamburger_arrow).value!!
            val view = fragment.requireView().findViewById<LottieAnimationView>(R.id.animation_view)
            view.setComposition(composition)
            assertTrue(view.drawable is LottieDrawable)
            view.setImageDrawable(ColorDrawable(Color.GREEN))
            assertTrue(view.drawable is ColorDrawable)
            view.setComposition(composition)
            assertTrue(view.drawable is LottieDrawable)
        }
    }
}
