tikhomirov@61: /* tikhomirov@410: * Copyright (c) 2011-2012 TMate Software Ltd tikhomirov@66: * tikhomirov@66: * This program is free software; you can redistribute it and/or modify tikhomirov@66: * it under the terms of the GNU General Public License as published by tikhomirov@66: * the Free Software Foundation; version 2 of the License. tikhomirov@66: * tikhomirov@66: * This program is distributed in the hope that it will be useful, tikhomirov@66: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@66: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@66: * GNU General Public License for more details. tikhomirov@66: * tikhomirov@66: * For information on how to redistribute this software under tikhomirov@66: * the terms of a license other than GNU General Public License tikhomirov@102: * contact TMate Software at support@hg4j.com tikhomirov@61: */ tikhomirov@66: package org.tmatesoft.hg.test; tikhomirov@61: tikhomirov@475: import java.util.Iterator; tikhomirov@475: import java.util.NoSuchElementException; tikhomirov@475: import java.util.regex.Matcher; tikhomirov@475: import java.util.regex.Pattern; tikhomirov@475: tikhomirov@61: /** tikhomirov@61: * tikhomirov@66: * @author Artem Tikhomirov tikhomirov@66: * @author TMate Software Ltd. tikhomirov@61: */ tikhomirov@61: public interface OutputParser { tikhomirov@61: tikhomirov@61: public void parse(CharSequence seq); tikhomirov@202: tikhomirov@202: public class Stub implements OutputParser { tikhomirov@203: private boolean shallDump; tikhomirov@410: private CharSequence result; tikhomirov@410: tikhomirov@203: public Stub() { tikhomirov@203: this(false); tikhomirov@203: } tikhomirov@203: public Stub(boolean dump) { tikhomirov@203: shallDump = dump; tikhomirov@203: } tikhomirov@202: public void parse(CharSequence seq) { tikhomirov@410: result = seq; tikhomirov@203: if (shallDump) { tikhomirov@203: System.out.println(seq); tikhomirov@203: } tikhomirov@203: // else no-op tikhomirov@202: } tikhomirov@410: public CharSequence result() { tikhomirov@410: return result; tikhomirov@410: } tikhomirov@475: tikhomirov@475: public Iterable lines() { tikhomirov@475: return lines("(.+)$"); tikhomirov@475: } tikhomirov@475: public Iterable lines(String pattern) { tikhomirov@475: final Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(result); tikhomirov@475: class S implements Iterable, Iterator { tikhomirov@475: public Iterator iterator() { tikhomirov@475: return this; tikhomirov@475: } tikhomirov@475: private boolean next; tikhomirov@475: { tikhomirov@475: next = m.find(); tikhomirov@475: } tikhomirov@475: tikhomirov@475: public boolean hasNext() { tikhomirov@475: return next; tikhomirov@475: } tikhomirov@475: tikhomirov@475: public String next() { tikhomirov@475: if (next) { tikhomirov@478: String rv = m.group(1); tikhomirov@475: next = m.find(); tikhomirov@475: return rv; tikhomirov@475: } tikhomirov@475: throw new NoSuchElementException(); tikhomirov@475: } tikhomirov@475: tikhomirov@475: public void remove() { tikhomirov@475: throw new UnsupportedOperationException(); tikhomirov@475: } tikhomirov@475: }; tikhomirov@475: return new S(); tikhomirov@475: } tikhomirov@202: } tikhomirov@61: }