package net.shadowfacts.cacao.view.button import net.shadowfacts.cacao.CacaoScreen import net.shadowfacts.cacao.Window import net.shadowfacts.cacao.geometry.Point import net.shadowfacts.cacao.geometry.Rect import net.shadowfacts.cacao.util.MouseButton import net.shadowfacts.cacao.view.View import net.shadowfacts.cacao.viewcontroller.ViewController import net.shadowfacts.kiwidsl.dsl import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.concurrent.CompletableFuture /** * @author shadowfacts */ class EnumButtonTests { companion object { @BeforeAll @JvmStatic fun setupAll() { System.setProperty("cacao.drawing.disabled", "true") } } enum class MyEnum { ONE, TWO, THREE } lateinit var screen: CacaoScreen lateinit var window: Window lateinit var viewController: ViewController lateinit var button: EnumButton @BeforeEach fun setup() { screen = CacaoScreen() viewController = object: ViewController() { override fun loadView() { view = View(Rect(0.0, 0.0, 1000.0, 1000.0)) } } window = screen.addWindow(Window(viewController)) button = viewController.view.addSubview(EnumButton(MyEnum.ONE, MyEnum::name)) window.solver.dsl { button.leftAnchor equalTo 0 button.topAnchor equalTo 0 button.widthAnchor equalTo 25 button.heightAnchor equalTo 25 } window.layout() } @Test fun testHandlerCalled() { val called = CompletableFuture() button.handler = { called.complete(true) } assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertTrue(called.getNow(false)) assertEquals(MyEnum.TWO, button.value) } @Test fun testCyclesValues() { assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertEquals(MyEnum.TWO, button.value) assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertEquals(MyEnum.THREE, button.value) assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertEquals(MyEnum.ONE, button.value) } @Test fun testCyclesValuesBackwards() { assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertEquals(MyEnum.TWO, button.value) assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.RIGHT)) assertEquals(MyEnum.ONE, button.value) } @Test fun testMiddleClickDoesNotChangeValue() { assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.MIDDLE)) assertEquals(MyEnum.ONE, button.value) } }