Skip to content

Instantly share code, notes, and snippets.

@cbaldin
Created September 2, 2011 16:35
Show Gist options
  • Save cbaldin/1189096 to your computer and use it in GitHub Desktop.
Save cbaldin/1189096 to your computer and use it in GitHub Desktop.
Assert File
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import junitx.framework.AssertionFailedError;
import org.junit.Assert;
public class FileTestOperations {
static boolean fail = false;
public static void assertFileWithTemplate(final String file, final String template) {
assertFileWithTemplate(new File(file), new File(template));
}
public static void assertFileWithTemplate(final File file, final File template) {
fail = false;
Assert.assertNotNull(template);
Assert.assertNotNull(file);
Assert.assertTrue("File does not exist [" + template.getAbsolutePath() + "]", template.exists());
Assert.assertTrue("File does not exist [" + file.getAbsolutePath() + "]", file.exists());
Assert.assertTrue("Template file not readable", template.canRead());
Assert.assertTrue("Actual file not readable", file.canRead());
FileInputStream templateStream = null;
FileInputStream fileStream = null;
try {
try {
templateStream = new FileInputStream(template);
fileStream = new FileInputStream(file);
BufferedReader fileData = new BufferedReader(new InputStreamReader(fileStream));
BufferedReader templData = new BufferedReader(new InputStreamReader(templateStream));
assertLines(fileData, templData);
} finally {
templateStream.close();
fileStream.close();
}
} catch (IOException e) {
throw new AssertionFailedError(e);
}
if (fail) {
Assert.fail("Generated file is not equal provided template.");
}
}
private static void assertLines(final BufferedReader fileData, final BufferedReader templData) throws IOException {
String fileLine;
String templateLine;
for (int lineNumber = 1; true; lineNumber++) {
fileLine = fileData.readLine();
templateLine = templData.readLine();
if (fileLine == null && templateLine == null) {
return;
}
verifyFileLengh(fileLine, templateLine, lineNumber);
if (!templateLine.equals(fileLine)) {
searchCaracterWithDiference(fileLine.toCharArray(), templateLine.toCharArray(), lineNumber);
}
}
}
private static void searchCaracterWithDiference(char[] lineChars, char[] templChars, int lineNumber) {
int column;
for (int i = 0; i < templChars.length; i++) {
if (lineChars[i] != templChars[i]) {
column = i + 1;
System.out.println("Difference was found at line " + lineNumber + ", near column " + column + ". \"" + String.valueOf(lineChars[i]) + "\" expected, \"" + String.valueOf(templChars[i] + "\" received."));
fail = true;
}
}
}
private static void verifyFileLengh(final String fileLine, final String templateLine, final int line) {
Assert.assertFalse("Generated file has less lines than template.", fileLine == null && templateLine != null);
Assert.assertFalse("Generated file has more lines than template", fileLine != null && templateLine == null);
Assert.assertFalse("Line " + line + " from the generated file is larger than template.", fileLine.length() > templateLine.length());
Assert.assertFalse("Line " + line + " from generated file is smaller than template.", fileLine.length() < templateLine.length());
}
}
@cbaldin
Copy link
Author

cbaldin commented Sep 2, 2011

@Test
public void testAssertFileExample() throws IOException {
    FileTestOperations.assertFileWithTemplate(new File("/home/cristianobaldin/arq1.txt"), new File("/home/cristianobaldin/arq2.txt"));
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment