public DomainFile addProgramToProject(DomainFolder folder, String programName)
			throws FileNotFoundException {

		File gzf = AbstractGenericTest.getTestDataFile(programName + ".gzf");

		// handle program names that are relative paths
		String name = gzf.getName();
		name = name.substring(0, name.indexOf("."));

		int oneUp = 0;
		while (true) {
			try {
				DomainFile df = folder.createFile(name, gzf, TaskMonitor.DUMMY);
				AbstractGuiTest.waitForSwing();
				DomainObject dobj = df.getDomainObject(this, true, false, null);
				try {
					if (dobj.isChanged()) {
						dobj.save("upgrade", null);
					}
				}
				finally {
					dobj.release(this);
				}
				return df;
			}
			catch (VersionException e) {
				throw new RuntimeException(
					"Program version is more recent than this code: " + programName);
			}
			catch (CancelledException e) {
				// can't happen--null monitor
			}
			catch (InvalidNameException e) {
				throw new AssertException("Got invalid name exception: " + e);
			}
			catch (DuplicateFileException e) {
				++oneUp;
				name = name + "_" + oneUp;
			}
			catch (IOException e) {
				String msg = e.getMessage();
				if (msg == null) {
					msg = e.toString();
				}
				throw new RuntimeException(
					"Failed to restore test program: " + programName + " - " + msg);
			}
		}
	}
Copies the specified program zip file to the JUnit test project's folder. <b>This
means that the program will appear in the FrontEndTool as part of the project.</b>  That is
the only reason to use this method vice openProgram().

@param folder the folder into which the domain file will be inserted
@param programName the name of the program zip file without the ".gzf" extension.
@return the file
@throws FileNotFoundException if the file cannot be found
Ghidra/Features/Base/src/main/java/ghidra/test/TestProgramManager.java