package com.mumux.androidtesting.scenario;
import com.mumux.androidtesting.actions.ActionParseException;
import com.mumux.androidtesting.actions.ActionParser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
public class TextScenarioParser implements ScenarioParser {
static String parseTitle(BufferedReader in) throws IOException, ScenarioParsingException {
String line = in.readLine();
if (line == null || !line.contains("#")) {
throw new ScenarioParsingException("Missing title");
}
return line.split("#")[1].trim();
}
@Override
public Scenario parse(Reader reader) throws ScenarioParsingException {
String line;
BufferedReader in = new BufferedReader(reader);
Scenario scenario;
// Parse first line as Title
try {
scenario = new Scenario(parseTitle(in));
} catch (IOException e) {
throw new ScenarioParsingException(e.getMessage());
}
try {
while ((line = in.readLine()) != null) {
line = line.trim();
if ("".equals(line) || line.charAt(0) == '#') {
continue;
}
if (line.startsWith("(") && line.endsWith(")")) {
scenario.addAction(new OptionalAction(ActionParser.parseAction(line.substring(1, line.length() - 1))));
} else {
scenario.addAction(ActionParser.parseAction(line));
}
}
} catch (IOException | ActionParseException e) {
throw new ScenarioParsingException(e.getMessage(), scenario.name);
}
return scenario;
}
}