Mercurial > hg4j
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 } | 
