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.geometry.Size 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.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.concurrent.CompletableFuture /** * @author shadowfacts */ class ButtonClickTests { lateinit var screen: CacaoScreen lateinit var window: Window lateinit var viewController: ViewController val view: View get() = viewController.view @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)) } @Test fun testClickInsideButton() { val clicked = CompletableFuture() val content = View().apply { intrinsicContentSize = Size(25.0, 25.0) } val button = view.addSubview(Button(content).apply { handler = { clicked.complete(true) } }) window.solver.dsl { button.leftAnchor equalTo 0 button.topAnchor equalTo 0 } window.layout() assertTrue(window.mouseClicked(Point(5.0, 5.0), MouseButton.LEFT)) assertTrue(clicked.getNow(false)) } @Test fun testClickOutsideButton() { val clicked = CompletableFuture() val content = View().apply { intrinsicContentSize = Size(25.0, 25.0) } val button = view.addSubview(Button(content).apply { handler = { clicked.complete(true) } }) window.solver.dsl { button.leftAnchor equalTo 0 button.topAnchor equalTo 0 } window.layout() assertFalse(window.mouseClicked(Point(50.0, 50.0), MouseButton.LEFT)) assertFalse(clicked.getNow(false)) } }