@Test
	public void testCalllbackRemovesItems_OtherItemSelected() {
		/*
		 	Select multiple items.
		 	Have the first callback remove one of the remaining *unselected* items.
		 	The removed item should not itself get a callback.
		 */

		int rowCount = getRowCount();
		List<TestStubRowObject> selected = selectRows(0, 2);
		List<TestStubRowObject> toRemove = new ArrayList<>(toRowObjects(1, 3));

		List<TestStubRowObject> removedButNotExecuted = new ArrayList<>();
		testDecision = r -> {

			// remove the non-selected items
			for (TestStubRowObject other : toRemove) {
				removedButNotExecuted.add(other);
				dialog.remove(other);
			}
			toRemove.clear(); // only do this one time

			return true; // remove 'r'
		};

		pressExecuteButton();
		waitForDialog();
		assertEquals("Did not remove all items", 2, removedButNotExecuted.size());

		assertNotInDialog(selected);
		assertNotInDialog(removedButNotExecuted);
		assertRowCount(rowCount - (selected.size() + removedButNotExecuted.size()));
		assertNotExecuted(removedButNotExecuted);
	}
Interface for tests to signal what is expected of the executor
Ghidra/Features/Base/src/test.slow/java/ghidra/app/tablechooser/TableChooserDialogTest.java