| /* |
| * 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(); |
| } |
| } |