/*
* Copyright (C) 2007 Reto Schuettel, Robin Stocker
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
*
*/
package org.python.pydev.refactoring.tests.core;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextSelection;
import org.python.pydev.refactoring.utils.FileUtils;
import org.python.pydev.refactoring.utils.TestUtils;
import org.python.pydev.refactoring.utils.TestUtils.Cursors;
public class TestData {
/* allows ##c ##r, with or without comments on the same line */
private static final Pattern MAGIC_LEXER_CONFIG = Pattern.compile("^##[cr][^\\n]*$", Pattern.MULTILINE);
public String source;
public String config;
public String result;
public ITextSelection sourceSelection;
public ITextSelection resultSelection;
public File file;
public TestData(File file) {
String content;
this.file = file;
try {
content = FileUtils.read(file);
} catch (IOException e) {
throw new RuntimeException();
}
String[] parts = MAGIC_LEXER_CONFIG.split(content, 3);
source = parts[0];
if (parts.length == 3) {
config = parts[1];
result = parts[2];
} else if (parts.length == 2) {
config = "";
result = parts[1];
} else if (parts.length == 1) {
config = "";
result = source;
} else {
throw new RuntimeException("Invalid source file, only " + parts.length + " parts found in " + file);
}
source = source.trim();
result = result.trim();
config = config.trim();
Cursors sourceCursors = TestUtils.findCursors(source);
Cursors resultCursors = TestUtils.findCursors(result);
source = sourceCursors.text;
result = resultCursors.text;
sourceSelection = parseSelection(sourceCursors.positions);
resultSelection = parseSelection(resultCursors.positions);
}
private ITextSelection parseSelection(List<Integer> list) {
if (list.size() == 1) {
return new TextSelection(list.get(0), 0);
} else if (list.size() == 2) {
int start = list.get(0);
int end = list.get(1);
return new TextSelection(start, end - start);
} else {
return null;
}
}
public String getConfigContents() {
String c = config.trim();
if (c.startsWith("'''")) {
c = c.substring(3);
}
if (c.endsWith("'''")) {
c = c.substring(0, c.length() - 3);
}
return c;
}
}