在将Tcl
脚本改编为 Java 并使用expectit
实现 Java 的 API 后,expect
我试图整理以下用法:
package expectit;
import java.util.logging.Logger;
import static net.sf.expectit.matcher.Matchers.contains;
import static net.sf.expectit.matcher.Matchers.eof;
import java.io.IOException;
import static java.lang.System.exit;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.TimeUnit;
public class Triple {
private final static Logger log = Logger.getLogger(Triple.class.getName());
private Queue q = new LinkedList();
void telnet() throws IOException {
q.add("nyc");
q.add("lax");
q.add("chi");
Process process = Runtime.getRuntime().exec("telnet rainmaker.wunderground.com");
StringBuilder wholeBuffer = new StringBuilder();
net.sf.expectit.Expect expect = new net.sf.expectit.ExpectBuilder()
.withOutput(process.getOutputStream())
.withInputs(process.getInputStream())
.withEchoOutput(wholeBuffer)
.withEchoInput(wholeBuffer)
.withExceptionOnFailure()
.build();
expect.expect(contains("Press Return to continue"));
expect.sendLine();
expect.expect(contains("forecast city code--"));
expect.sendLine(q.remove().toString());
////////////////
expect.expect(contains("Press Return to continue"));
expect.sendLine("m");
expect.expect(contains("Selection:"));
expect.sendLine("1");
expect.expect(contains("Enter 3-letter city code:"));
expect.sendLine(q.remove().toString());
/////
expect.expect(contains("Press Return to continue"));
expect.sendLine("m");
expect.expect(contains("Selection:"));
expect.sendLine("1");
expect.expect(contains("Enter 3-letter city code:"));
expect.sendLine(q.remove().toString());
/////
expect.expect(contains("Press Return to continue"));
expect.sendLine("x");
String response = wholeBuffer.toString();
System.out.println(response);
expect.close();
}
}
显然,从三个“部分”中queue
删除了城市。
对于此示例,queue
只有三个城市。
但是如果有 99 个呢?