@Test
	public void testIncludeAlignmentBytes() throws Exception {
		/***************************************************************************/
		/* TEST 6 - test include alignment nulls with various sized alignments */
		/***********************************************************************/
		final AddressSet set = new AddressSet();
		set.addRange(addr(0x404328), addr(0x404375));

		// select the address set
		tool.firePluginEvent(
			new ProgramSelectionPluginEvent("Test", new ProgramSelection(set), program));

		waitForSwing();

		dialog = getDialog();
		Container container = dialog.getComponent();

		// check to make sure the search selection button is checked and enabled
		JRadioButton rb = (JRadioButton) findButton(container, "Search Selection");
		assertTrue(rb.isSelected());
		assertTrue(rb.isEnabled());

		setMinStringFieldValue(dialog, 2);

		StringTableProvider provider = performSearch();
		StringTableModel model = (StringTableModel) getInstanceField("stringModel", provider);
		GhidraTable table = (GhidraTable) getInstanceField("table", provider);

		toggleDefinedStateButtons(provider, false, true, false, false);
		waitForTableModel(model);

		// verify that rows  points to the correct address
		assertEquals("00404328", getModelValue(model, 0, addressColumnIndex).toString());
		assertEquals("00404350", getModelValue(model, 1, addressColumnIndex).toString());
		assertEquals("00404354", getModelValue(model, 2, addressColumnIndex).toString());
		assertEquals("00404370", getModelValue(model, 3, addressColumnIndex).toString());
		selectRows(table, addr(0x404328), addr(0x404350), addr(0x404354), addr(0x404370));

		// select the Include Alignment Nulls option
		JCheckBox includeAlignNullsCB =
			(JCheckBox) findButton(provider.getComponent(), "Include Alignment Nulls");
		assertTrue(includeAlignNullsCB.isEnabled());
		assertTrue(!includeAlignNullsCB.isSelected());
		includeAlignNullsCB.setSelected(true);

		setAlignmentValue(provider, 4);

		DockingAction makeStringAction =
			(DockingAction) getInstanceField("makeStringAction", provider);

		waitForTableModel(model);

		performAction(makeStringAction, model);

		//Test that the correct amount of bytes get sucked up with the alignment option
		Data d = listing.getDataAt(addr(0x404370));
		assertEquals(4, d.getLength());

		d = listing.getDataAt(addr(0x404328));
		assertEquals(40, d.getLength());

		d = listing.getDataAt(addr(0x404350));
		assertEquals(4, d.getLength());

		d = listing.getDataAt(addr(0x404354));
		assertEquals(28, d.getLength());

	}
****************************************
		// ********* TEST MAKE STRING ***************
		//*******************************************
		selectRow(table, 0);

		DockingAction makeStringAction =
			(DockingAction) getInstanceField("makeStringAction", provider);

		performAction(makeStringAction, model);

		// test that the string was actually made correctly
		Data d = listing.getDataAt(addr(0x401286));
		DataType dt = d.getBaseDataType();
		assertTrue(dt instanceof StringDataType);
		assertEquals("YYh P@", d.getValue());

		// test that the string len is correct to get the end of chars
		assertEquals(7, d.getLength());

		// test that the label was made
		Symbol sym = program.getSymbolTable().getPrimarySymbol(addr(0x401286));
		assertEquals("s_YYh_P@", sym.getName());

		// test that the table was updated with the label and preview
		assertEquals("s_YYh_P@", getModelValue(model, 0, labelColumnIndex).toString());

		data = (CodeUnitTableCellData) getModelValue(model, 0, previewColumnIndex);
		assertEquals("ds \"YYh P@\"", data.getDisplayString());

		stringData = (String) getModelValue(model, 0, isWordColumnIndex);

		// TODO this is debug for issue that is timing or real bug
		if ("true".equals(stringData)) {
			// the test is about to fail--diagnose
			System.out.println("Word value at 0x401286 is not true, but expected false.\nThe " +
				"initial value at the start of the test was " + debug_initial_word_value_at_401286);

		}

		// TODO debug
		System.out.println("\n\nWord value at 0x401286 is expected false.\n\tThe " +
			"initial value at the start of the test was " + debug_initial_word_value_at_401286 +
			"\n\tThe current value is: " + stringData);
		FoundStringWithWordStatus foundString =
			(FoundStringWithWordStatus) getModelRowObject(model, 0);

		System.out.println("Last-loaded model path: " + NGramUtils.getLastLoadedTrigramModelPath());

		StringAndScores candidateString = new StringAndScores(
			foundString.getString(program.getMemory()), NGramUtils.isLowerCaseModel());
		NGramUtils.scoreString(candidateString);
		boolean isWord = candidateString.isScoreAboveThreshold();
		double score = candidateString.getNgramScore();
		double threshold = candidateString.getScoreThreshold();
		System.out.println(
			"\tisWord? " + isWord + "\n\tscore: " + score + "\n\tthreshold: " + threshold + "\n\n");

		System.out.println("found string in model: " + foundString + "\n" + "StringAndScores: " +
			candidateString + "\n\n");

		assertEquals("false", stringData);

		// check that the selected row in the table moves to the next row
		int[] selectedRows = table.getSelectedRows();
		assertEquals(1, selectedRows.length);
		assertEquals(1, selectedRows[0]);

		//***********************************************************
		// ********* TEST MAKE ASCII ********************************
		//***********************************************************

		// select the second row
		selectRow(table, 1);

		DockingAction makeAsciiAction =
			(DockingAction) getInstanceField("makeCharArrayAction", provider);

		performAction(makeAsciiAction, model);

		// test that the ascii array was actually made correctly
		d = listing.getDataAt(addr(0x4014b8));
		dt = d.getBaseDataType();
		assertEquals("char[5]", dt.getName());

		// test to make sure that 5 ascii chars were created
		assertEquals(5, d.getLength());

		// test that the label was made
		sym = program.getSymbolTable().getPrimarySymbol(addr(0x4014b8));
		assertEquals("s_?=t\"U", sym.getName());

		// test that the table was updated with the label and preview
		assertEquals("s_?=t\"U", getModelValue(model, 1, labelColumnIndex).toString());

		data = (CodeUnitTableCellData) getModelValue(model, 1, previewColumnIndex);
		assertEquals("char[5] \"?=t\\\"U\"", data.getDisplayString());

		stringData = (String) getModelValue(model, 1, isWordColumnIndex);
		assertEquals("false", stringData);

		// check that the selected row in the table moves to the next row
		selectedRows = table.getSelectedRows();
		assertEquals(1, selectedRows.length);
		assertEquals(2, selectedRows[0]);

		//*************************************************************
		// ********* TEST MAKE unicode STRING      ********************
		//*************************************************************

		row = findRow(model, addr(0x404f41));
		selectRow(table, row);

		performAction(makeStringAction, model);

		// test that the string was actually made correctly
		d = listing.getDataAt(addr(0x404f41));
		assertEquals(26, d.getLength());

		assertEquals("\n\rString10\n\r", d.getValue());

		dt = d.getBaseDataType();
		assertEquals("unicode", dt.getName());

		// test that the label was made correctly
		sym = program.getSymbolTable().getPrimarySymbol(addr(0x404f41));
		assertEquals("u_String10", sym.getName());

		// test that the table was updated with the label and preview
		assertEquals("u_String10", getModelValue(model, row, labelColumnIndex).toString());

		data = (CodeUnitTableCellData) getModelValue(model, row, previewColumnIndex);
		assertEquals("unicode u\"\\n\\rString10\\n\\r\"", data.getDisplayString());

		stringData = (String) getModelValue(model, row, isWordColumnIndex);
		assertEquals("true", stringData);

		//*************************************************************
		// ********* TEST MAKE UNICODE32 STRING      ********************
		//*************************************************************

		row = findRow(model, addr(0x405423));
		selectRow(table, row);

		performAction(makeStringAction, model);

		// test that the string was actually made correctly
		d = listing.getDataAt(addr(0x405423));
		assertEquals(48, d.getLength());

		assertEquals("\n\rString9\n\r", d.getValue());

		dt = d.getBaseDataType();
		assertEquals("unicode32", dt.getName());

		// test that the label was made correctly
		sym = program.getSymbolTable().getPrimarySymbol(addr(0x405423));
		assertEquals("u_String9", sym.getName());

		// test that the table was updated with the label and preview
		assertEquals("u_String9", getModelValue(model, row, labelColumnIndex).toString());

		data = (CodeUnitTableCellData) getModelValue(model, row, previewColumnIndex);
		assertEquals("unicode32 U\"\\n\\rString9\\n\\r\"", data.getDisplayString());

		stringData = (String) getModelValue(model, row, isWordColumnIndex);
		assertEquals("true", stringData);
	}

	/*
Run a search on whole program with the 'Filter: Only Show High Confidence Word Strings'
button toggled on. Test that the correct strings were found at the expected addresses.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/string/StringTableSearchTest.java