annotate test/org/tmatesoft/hg/test/TestManifest.java @ 158:b413b16d10a5

Integer offsets and file length explictly, rather than casts throughout code. Inflater may benefit from total length hint, but shall calculate it by its own if needed
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Wed, 09 Mar 2011 13:16:37 +0100
parents b9700740553a
children f4fa4456fa50
rev   line source
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
1 /*
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2011 TMate Software Ltd
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
3 *
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
6 * the Free Software Foundation; version 2 of the License.
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
7 *
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
8 * This program is distributed in the hope that it will be useful,
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
11 * GNU General Public License for more details.
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
12 *
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
13 * For information on how to redistribute this software under
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
14 * the terms of a license other than GNU General Public License
102
a3a2e5deb320 Updated contact address to support@hg4j.com
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 101
diff changeset
15 * contact TMate Software at support@hg4j.com
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
16 */
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
17 package org.tmatesoft.hg.test;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
18
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
19 import static org.hamcrest.CoreMatchers.equalTo;
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
20 import static org.hamcrest.CoreMatchers.notNullValue;
106
5c43e937e15b Assume doesn't actually report tests as ignored, rather as green (pass), which is misleading
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
21 import static org.junit.Assert.assertTrue;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 67
diff changeset
22 import static org.tmatesoft.hg.repo.HgRepository.TIP;
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
23
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
24 import java.util.Collections;
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
25 import java.util.LinkedHashMap;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
26 import java.util.LinkedList;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
27 import java.util.Map;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
28
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
29 import org.junit.Rule;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
30 import org.junit.Test;
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 106
diff changeset
31 import org.tmatesoft.hg.core.HgLogCommand.FileRevision;
143
b9700740553a Command line tools parse and respect most of command-line arguments
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
32 import org.tmatesoft.hg.core.HgManifestCommand;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 67
diff changeset
33 import org.tmatesoft.hg.core.Nodeid;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
34 import org.tmatesoft.hg.repo.HgLookup;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 67
diff changeset
35 import org.tmatesoft.hg.repo.HgRepository;
133
4a948ec83980 core.Path to util.Path as it's not Hg repo dependant
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 131
diff changeset
36 import org.tmatesoft.hg.util.Path;
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
37
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
38
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
39 /**
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
40 *
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
41 * @author Artem Tikhomirov
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
42 * @author TMate Software Ltd.
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
43 */
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
44 public class TestManifest {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
45
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
46 @Rule
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
47 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
48
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
49 private final HgRepository repo;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
50 private ManifestOutputParser manifestParser;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
51 private ExecHelper eh;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
52 final LinkedList<FileRevision> revisions = new LinkedList<FileRevision>();
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 106
diff changeset
53 private HgManifestCommand.Handler handler = new HgManifestCommand.Handler() {
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
54
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
55 public void file(FileRevision fileRevision) {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
56 revisions.add(fileRevision);
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
57 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
58
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
59 public void end(Nodeid manifestRevision) {}
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
60 public void dir(Path p) {}
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
61 public void begin(Nodeid manifestRevision) {}
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
62 };
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
63
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
64 public static void main(String[] args) throws Throwable {
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
65 TestManifest tm = new TestManifest();
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
66 tm.testTip();
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
67 tm.testFirstRevision();
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
68 tm.testRevisionInTheMiddle();
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
69 tm.errorCollector.verify();
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
70 }
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
71
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
72 public TestManifest() throws Exception {
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
73 this(new HgLookup().detectFromWorkingDir());
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
74 }
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
75
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
76 private TestManifest(HgRepository hgRepo) {
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
77 repo = hgRepo;
106
5c43e937e15b Assume doesn't actually report tests as ignored, rather as green (pass), which is misleading
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
78 assertTrue(!repo.isInvalid());
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
79 eh = new ExecHelper(manifestParser = new ManifestOutputParser(), null);
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
80 }
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
81
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
82 @Test
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
83 public void testTip() throws Exception {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
84 testRevision(TIP);
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
85 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
86
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
87 @Test
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
88 public void testFirstRevision() throws Exception {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
89 testRevision(0);
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
90 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
91
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
92 @Test
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
93 public void testRevisionInTheMiddle() throws Exception {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
94 int rev = repo.getManifest().getRevisionCount() / 2;
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
95 if (rev == 0) {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
96 throw new IllegalStateException("Need manifest with few revisions");
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
97 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
98 testRevision(rev);
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
99 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
100
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
101 private void testRevision(int rev) throws Exception {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
102 manifestParser.reset();
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
103 eh.run("hg", "manifest", "--debug", "--rev", String.valueOf(rev));
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
104 revisions.clear();
143
b9700740553a Command line tools parse and respect most of command-line arguments
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
105 new HgManifestCommand(repo).revision(rev).execute(handler);
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
106 report("manifest " + (rev == TIP ? "TIP:" : "--rev " + rev));
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
107 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
108
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
109 private void report(String what) throws Exception {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
110 final Map<Path, Nodeid> cmdLineResult = new LinkedHashMap<Path, Nodeid>(manifestParser.getResult());
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
111 for (FileRevision fr : revisions) {
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
112 Nodeid nid = cmdLineResult.remove(fr.getPath());
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
113 errorCollector.checkThat("Extra " + fr.getPath() + " in Java result", nid, notNullValue());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
114 if (nid != null) {
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
115 errorCollector.checkThat("Non-matching nodeid:" + nid, nid, equalTo(fr.getRevision()));
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
116 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
117 }
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
118 errorCollector.checkThat("Non-matched entries from command line:", cmdLineResult, equalTo(Collections.<Path,Nodeid>emptyMap()));
67
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
119 }
64bddc2dcc0e Tests for manifest cmd
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
120 }