/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

package mozilla.components.concept.toolbar

import android.widget.LinearLayout
import mozilla.components.support.base.android.Padding
import mozilla.components.support.test.mock
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment

@RunWith(RobolectricTestRunner::class)
class ActionButtonTest {

    @Test
    fun `set padding`() {
        var button = Toolbar.ActionButton(mock(), "imageResource") {}
        val linearLayout = LinearLayout(RuntimeEnvironment.application)
        var view = button.createView(linearLayout)

        assertEquals(view.paddingLeft, 0)
        assertEquals(view.paddingTop, 0)
        assertEquals(view.paddingRight, 0)
        assertEquals(view.paddingBottom, 0)

        button = Toolbar.ActionButton(
            mock(), "imageResource",
            padding = Padding(16, 20, 24, 28)
        ) {}

        view = button.createView(linearLayout)
        view.paddingLeft
        assertEquals(view.paddingLeft, 16)
        assertEquals(view.paddingTop, 20)
        assertEquals(view.paddingRight, 24)
        assertEquals(view.paddingBottom, 28)
    }

    @Test
    fun `constructor with drawables`() {
        val visibilityListener = { false }
        val button = Toolbar.ActionButton(mock(), "image", visibilityListener, 0, null) { }
        assertNotNull(button.imageDrawable)
        assertEquals("image", button.contentDescription)
        assertEquals(visibilityListener, button.visible)
        assertEquals(Unit, button.bind(mock()))

        val buttonVisibility = Toolbar.ActionButton(mock(), "image") {}
        assertEquals(true, buttonVisibility.visible())
    }
}