@Test
	void testRemove_file() throws Throwable {
		StubFileInfo bar = new StubFileInfo("bar");
		FileBundle fileBundle = TestClassUtils.fromFiles(new StubFileInfo("foo"), bar, new StubFileInfo("fizz"));
		Workspace workspace = TestClassUtils.fromBundle(fileBundle);

		// Remove 'bar'
		fileBundle.remove(bar.getName());

		// Build the patch.
		WorkspacePatch patch = patchProvider.createPatch(workspace);

		// Assert the patch has the removal
		assertEquals(1, patch.removals().size(), "Expected 1 file removal");

		// Assert serialization/deserialization doesn't result in breakage.
		String serialized = patchProvider.serializePatch(patch);
		WorkspacePatch deserializePatch = patchProvider.deserializePatch(workspace, serialized);
		assertEquals(patch, deserializePatch);

		// Undo the change.
		fileBundle.put(bar);

		// Apply the patch
		assertTrue(patchApplier.apply(patch, failOnErrors()));

		// Validate the patch was applied
		assertNull(fileBundle.get(bar.getName()), "File bundle post-patch did not remove 'bar'");
	}
Tests for {@link PatchProvider} and {@link PatchApplier}
recaf-core/src/test/java/software/coley/recaf/services/workspace/patch/PatchingTest.java