package net.shadowfacts.cacao.view 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.viewcontroller.ViewController import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.concurrent.CompletableFuture /** * @author shadowfacts */ class ViewClickTests { 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 testClickInsideRootView() { val mouse = CompletableFuture() view.addSubview(object: View(Rect(50.0, 50.0, 100.0, 100.0)) { override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { mouse.complete(point) return true } }) assertTrue(window.mouseClicked(Point(75.0, 75.0), MouseButton.LEFT)) assertEquals(Point(25.0, 25.0), mouse.getNow(null)) } @Test fun testClickOutsideRootView() { val clicked = CompletableFuture() view.addSubview(object: View(Rect(50.0, 50.0, 100.0, 100.0)) { override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { clicked.complete(true) return true } }) assertFalse(window.mouseClicked(Point(25.0, 25.0), MouseButton.LEFT)) assertFalse(clicked.getNow(false)) } @Test fun testClickInsideNestedView() { val mouse = CompletableFuture() val root = view.addSubview(View(Rect(50.0, 50.0, 100.0, 100.0))) root.addSubview(object: View(Rect(25.0, 25.0, 50.0, 50.0)) { override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { mouse.complete(point) return true } }) assertTrue(window.mouseClicked(Point(100.0, 100.0), MouseButton.LEFT)) assertEquals(Point(25.0, 25.0), mouse.getNow(null)) } @Test fun testClickOutsideNestedView() { val clicked = CompletableFuture() val root = view.addSubview(View(Rect(50.0, 50.0, 100.0, 100.0))) root.addSubview(object: View(Rect(25.0, 25.0, 50.0, 50.0)) { override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { clicked.complete(true) return true } }) assertFalse(window.mouseClicked(Point(0.0, 0.0), MouseButton.LEFT)) assertFalse(clicked.getNow(false)) } }