public void demangleAndTest(TestName testName, String mangledArg, String mdtruth,
			String mstruth, String ghtruth, String ms2013truth) throws Exception {
		mangled = mangledArg;
		setTruth(mdtruth, mstruth, ghtruth, ms2013truth);
		outputInfo = new StringBuilder();

		if (verboseOutput) {
			outputInfo.append("\n   Test: ");
			outputInfo.append(testName.getMethodName());
			outputInfo.append(getNumberHeader(mangledArg.length()));
			outputInfo.append(getTestHeader());
		}

		mdm.setIsFunction(isFunction);
		// Meant to be overridden, as needed by extended classes
		demangItem = doDemangleSymbol(mdm, mangled);
		demangled = (demangItem == null) ? "" : demangItem.toString();

		doBasicTestsAndOutput();

		// Meant to be overridden, as needed by extended classes
		doExtraProcCheck();

		// Msg.info(this, outputInfo);
		logger(outputInfo);
		// Is the string mangled and is the truth unknown (truth matches input)?
		// Historically, with the Microsoft demangler (undname or dumpbin), if the output equals
		//  the input (it could also produce garbage), then it did not know how to demangle the
		//  input.  Here, "truth" represents either Microsoft's or one of my desired results, and
		//  we hold to this pattern that if we do not know how to demangle the input, we represent
		//  this as truth.equals(mangledArg).  However, if a symbol is not actually mangled, MSFT
		//  also  outputs the original (we hope that a C-language symbol going in will look
		//  exactly the same coming out).
		// So this logic of this if-else is as follows:
		//  If the symbol is recognized as mangled and the truth is equal to this mangled string
		//  (meaning that we as testers or MSFT do not know what the demangled output should look
		//  like), then we expect MDMang to also not know how to demangle it... it just so
		//  happens that we coded MDMang to return an empty string in this case.  The "else" of
		//  this is that if the symbol does not appear to be mangled (like C-language) OR we
		//  expect to be able to demangle the input (truth not equal to mangleArg), then we
		//  expect the output to be that which we desire ("truth".equals(demangled)).
		if ((truth.equals(mangledArg)) && isMangled(mangledArg)) {
			assertTrue(demangled.isEmpty());
		}
		else {
			assertEquals(truth, demangled);
		}
		if (mangledArg.startsWith(".?A")) {
			assertTrue((demangItem != null) && (demangItem instanceof MDDataType)); // Test for data type.
		}
	}
Runs through the process of creating a demangler, demangling a symbol string,
testing the output, and performing other ancillary outputs and tests.
@param testName TestName of the test being run.
@param mangledArg Mangled string to process
@param mdtruth Truth that "we" (developers of this demangler) believe is truth
@param mstruth Truth that was output from one of the Microsoft tools (e.g., undname).
@param ghtruth Truth that we would like to see for Ghidra version of the tool.
@param ms2013truth Like mstruth, but from Visual Studio 2013 version of tool.
@throws Exception if any exceptions are thrown
Ghidra/Features/MicrosoftDmang/src/test/java/mdemangler/MDBaseTestConfiguration.java