@Test
	public void testKeyboardTabNavigation() throws Exception {
		// 
		// Test forward and backward from middle, with no hidden programs
		// 

		//@formatter:off
		programNames = new String[] { 
				"notepad", "login", "tms",       // visible 
				"taskman", "TestGhidraSearches"  // hidden
		};
		//@formatter:on
		openPrograms(programNames);

		// the newly selected program should be the one after 'login'
		selectTab(programs[1]);
		performNextAction();
		assertProgramSelected(programs[2]);

		// the newly selected program should be back to 'login'
		performPreviousAction();
		assertProgramSelected(programs[1]);

		// 
		// test forward and backward from each end, with hidden programs
		//

		// by trial-and-error, we know that 'tms' is the last visible program tab 
		// after resizing
		setFrameSize(550, 500);
		assertShowing(programs[2]);
		assertHidden(programs[3]);

		// select the last visible tab
		selectTab(programs[2]);
		performNextAction();

		// make sure the panel is showing
		Window listWindow = getListWindow();
		assertTrue(listWindow.isShowing());
		listWindow.setVisible(false);

		// select the first visible tab and go backwards to trigger the list
		selectTab(programs[0]);
		performPreviousAction();
		listWindow = getListWindow();
		assertTrue(listWindow.isShowing());
	}
Tests for the plugin that manages the tab for multiple open programs.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/progmgr/MultiTabPluginTest.java