package org.xpect.expectation.impl; import org.eclipse.xtext.util.internal.FormattingMigrator; import org.junit.ComparisonFailure; import org.xpect.XpectArgument; import org.xpect.XpectImport; import org.xpect.expectation.IStringExpectation; import org.xpect.expectation.StringExpectation; import org.xpect.setup.XpectSetupFactory; import org.xpect.state.Creates; import org.xpect.text.Text; import com.google.common.base.Joiner; @XpectSetupFactory @SuppressWarnings("restriction") @XpectImport(ExpectationRegionProvider.class) public class StringExpectationImpl extends AbstractExpectation implements IStringExpectation { private final StringExpectation annotation; public StringExpectationImpl(XpectArgument argument, TargetSyntaxSupport targetSyntax) { super(argument, targetSyntax); this.annotation = argument.getAnnotationOrDefault(StringExpectation.class); } public void assertEquals(Object string) { if (string == null) throw new NullPointerException("Object is null"); String originalExpectation = getExpectation(); String nl = new Text(originalExpectation).getNL(); String actual = string.toString(); String actualWithNL = Joiner.on(nl).join(new Text(actual).splitIntoLines()); String escapedActual = getTargetSyntaxLiteral().escape(actualWithNL); String migratedExpectation; if (annotation.whitespaceSensitive()) { if (annotation.newLineCharacterSensitive()) { migratedExpectation = originalExpectation; } else { migratedExpectation = originalExpectation.replaceAll("\\r?\\n", "\n"); } } else { FormattingMigrator migrator = new FormattingMigrator(); migratedExpectation = migrator.migrate(escapedActual, originalExpectation); } if ((annotation.caseSensitive() && !migratedExpectation.equals(escapedActual)) || (!annotation.caseSensitive() && !migratedExpectation.equalsIgnoreCase(escapedActual))) { String expDoc = replaceInDocument(migratedExpectation); String actDoc = replaceInDocument(escapedActual); throw new ComparisonFailure("", expDoc, actDoc); } } public StringExpectation getAnnotation() { return annotation; } @Creates public IStringExpectation create() { return this; } }