@Test
	void testClass_methodNoop() throws Throwable {
		JvmClassInfo initialClass = TestClassUtils.fromRuntimeClass(HelloWorld.class);
		BasicJvmClassBundle classes = TestClassUtils.fromClasses(initialClass);
		Workspace workspace = TestClassUtils.fromBundle(classes);

		// Modify the class. We'll just no-op a method to make things simple.
		ClassWriter writer = new ClassWriter(0);
		MethodNoopingVisitor visitor = new MethodNoopingVisitor(writer, MethodPredicate.of(initialClass.getMethods().getLast()));
		initialClass.getClassReader().accept(visitor, 0);
		JvmClassInfo modifiedClass = initialClass.toJvmClassBuilder().adaptFrom(writer.toByteArray()).build();
		classes.put(modifiedClass);

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

		// 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.
		String classKey = initialClass.getName();
		classes.decrementHistory(classKey);
		assertArrayEquals(initialClass.getBytecode(), classes.get(classKey).getBytecode(), "Revert failed");

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

		// Validate the patch was applied
		JvmClassInfo patchedClassInfo = classes.get(classKey);
		assertNotSame(initialClass, patchedClassInfo, "Class bundle post-patch yielded initial class state");
	}
Tests for {@link PatchProvider} and {@link PatchApplier}
recaf-core/src/test/java/software/coley/recaf/services/workspace/patch/PatchingTest.java