package org.teachingextensions.approvals.lite; import java.io.File; import java.io.IOException; import junit.framework.TestCase; import org.teachingextensions.approvals.lite.namer.ApprovalNamer; import org.teachingextensions.approvals.lite.namer.NamerFactory; import org.teachingextensions.approvals.lite.util.ObjectUtils; import org.teachingextensions.approvals.lite.util.io.FileUtils; public class FileApprover implements ApprovalApprover { private File received; private File approved; private final ApprovalWriter writter; public FileApprover(ApprovalWriter writter, ApprovalNamer namer) { this.writter = writter; String base = String.format("%s%s%s", namer.getSourceFilePath(), namer.getApprovalName(), NamerFactory.getAndClearAdditionalInformation()); received = new File(writter.getReceivedFilename(base)); approved = new File(writter.getApprovalFilename(base)); } public boolean approve() throws Exception { received = new File(writter.writeReceivedFile(received.getAbsolutePath())); return approveTextFile(received, approved); } public void cleanUpAfterSuccess(ApprovalFailureReporter reporter) throws Exception { received.delete(); if (reporter instanceof ApprovalReporterWithCleanUp) { ((ApprovalReporterWithCleanUp) reporter).cleanUp(received.getAbsolutePath(), approved.getAbsolutePath()); } } public void reportFailure(ApprovalFailureReporter reporter) throws Exception { reporter.report(received.getAbsolutePath(), approved.getAbsolutePath()); } public void fail() { TestCase.assertEquals("Failed Approval", approved.getAbsolutePath(), received.getAbsolutePath()); } public static boolean approveTextFile(File expected, File actual) throws IOException { if (!expected.exists() || !actual.exists()) { return false; } String t1 = FileUtils.readFile(expected); String t2 = FileUtils.readFile(actual); return ObjectUtils.isEqual(t1, t2); } public boolean askToChangeReceivedToApproved(ApprovalFailureOverrider reporter) throws Exception { return reporter.askToChangeReceivedToApproved(received.getAbsolutePath(), approved.getAbsolutePath()); } }