All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonTest.kotlinx.css.TestGradient.kt Maven / Gradle / Ivy

package kotlinx.css

import kotlinx.css.properties.*
import kotlin.test.Test
import kotlin.test.assertEquals

class TestGradient {
    @Test
    fun testLinearGradient() {
        val gradient = linearGradient {
            colorStop(Color.white)
            colorStop(Color.red, 10.pct)
            colorStop(Color.green, 30.pct, 40.pct)
            colorStop(Color("#0000FF"))
        }

        assertLinearGradient("linear-gradient(white, red 10%, green 30% 40%, #0000FF)", gradient)
    }

    @Test
    fun testLinearGradientWithAngle() {
        val gradient = linearGradient(120.deg) {
            colorStop(Color.white)
            colorStop(Color.red, 10.pct)
            colorStop(Color.green, 30.pct, 40.pct)
            colorStop(Color("#0000FF"))
        }

        assertLinearGradient("linear-gradient(120deg, white, red 10%, green 30% 40%, #0000FF)", gradient)
    }

    @Test
    fun testLinearGradientWithSideOrCorner() {
        val gradient = fun(sideOrCorner: GradientSideOrCorner) = linearGradient(sideOrCorner) {
            colorStop(Color.white)
            colorStop(Color.black)
        }

        assertLinearGradient("linear-gradient(to left, white, black)", gradient(GradientSideOrCorner.ToLeft))
        assertLinearGradient("linear-gradient(to left top, white, black)", gradient(GradientSideOrCorner.ToLeftTop))
        assertLinearGradient(
            "linear-gradient(to left bottom, white, black)",
            gradient(GradientSideOrCorner.ToLeftBottom)
        )
        assertLinearGradient("linear-gradient(to right, white, black)", gradient(GradientSideOrCorner.ToRight))
        assertLinearGradient("linear-gradient(to right top, white, black)", gradient(GradientSideOrCorner.ToRightTop))
        assertLinearGradient(
            "linear-gradient(to right bottom, white, black)",
            gradient(GradientSideOrCorner.ToRightBottom)
        )
        assertLinearGradient("linear-gradient(to top, white, black)", gradient(GradientSideOrCorner.ToTop))
        assertLinearGradient("linear-gradient(to bottom, white, black)", gradient(GradientSideOrCorner.ToBottom))
    }

    @Test
    fun testRadialGradient() {
        assertRadialGradient("radial-gradient(yellow, green)", radialGradient {
            colorStop(Color.yellow)
            colorStop(Color.green)
        })
        assertRadialGradient("radial-gradient(ellipse at center, yellow 2%, green 100%)", radialGradient {
            ellipse()
            at(RelativePosition.center)
            colorStop(Color.yellow, 2.pct)
            colorStop(Color.green, 100.pct)
        })
        assertRadialGradient("radial-gradient(circle farthest-corner at 50% 50%, yellow, green)", radialGradient {
            circle(RadialGradientExtent.farthestCorner)
            at(RelativePosition.offset(xOffset = 50.pct, yOffset = 50.pct))
            colorStop(Color.yellow)
            colorStop(Color.green)
        })
        assertRadialGradient("radial-gradient(circle, yellow, green)", radialGradient {
            circle()
            colorStop(Color.yellow)
            colorStop(Color.green)
        })

        assertRadialGradient(
            "radial-gradient(circle farthest-side at left bottom, red, yellow 50px, green)",
            radialGradient {
                circle(RadialGradientExtent.farthestSide)
                at(RelativePosition.leftBottom)
                colorStop(Color.red)
                colorStop(Color.yellow, 50.px)
                colorStop(Color.green)
            })

        assertRadialGradient("radial-gradient(circle closest-side at 20px 30px, red, yellow, green)", radialGradient {
            circle(RadialGradientExtent.closestSide)
            at(RelativePosition.offset(20.px, 30.px))
            colorStop(Color.red)
            colorStop(Color.yellow)
            colorStop(Color.green)
        })
        assertRadialGradient("radial-gradient(ellipse 20px 30px at 20px 30px, red, yellow, green)", radialGradient {
            ellipse(20.px, 30.px)
            at(RelativePosition.offset(20.px, 30.px))
            colorStop(Color.red)
            colorStop(Color.yellow)
            colorStop(Color.green)
        })
    }

    @Test
    fun testRepeatingLinearGradient() {
        assertRepeatingLinearGradient(
            "repeating-linear-gradient(45deg, blue, red)",
            linearGradient(45.deg, repeat = true) {
                colorStop(Color.blue)
                colorStop(Color.red)
            }
        )
        assertRepeatingLinearGradient(
            "repeating-linear-gradient(to left top, blue, red)",
            linearGradient(GradientSideOrCorner.ToLeftTop, repeat = true) {
                colorStop(Color.blue)
                colorStop(Color.red)
            }
        )
        assertRepeatingLinearGradient(
            "repeating-linear-gradient(0deg, blue, green 40%, red)",
            linearGradient(0.deg, repeat = true) {
                colorStop(Color.blue)
                colorStop(Color.green, start = 40.pct)
                colorStop(Color.red)
            }
        )
    }

    @Test
    fun testRepeatingRadialGradient() {
        assertRepeatingRadialGradient(
            "repeating-radial-gradient(black, black 5px, white 5px, white 10px)",
            radialGradient(repeat = true) {
                colorStop(Color.black)
                colorStop(Color.black, 5.px)
                colorStop(Color.white, 5.px)
                colorStop(Color.white, 10.px)
            }
        )
        assertRepeatingRadialGradient(
            "repeating-radial-gradient(ellipse farthest-corner, red, black 5%, blue 5%, green 10%)",
            radialGradient(repeat = true) {
                ellipse(RadialGradientExtent.farthestCorner)
                colorStop(Color.red)
                colorStop(Color.black, 5.pct)
                colorStop(Color.blue, 5.pct)
                colorStop(Color.green, 10.pct)
            }
        )
    }

    private fun assertLinearGradient(expected: String, gradient: Image) {
        assertEquals(expected, gradient.value, "Linear gradient is built incorrectly")
    }

    private fun assertRepeatingLinearGradient(expected: String, gradient: Image) {
        assertEquals(expected, gradient.value, "Repeating linear gradient is built incorrectly")
    }

    private fun assertRadialGradient(expected: String, gradient: Image) {
        assertEquals(expected, gradient.value, "Radial gradient is built incorrectly")
    }

    private fun assertRepeatingRadialGradient(expected: String, gradient: Image) {
        assertEquals(expected, gradient.value, "Linear radial gradient is built incorrectly")
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy