package com.sap.furcas.prettyprinter.testutils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import com.sap.furcas.metamodel.FURCAS.textblocks.TextBlock;
import com.sap.furcas.runtime.textblocks.model.TextBlocksModel;
public class PrettyPrintAssertionUtil {
public static void assertEqualsIgnoreWhitespaces(String message, String expected, String actual) {
assertEquals(message, stripWhiteSpace(expected), stripWhiteSpace(actual));
}
public static void assertEqualsIgnoreWhitespaces(String expected, String actual) {
assertEquals(stripWhiteSpace(expected), stripWhiteSpace(actual));
}
private static String stripWhiteSpace(String expected) {
return expected.replaceAll(" ", "").replaceAll("\n", "").replaceAll("\r", "").replaceAll("\t", "");
}
public static void assertEqualsByLines(String output, String referenceOutput) {
if (output.equals(referenceOutput)) {
return; // Everything ok. No need to perform a expensive line-wise check.
}
BufferedReader actualOutputStream = new BufferedReader(new StringReader(output));
BufferedReader referenceOutputStream = new BufferedReader(new StringReader(referenceOutput));
String refLine;
String actualLine;
int line = 0;
try {
refLine = referenceOutputStream.readLine();
actualLine = actualOutputStream.readLine();
while (refLine != null) {
assertEquals("error in line " + line + ":\n actual output was \n" + output + "\n reference output was \n "
+ referenceOutput + "\n", refLine, actualLine);
refLine = referenceOutputStream.readLine();
actualLine = actualOutputStream.readLine();
line++;
}
if (actualLine != null) {
fail("error in line " + line + ":\n actual output was \n" + output + "\n reference output was \n "
+ referenceOutput + "\n");
}
} catch (IOException e) {
e.printStackTrace();
fail("error comparing streams");
}
}
public static void assertEqualsByLines(TextBlock textBlock, String referenceOutput) {
TextBlocksModel model = new TextBlocksModel(textBlock);
String output = model.get(0, model.getLength());
assertEqualsByLines(output, referenceOutput);
}
}