blob: d2b8dcabcc3ebb3da63415edf91e773d7a43d8b9 [file] [log] [blame]
/*
* Copyright (c) 2005, 2008 committers of openArchitectureWare and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* committers of openArchitectureWare - initial API and implementation
*/
package org.eclipse.gmf.tests.xpand;
import java.util.Collections;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.gmf.internal.xpand.BufferOutput;
import org.eclipse.gmf.internal.xpand.ast.ExpressionStatement;
import org.eclipse.gmf.internal.xpand.ast.TextStatement;
import org.eclipse.gmf.internal.xpand.model.Output;
import org.eclipse.ocl.cst.CSTFactory;
import org.eclipse.ocl.cst.OCLExpressionCS;
public class OutputImplTest extends TestCase {
private Output output;
private StringBuilder buffer;
@Override
protected void setUp() throws Exception {
super.setUp();
buffer = new StringBuilder(50);
final Map<String, StringBuilder> emptyMap = Collections.emptyMap();
output = new BufferOutput(buffer, emptyMap);
}
private Output getOutput() {
return output;
}
private StringBuilder getBuffer() {
return buffer;
}
public final void testDeleteLineSingleNewlineChar() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", false));
bo.write("w ");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write(" \n");
assertEquals("w ", getBuffer().toString());
getBuffer().setLength(0);
bo.enterStatement(new TextStatement(0, 1, 1, "", false));
bo.write("w ");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write(" \r");
assertEquals("w ", getBuffer().toString());
}
public final void testDeleteLine1() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", false));
bo.write("Hallo test \r\n ");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write(" \n \t Ola");
assertEquals("Hallo test \r\n \t Ola", getBuffer().toString());
}
public final void testDeleteLine2() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", false));
bo.write("Hallo test \r \t ");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write(" \n Ola");
assertEquals("Hallo test \r \t Ola", getBuffer().toString());
}
public final void testDeleteLine2_5() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write("\r\nfirstLine\r\n");
assertEquals("firstLine\r\n", getBuffer().toString());
}
public final void testDeleteLine3() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write("\r\n");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write("\r\n \tTest");
assertEquals(" \tTest", getBuffer().toString());
}
public final void testDeleteLine4() {
final Output bo = getOutput();
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write("\r\n");
OCLExpressionCS fakeExpr = CSTFactory.eINSTANCE.createIntegerLiteralExpCS();
bo.enterStatement(new ExpressionStatement(0, 1, 1, fakeExpr));
bo.write(" mein scholli ");
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write("\r\n \tTest");
// XXX original test kept \r\n here, i.e. " mein scholli \r\n \tTest"
// because pattern OutputImpl used to decide whether to delete line or not
// respected deleteLine only if there was no characters other than whitespace
// since last newline. IOW, it ignored ->> if there was non-whitespace
// earlier in the same line. Odd to me - if person wants this newline to be kept,
// he'll just put ">>" instead "->>"
assertEquals(" mein scholli \tTest", getBuffer().toString());
}
public final void testPattern() {
assertEquals(" ", del("", " \n "));
assertEquals("foobar", del("foo", "\nbar"));
assertEquals("foo\n bar", del("foo\n ", " \nbar"));
assertEquals("foo\r\tbar", del("foo\r\t", "\r\nbar"));
assertEquals("package", del("", "\r\npackage"));
}
private String del(String start, String end) {
final Output bo = getOutput();
buffer.setLength(0);
bo.enterStatement(new TextStatement(0, 1, 1, "", false));
bo.write(start);
bo.enterStatement(new TextStatement(0, 1, 1, "", true));
bo.write(end);
return getBuffer().toString();
}
}