/******************************************************************************
* Copyright (C) 2007-2012 IFS Institute for Software 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
*
* Original authors:
* Reto Schuettel
* Robin Stocker
* Contributors:
* Fabio Zadrozny <fabiofz@gmail.com> - initial implementation
******************************************************************************/
/*
* Copyright (C) 2007 Reto Schuettel, Robin Stocker
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
*
*/
package org.python.pydev.refactoring.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
import org.python.pydev.shared_core.structure.LinkedListWarningOnSlowOperations;
public final class TestUtils {
private static final Pattern CURSOR_PATTERN = Pattern.compile("##\\|");
private static final String CURSOR = "##|";
private TestUtils() {
}
public static final class Marker {
public final int beginLine;
public final String expr;
public final String type;
public Marker(int beginLine, String expr, String type) {
this.beginLine = beginLine;
this.expr = expr;
this.type = type;
}
}
public static List<Marker> getMarkers(String sourceCode) {
List<Marker> markers = new LinkedListWarningOnSlowOperations<Marker>();
String[] lines = sourceCode.split("\n");
int beginLine = 0;
for (String line : lines) {
beginLine += 1;
line = line.trim();
int pos = line.indexOf("##");
if (pos < 0) {
continue;
}
StringTokenizer tok = new StringTokenizer(line.substring(pos + 2));
String test = tok.nextToken();
if ("exit".equals(test)) {
break;
} else if ("type".equals(test)) {
String type = tok.nextToken();
String expr = line.substring(0, line.indexOf("##")).trim();
markers.add(new Marker(beginLine, expr, type));
}
}
return markers;
}
public static final class Cursors {
public final String text;
public final List<Integer> positions;
public Cursors(String text, List<Integer> positions) {
this.text = text;
this.positions = positions;
}
}
public static Cursors findCursors(String input) {
List<Integer> positions = new ArrayList<Integer>();
String text = input;
while (true) {
int index = text.indexOf(CURSOR);
if (index < 0) {
break;
}
positions.add(index);
text = CURSOR_PATTERN.matcher(text).replaceFirst("");
}
return new Cursors(text, positions);
}
}