/******************************************************************************* * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences 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: * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jface.text.TextSelection; /** * @author Emanuel Graf * */ public class TestSourceFile { private static final String REPLACEMENT = ""; //$NON-NLS-1$ private String name; private StringBuffer source = new StringBuffer(); private StringBuffer expectedSource = new StringBuffer(); private String separator = System.getProperty("line.separator"); //$NON-NLS-1$ private int selectionStart = -1; private int selectionEnd = -1; protected static final String selectionStartRegex = "//\\$"; //$NON-NLS-1$ protected static final String selectionEndRegex = "\\$//"; //$NON-NLS-1$ protected static final String selectionStartLineRegex = "(.*)(" + selectionStartRegex + ")(.*)"; //$NON-NLS-1$ //$NON-NLS-2$ protected static final String selectionEndLineRegex = "(.*)("+ selectionEndRegex + ")(.*)"; //$NON-NLS-1$ //$NON-NLS-2$ public TestSourceFile(String name) { super(); this.name = name; } public String getExpectedSource() { String exp = expectedSource.toString(); if(exp.length() == 0) { return getSource(); }else { return exp; } } public String getName() { return name; } public String getSource() { return source.toString(); } public void addLineToSource(String code) { Matcher start = createMatcherFromString(selectionStartLineRegex, code); if(start.matches()) { selectionStart = start.start(2) + source.length(); code = code.replaceAll(selectionStartRegex, REPLACEMENT); } Matcher end = createMatcherFromString(selectionEndLineRegex, code); if(end.matches()) { selectionEnd = end.start(2) + source.length(); code = code.replaceAll(selectionEndRegex, REPLACEMENT); } source.append(code); source.append(separator); } public void addLineToExpectedSource(String code) { expectedSource.append(code); expectedSource.append(separator); } public TextSelection getSelection() { if(selectionStart < 0 || selectionEnd <0 ) { return null; }else { return new TextSelection(selectionStart, selectionEnd -selectionStart); } } protected static Matcher createMatcherFromString(String pattern, String line) { return Pattern.compile(pattern).matcher(line); } }