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; } }