Mercurial > jhg
annotate test/com/tmate/hgkit/ExecHelper.java @ 61:fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Tue, 18 Jan 2011 18:32:49 +0100 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 61 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2011 Artem Tikhomirov | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 */ | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 package com.tmate.hgkit; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 import java.io.File; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 import java.io.IOException; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 import java.io.InputStreamReader; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 import java.nio.CharBuffer; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 import java.util.LinkedList; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 /** | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * @author artem | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 */ | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 public class ExecHelper { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 private final OutputParser parser; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 private final File dir; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 public ExecHelper(OutputParser outParser, File workingDir) { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 parser = outParser; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 23 dir = workingDir; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 } | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 public void run(String... cmd) throws IOException, InterruptedException { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 27 Process p = new ProcessBuilder(cmd).directory(dir).redirectErrorStream(true).start(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 // Process p = Runtime.getRuntime().exec(cmd, null, dir); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 InputStreamReader stdOut = new InputStreamReader(p.getInputStream()); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 LinkedList<CharBuffer> l = new LinkedList<CharBuffer>(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 int r = -1; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 CharBuffer b = null; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 do { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 if (b == null || b.remaining() < b.capacity() / 3) { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 b = CharBuffer.allocate(512); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 l.add(b); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 } | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 r = stdOut.read(b); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 } while (r != -1); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 40 int total = 0; | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 for (CharBuffer cb : l) { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 total += cb.position(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 cb.flip(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 44 } | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 CharBuffer res = CharBuffer.allocate(total); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 46 for (CharBuffer cb : l) { | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 47 res.put(cb); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 48 } | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 res.flip(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 p.waitFor(); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 parser.parse(res); | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 } | 
| 
fac8e7fcc8b0
Simple test framework - capable of parsing Hg cmdline output to compare with Java result
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 53 } | 
