diff --git a/karibu-testing-v10/kt10-tests/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenuTest.kt b/karibu-testing-v10/kt10-tests/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenuTest.kt index c692627f..46004642 100644 --- a/karibu-testing-v10/kt10-tests/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenuTest.kt +++ b/karibu-testing-v10/kt10-tests/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenuTest.kt @@ -366,6 +366,28 @@ internal fun DynaNodeGroup.contextMenuTestbatch() { expect(true) { called } } + test("setOpened(true) calls dynamic handler") { + var called = 0 + lateinit var cm: GridContextMenu + UI.getCurrent().grid { + cm = gridContextMenu { + item("click me") + setDynamicContentHandler { item -> + expect("foo") { item } + expect(0) { called } + called = 1 + true + } + } + } + cm.addGridContextMenuOpenedListener { e -> + expect(1) { called } + called = 2 + } + cm.setOpened(true, "foo") + expect(2) { called } + } + test("setOpened(false) fires GridContextMenuOpenedEvent") { var called = false lateinit var cm: GridContextMenu diff --git a/karibu-testing-v10/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenu.kt b/karibu-testing-v10/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenu.kt index 380be4ea..200962d6 100644 --- a/karibu-testing-v10/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenu.kt +++ b/karibu-testing-v10/src/main/kotlin/com/github/mvysny/kaributesting/v10/ContextMenu.kt @@ -19,7 +19,7 @@ import kotlin.test.fail */ public fun HasMenuItems._clickItemMatching(searchSpec: SearchSpec>) { // fires ContextMenuOpenedListener to simulate menu opening - (this as Component).element.setProperty("opened", true) + (this as? ContextMenu)?.setOpened(true) val parentMap: Map, Component> = (this as Component).getParentMap() val predicate = searchSpec.toPredicate() @@ -28,7 +28,7 @@ public fun HasMenuItems._clickItemMatching(searchSpec: SearchSpec GridContextMenu._clickItemMatching(searchSpec: SearchSpec, Component> = getParentMap() val predicate = searchSpec.toPredicate() val item: MenuItemBase<*, *, *> = parentMap.keys.firstOrNull(predicate) @@ -276,5 +268,14 @@ public fun GridContextMenu.setOpened(opened: Boolean, gridItem: T?, colum require(id.isNotBlank()) { "Column $column must have an ID assigned in order to be identifiable in the event object" } target.element.setProperty("_contextMenuTargetColumnId", id) } + if (opened) { + // notify the context menu dynamic item generator + dynamicContentHandler?.also { + val openMenu: Boolean = it.test(gridItem) + if (!openMenu) { + fail("The dynamic content handler returned false signalling the menu should not open:\n${toPrettyTree()}") + } + } + } element.setProperty("opened", opened) }