<D extends NindoSink & ModifiableDocument> void run(D document, DocumentParser<D> parser) { String initialState = parser.asString(document); D copy = parser.copyDocument(document); DocOp docOp = null; Assert.assertEquals("Copy did not work", initialState, parser.asString(copy)); try { docOp = document.consumeAndReturnInvertible(mutation); copy.consume(docOp); } catch (OperationException e) { Assert.fail("An OperationException was thrown: " + e); } String computedDocument = parser.asString(document); String message = "Computed: " + computedDocument + " Expected: " + expectedResultAlternatives + " Nindo: " + mutation + " Op: " + DocOpUtil.toConciseString(docOp); Assert.assertTrue(message, expectedResultAlternatives.contains(computedDocument)); Assert.assertEquals("Generated invertible op not equivalent to non-invertible one", parser.asString(document), parser.asString(copy)); try { copy.consume(DocOpInverter.invert(docOp)); } catch (OperationException e) { Assert.fail("An OperationException was thrown: " + e); } Assert.assertEquals("Inversion of generated invertible op is incorrect", initialState, parser.asString(copy)); }
<D extends NindoSink & ModifiableDocument> void run(D document, DocumentParser<D> parser) { String initialState = parser.asString(document); D copy = parser.copyDocument(document); DocOp docOp = null; Assert.assertEquals("Copy did not work", initialState, parser.asString(copy)); try { docOp = document.consumeAndReturnInvertible(mutation); copy.consume(docOp); } catch (OperationException e) { Assert.fail("An OperationException was thrown: " + e); } String computedDocument = parser.asString(document); String message = "Computed: " + computedDocument + " Expected: " + expectedResultAlternatives + " Nindo: " + mutation + " Op: " + DocOpUtil.toConciseString(docOp); Assert.assertTrue(message, expectedResultAlternatives.contains(computedDocument)); Assert.assertEquals("Generated invertible op not equivalent to non-invertible one", parser.asString(document), parser.asString(copy)); try { copy.consume(DocOpInverter.invert(docOp)); } catch (OperationException e) { Assert.fail("An OperationException was thrown: " + e); } Assert.assertEquals("Inversion of generated invertible op is incorrect", initialState, parser.asString(copy)); }