/* * Copyright (C) 2007 Reto Schuettel, Robin Stocker * * IFS Institute for Software, HSR Rapperswil, Switzerland * */ package org.python.pydev.refactoring.utils; import java.util.LinkedList; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Pattern; 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 LinkedList<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 LinkedList<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); } }