@Test
	public void testProcessingOnLocationChanged() throws Exception {
		openProgram("notepad");

		// get the list hiding inside of the component provider
		JList<?> list = (JList<?>) getInstanceField("contentList", componentProvider);

		// sanity check
		assertEquals("The component provider has data when it is not visible.", 0,
			list.getModel().getSize());

		// show the plugin and make sure it is visible before we continue
		tool.showComponentProvider(componentProvider, true);
		waitForSwing();

		ListModel<?> modelOne = list.getModel();

		// now the list should have data, as it will populate itself off of the
		// current program location of the plugin
		assertTrue("The component provider does not have data when it " + "should.",
			(modelOne.getSize() != 0));

		// make sure we process the event in order to show the user the
		// preview
		CodeBrowserPlugin cbPlugin = getPlugin(tool, CodeBrowserPlugin.class);

		// scroll the display and force a new selection
		pageDown(cbPlugin.getFieldPanel());
		simulateButtonPress(cbPlugin);
		waitForSwing();

		// get the data
		ListModel<?> modelTwo = list.getModel();

		boolean sameData = compareListData(modelOne, modelTwo);
		assertTrue("The contents of the two lists are the same when they " + "should not be.",
			!sameData);

		// make sure no work is done when we are not visible
		tool.showComponentProvider(componentProvider, false);
		waitForSwing();

		assertEquals("The component provider has data when it is not visible.", 0,
			list.getModel().getSize());

		// show the plugin so that it will get the program location change
		// data
		tool.showComponentProvider(componentProvider, true);
		waitForSwing();

		// test that sending a bad address will not return any results or
		// throw any exceptions
		Memory memory = program.getMemory();
		MemoryBlock textBlock = memory.getBlock(".text");
		Address endAddress = textBlock.getEnd();

		// creating a program location based upon the end address should result
		// in only one item in the disassembled list
		ProgramLocation location = new ProgramLocation(program, endAddress);

		// call the locationChanged() method
		invokeInstanceMethod("locationChanged", plugin, new Class[] { ProgramLocation.class },
			new Object[] { location });

		assertTrue(
			"The plugin's display list has more than 1 element when " +
				"at the end address of a memory block.  List size: " + list.getModel().getSize(),
			(list.getModel().getSize() == 1));

		Listing listing = program.getListing();
		CodeUnit codeUnit = listing.getCodeUnitAt(endAddress);
		Address invalidAddress = endAddress.addNoWrap(codeUnit.getLength());
		ProgramLocation newLocation = new ProgramLocation(program, invalidAddress);

		invokeInstanceMethod("locationChanged", plugin, new Class[] { ProgramLocation.class },
			new Object[] { newLocation });

		assertEquals("The plugin's display list has data when there is an " +
			"invalid address at the current program location.", list.getModel().getSize(), 0);
	}
Tests the plugins response to
{@link ghidra.app.events.ProgramLocationPluginEvent}s.  This plugin is
driven off of these events.

@throws Exception If there is a problem opening the program.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/disassembler/DisassembledViewPluginTest.java