annotate test/org/tmatesoft/hg/test/TestStatus.java @ 229:1ec6b327a6ac

Scope for status reworked: explicit files or a general matcher
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Tue, 31 May 2011 05:23:07 +0200
parents 7fe5982bcac0
children 0dd9da7489dc
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 /*
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
2 * Copyright (c) 2011 TMate Software Ltd
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
3 *
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
4 * This program is free software; you can redistribute it and/or modify
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
5 * it under the terms of the GNU General Public License as published by
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
6 * the Free Software Foundation; version 2 of the License.
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
7 *
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
8 * This program is distributed in the hope that it will be useful,
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
11 * GNU General Public License for more details.
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
12 *
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
13 * For information on how to redistribute this software under
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
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
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
16 */
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
17 package org.tmatesoft.hg.test;
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
18
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
19 import static org.hamcrest.CoreMatchers.equalTo;
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
20 import static org.junit.Assert.assertEquals;
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
21 import static org.junit.Assert.assertTrue;
127
2e395db595e2 Moved HgStatus to toplevel
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 109
diff changeset
22 import static org.tmatesoft.hg.core.HgStatus.Kind.*;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 68
diff changeset
23 import static org.tmatesoft.hg.repo.HgRepository.TIP;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
24
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
25 import java.util.Collection;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
26 import java.util.Collections;
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
27 import java.util.HashMap;
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
28 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
29 import java.util.List;
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
30 import java.util.Map;
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
31 import java.util.TreeMap;
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
32
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
33 import org.junit.Assume;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
34 import org.junit.Rule;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
35 import org.junit.Test;
127
2e395db595e2 Moved HgStatus to toplevel
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 109
diff changeset
36 import org.tmatesoft.hg.core.HgStatus;
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
37 import org.tmatesoft.hg.core.HgStatus.Kind;
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
38 import org.tmatesoft.hg.core.HgStatusCommand;
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
39 import org.tmatesoft.hg.internal.PathGlobMatcher;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
40 import org.tmatesoft.hg.repo.HgLookup;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 68
diff changeset
41 import org.tmatesoft.hg.repo.HgRepository;
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
42 import org.tmatesoft.hg.repo.HgStatusCollector;
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
43 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector;
133
4a948ec83980 core.Path to util.Path as it's not Hg repo dependant
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 131
diff changeset
44 import org.tmatesoft.hg.util.Path;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
45
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
46
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 /**
76
658fa6b3a371 Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 75
diff changeset
48 *
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
49 * @author Artem Tikhomirov
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
50 * @author TMate Software Ltd.
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
51 */
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 public class TestStatus {
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
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
54 @Rule
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
55 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
56
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
57 private HgRepository repo;
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
58 private StatusOutputParser statusParser;
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
59 private ExecHelper eh;
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
60
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
61 public static void main(String[] args) throws Throwable {
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
62 TestStatus test = new TestStatus();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
63 test.testLowLevel();
99
4d7bb95d553b StatusCommand().add should list copies
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
64 test.testStatusCommand();
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
65 test.testPerformance();
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
66 test.errorCollector.verify();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
67 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
68
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
69 public TestStatus() throws Exception {
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
70 this(new HgLookup().detectFromWorkingDir());
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
71 }
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
72
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
73 private TestStatus(HgRepository hgRepo) {
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
74 repo = hgRepo;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
75 Assume.assumeTrue(!repo.isInvalid());
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
76 statusParser = new StatusOutputParser();
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
77 eh = new ExecHelper(statusParser, null);
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
78 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
79
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
80 @Test
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
81 public void testLowLevel() throws Exception {
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
82 final HgWorkingCopyStatusCollector wcc = new HgWorkingCopyStatusCollector(repo);
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
83 statusParser.reset();
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
84 eh.run("hg", "status", "-A");
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
85 HgStatusCollector.Record r = wcc.status(HgRepository.TIP);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
86 report("hg status -A", r, statusParser);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
87 //
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
88 statusParser.reset();
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
89 int revision = 3;
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
90 eh.run("hg", "status", "-A", "--rev", String.valueOf(revision));
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
91 r = wcc.status(revision);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
92 report("status -A --rev " + revision, r, statusParser);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
93 //
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
94 statusParser.reset();
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
95 eh.run("hg", "status", "-A", "--change", String.valueOf(revision));
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
96 r = new HgStatusCollector.Record();
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
97 new HgStatusCollector(repo).change(revision, r);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
98 report("status -A --change " + revision, r, statusParser);
88
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
99 //
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
100 statusParser.reset();
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
101 int rev2 = 80;
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
102 final String range = String.valueOf(revision) + ":" + String.valueOf(rev2);
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
103 eh.run("hg", "status", "-A", "--rev", range);
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
104 r = new HgStatusCollector(repo).status(revision, rev2);
88
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
105 report("Status -A -rev " + range, r, statusParser);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
106 }
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
107
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
108 @Test
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
109 public void testStatusCommand() throws Exception {
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
110 final HgStatusCommand sc = new HgStatusCommand(repo).all();
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
111 StatusCollector r;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
112 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
113 eh.run("hg", "status", "-A");
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
114 sc.execute(r = new StatusCollector());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
115 report("hg status -A", r);
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
116 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
117 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
118 int revision = 3;
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
119 eh.run("hg", "status", "-A", "--rev", String.valueOf(revision));
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
120 sc.base(revision).execute(r = new StatusCollector());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
121 report("status -A --rev " + revision, r);
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
122 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
123 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
124 eh.run("hg", "status", "-A", "--change", String.valueOf(revision));
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
125 sc.base(TIP).revision(revision).execute(r = new StatusCollector());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
126 report("status -A --change " + revision, r);
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
127
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
128 // TODO check not -A, but defaults()/custom set of modifications
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
129 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
130
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
131 private static class StatusCollector implements HgStatusCommand.Handler {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
132 private final Map<Kind, List<Path>> kind2names = new TreeMap<Kind, List<Path>>();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
133 private final Map<Path, List<Kind>> name2kinds = new TreeMap<Path, List<Kind>>();
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
134
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
135 public void handleStatus(HgStatus s) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
136 List<Path> l = kind2names.get(s.getKind());
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
137 if (l == null) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
138 kind2names.put(s.getKind(), l = new LinkedList<Path>());
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
139 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
140 l.add(s.getPath());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
141 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
142 List<Kind> k = name2kinds.get(s.getPath());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
143 if (k == null) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
144 name2kinds.put(s.getPath(), k = new LinkedList<Kind>());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
145 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
146 k.add(s.getKind());
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
147 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
148
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
149 public List<Path> get(Kind k) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
150 List<Path> rv = kind2names.get(k);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
151 return rv == null ? Collections.<Path>emptyList() : rv;
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
152 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
153
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
154 public List<Kind> get(Path p) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
155 List<Kind> rv = name2kinds.get(p);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
156 return rv == null ? Collections.<Kind>emptyList() : rv;
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
157 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
158 }
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
159
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
160 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
161 * status-1/dir/file5 was added in rev 8, scheduled (hg remove file5) for removal, but not yet committed
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
162 * Erroneously reported extra REMOVED file (the one added and removed in between). Shall not
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
163 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
164 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
165 public void testRemovedAgainstBaseWithoutIt() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
166 // check very end of WCStatusCollector, foreach left knownEntry, collect == null || baseRevFiles.contains()
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
167 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
168 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
169 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
170 cmd.all().base(7).execute(sc);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
171 Path file5 = Path.create("dir/file5");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
172 // shall not be listed at all
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
173 assertTrue(sc.get(file5).isEmpty());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
174 }
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
175
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
176 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
177 * status-1/file2 is tracked, but later .hgignore got entry to ignore it, file2 got modified
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
178 * HG doesn't respect .hgignore for tracked files.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
179 * Now reported as ignored and missing(?!).
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
180 * Shall be reported as modified.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
181 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
182 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
183 public void testTrackedModifiedIgnored() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
184 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
185 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
186 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
187 cmd.all().execute(sc);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
188 final Path file2 = Path.create("file2");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
189 assertTrue(sc.get(file2).contains(Modified));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
190 assertTrue(sc.get(file2).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
191 }
76
658fa6b3a371 Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 75
diff changeset
192
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
193 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
194 * status/dir/file4, added in rev 3, has been scheduled for removal (hg remove -Af file4), but still there in the WC.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
195 * Shall be reported as Removed, when comparing against rev 3
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
196 * (despite both rev 3 and WC's parent has file4, there are different paths in the code for wc against parent and wc against rev)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
197 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
198 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
199 public void testMarkedRemovedButStillInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
200 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
201 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
202 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
203 cmd.all().execute(sc);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
204 Path file4 = Path.create("dir/file4");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
205 assertTrue(sc.get(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
206 assertTrue(sc.get(file4).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
207 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
208 // different code path (collect != null)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
209 cmd.base(3).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
210 assertTrue(sc.get(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
211 assertTrue(sc.get(file4).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
212 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
213 // wasn't there in rev 2, shall not be reported at all
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
214 cmd.base(2).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
215 assertTrue(sc.get(file4).isEmpty());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
216 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
217
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
218 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
219 * status-1/dir/file3 tracked, listed in .hgignore since rev 4, removed (hg remove file3) from repo and WC
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
220 * (but entry in .hgignore left) in revision 5, and new file3 got created in WC.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
221 * Shall be reported as ignored when comparing against WC's parent,
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
222 * and both ignored and removed when comparing against revision 3
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
223 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
224 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
225 public void testRemovedIgnoredInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
226 // check branch !known, ignored
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
227 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
228 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
229 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
230 cmd.all().execute(sc);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
231 final Path file3 = Path.create("dir/file3");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
232 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
233 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
234 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
235 cmd.base(3).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
236 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
237 assertTrue(sc.get(file3).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
238 assertTrue(sc.get(file3).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
239 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
240 cmd.base(5).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
241 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
242 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
243 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
244 cmd.base(0).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
245 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
246 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
247
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
248 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
249
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
250 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
251 * status/file1 was removed in cset 2. New file with the same name in the WC.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
252 * Shall report 2 statuses (as cmdline hg does): unknown and removed when comparing against that revision.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
253 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
254 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
255 public void testNewFileWithSameNameAsDeletedOld() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
256 // check branch !known, !ignored (=> unknown)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
257 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
258 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
259 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
260 cmd.base(1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
261 cmd.all().execute(sc);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
262 final Path file1 = Path.create("file1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
263 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
264 assertTrue(sc.get(file1).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
265 assertTrue(sc.get(file1).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
266 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
267 // no file1 in rev 2, shall be reported as unknown only
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
268 cmd.base(2).execute(sc = new StatusCollector());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
269 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
270 assertTrue(sc.get(file1).size() == 1);
76
658fa6b3a371 Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 75
diff changeset
271 }
658fa6b3a371 Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 75
diff changeset
272
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
273 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
274 public void testSubTreeStatus() throws Exception {
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
275 repo = Configuration.get().find("status-1");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
276 HgStatusCommand cmd = new HgStatusCommand(repo);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
277 StatusCollector sc = new StatusCollector();
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
278 cmd.match(new PathGlobMatcher("*"));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
279 cmd.all().execute(sc);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
280 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
281 * C .hgignore
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
282 * ? file1
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
283 * M file2
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
284 * C readme
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
285 */
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
286 final Path file1 = Path.create("file1");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
287 assertTrue(sc.get(file1).contains(Unknown));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
288 assertTrue(sc.get(file1).size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
289 assertTrue(sc.get(Removed).isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
290 assertTrue(sc.get(Clean).size() == 2);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
291 assertTrue(sc.get(Modified).size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
292 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
293 cmd.match(new PathGlobMatcher("dir/*")).execute(sc = new StatusCollector());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
294 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
295 * I dir/file3
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
296 * R dir/file4
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
297 * R dir/file5
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
298 */
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
299 assertTrue(sc.get(Modified).isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
300 assertTrue(sc.get(Added).isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
301 assertTrue(sc.get(Ignored).size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
302 assertTrue(sc.get(Removed).size() == 2);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
303 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
304
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
305
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
306 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
307 public void testSpecificFileStatus() throws Exception {
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
308 repo = Configuration.get().find("status-1");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
309 // files only
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
310 final Path file2 = Path.create("file2");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
311 final Path file3 = Path.create("dir/file3");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
312 HgWorkingCopyStatusCollector sc = HgWorkingCopyStatusCollector.create(repo, file2, file3);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
313 HgStatusCollector.Record r = new HgStatusCollector.Record();
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
314 sc.walk(TIP, r);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
315 assertTrue(r.getAdded().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
316 assertTrue(r.getRemoved().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
317 assertTrue(r.getUnknown().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
318 assertTrue(r.getClean().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
319 assertTrue(r.getMissing().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
320 assertTrue(r.getCopied().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
321 assertTrue(r.getIgnored().contains(file3));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
322 assertTrue(r.getIgnored().size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
323 assertTrue(r.getModified().contains(file2));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
324 assertTrue(r.getModified().size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
325 // mix files and directories
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
326 final Path readme = Path.create("readme");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
327 final Path dir = Path.create("dir/");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
328 sc = HgWorkingCopyStatusCollector.create(repo, readme, dir);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
329 sc.walk(TIP, r = new HgStatusCollector.Record());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
330 assertTrue(r.getAdded().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
331 assertTrue(r.getRemoved().size() == 2);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
332 for (Path p : r.getRemoved()) {
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
333 assertEquals(p.compareWith(dir), Path.CompareResult.Nested);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
334 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
335 assertTrue(r.getUnknown().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
336 assertTrue(r.getClean().size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
337 assertTrue(r.getClean().contains(readme));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
338 assertTrue(r.getMissing().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
339 assertTrue(r.getCopied().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
340 assertTrue(r.getIgnored().contains(file3));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
341 assertTrue(r.getIgnored().size() == 1);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
342 assertTrue(r.getModified().isEmpty());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
343 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
344
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
345 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
346 public void testSameResultDirectPathVsMatcher() throws Exception {
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
347 repo = Configuration.get().find("status-1");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
348 final Path file3 = Path.create("dir/file3");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
349 final Path file5 = Path.create("dir/file5");
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
350
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
351 HgWorkingCopyStatusCollector sc = HgWorkingCopyStatusCollector.create(repo, file3, file5);
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
352 HgStatusCollector.Record r;
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
353 sc.walk(TIP, r = new HgStatusCollector.Record());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
354 assertTrue(r.getRemoved().contains(file5));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
355 assertTrue(r.getIgnored().contains(file3));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
356 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
357 // query for the same file, but with
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
358 sc = HgWorkingCopyStatusCollector.create(repo, new PathGlobMatcher(file3.toString(), file5.toString()));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
359 sc.walk(TIP, r = new HgStatusCollector.Record());
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
360 assertTrue(r.getRemoved().contains(file5));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
361 assertTrue(r.getIgnored().contains(file3));
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
362 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
363
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
364 /*
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
365 * With warm-up of previous tests, 10 runs, time in milliseconds
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
366 * 'hg status -A': Native client total 953 (95 per run), Java client 94 (9)
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
367 * 'hg status -A --rev 3:80': Native client total 1828 (182 per run), Java client 235 (23)
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
368 * 'hg log --debug', 10 runs: Native client total 1766 (176 per run), Java client 78 (7)
147
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
369 *
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
370 * 18.02.2011
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
371 * 'hg status -A --rev 3:80', 10 runs: Native client total 2000 (200 per run), Java client 250 (25)
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
372 * 'hg log --debug', 10 runs: Native client total 2297 (229 per run), Java client 125 (12)
162
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
373 *
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
374 * 9.3.2011 (DataAccess instead of byte[] in ReflogStream.Inspector
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
375 * 'hg status -A', 10 runs: Native client total 1516 (151 per run), Java client 219 (21)
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
376 * 'hg status -A --rev 3:80', 10 runs: Native client total 1875 (187 per run), Java client 3187 (318) (!!! ???)
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
377 * 'hg log --debug', 10 runs: Native client total 2484 (248 per run), Java client 344 (34)
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
378 */
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
379 public void testPerformance() throws Exception {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
380 final int runs = 10;
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
381 final long start1 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
382 for (int i = 0; i < runs; i++) {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
383 statusParser.reset();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
384 eh.run("hg", "status", "-A", "--rev", "3:80");
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
385 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
386 final long start2 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
387 for (int i = 0; i < runs; i++) {
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
388 StatusCollector r = new StatusCollector();
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
389 new HgStatusCommand(repo).all().base(3).revision(80).execute(r);
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
390 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
391 final long end = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
392 System.out.printf("'hg status -A --rev 3:80', %d runs: Native client total %d (%d per run), Java client %d (%d)\n", runs, start2-start1, (start2-start1)/runs, end-start2, (end-start2)/runs);
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
393 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
394
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
395 private void report(String what, StatusCollector r) {
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
396 reportNotEqual(what + "#MODIFIED", r.get(Modified), statusParser.getModified());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
397 reportNotEqual(what + "#ADDED", r.get(Added), statusParser.getAdded());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
398 reportNotEqual(what + "#REMOVED", r.get(Removed), statusParser.getRemoved());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
399 reportNotEqual(what + "#CLEAN", r.get(Clean), statusParser.getClean());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
400 reportNotEqual(what + "#IGNORED", r.get(Ignored), statusParser.getIgnored());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
401 reportNotEqual(what + "#MISSING", r.get(Missing), statusParser.getMissing());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
402 reportNotEqual(what + "#UNKNOWN", r.get(Unknown), statusParser.getUnknown());
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
403 // FIXME test copies
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
404 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
405
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
406 private void report(String what, HgStatusCollector.Record r, StatusOutputParser statusParser) {
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
407 reportNotEqual(what + "#MODIFIED", r.getModified(), statusParser.getModified());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
408 reportNotEqual(what + "#ADDED", r.getAdded(), statusParser.getAdded());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
409 reportNotEqual(what + "#REMOVED", r.getRemoved(), statusParser.getRemoved());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
410 reportNotEqual(what + "#CLEAN", r.getClean(), statusParser.getClean());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
411 reportNotEqual(what + "#IGNORED", r.getIgnored(), statusParser.getIgnored());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
412 reportNotEqual(what + "#MISSING", r.getMissing(), statusParser.getMissing());
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
413 reportNotEqual(what + "#UNKNOWN", r.getUnknown(), statusParser.getUnknown());
93
d55d4eedfc57 Switch to Path instead of String in filenames returned by various status operations
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 88
diff changeset
414 List<Path> copiedKeyDiff = difference(r.getCopied().keySet(), statusParser.getCopied().keySet());
d55d4eedfc57 Switch to Path instead of String in filenames returned by various status operations
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 88
diff changeset
415 HashMap<Path, String> copyDiff = new HashMap<Path,String>();
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
416 if (copiedKeyDiff.isEmpty()) {
93
d55d4eedfc57 Switch to Path instead of String in filenames returned by various status operations
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 88
diff changeset
417 for (Path jk : r.getCopied().keySet()) {
d55d4eedfc57 Switch to Path instead of String in filenames returned by various status operations
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 88
diff changeset
418 Path jv = r.getCopied().get(jk);
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
419 if (statusParser.getCopied().containsKey(jk)) {
93
d55d4eedfc57 Switch to Path instead of String in filenames returned by various status operations
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 88
diff changeset
420 Path cmdv = statusParser.getCopied().get(jk);
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
421 if (!jv.equals(cmdv)) {
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
422 copyDiff.put(jk, jv + " instead of " + cmdv);
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
423 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
424 } else {
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
425 copyDiff.put(jk, "ERRONEOUSLY REPORTED IN JAVA");
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
426 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
427 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
428 }
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
429 errorCollector.checkThat(what + "#Non-matching 'copied' keys: ", copiedKeyDiff, equalTo(Collections.<Path>emptyList()));
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
430 errorCollector.checkThat(what + "#COPIED", copyDiff, equalTo(Collections.<Path,String>emptyMap()));
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
431 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
432
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
433 private <T> void reportNotEqual(String what, Collection<T> l1, Collection<T> l2) {
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
434 List<T> diff = difference(l1, l2);
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
435 errorCollector.checkThat(what, diff, equalTo(Collections.<T>emptyList()));
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
436 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
437
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
438 private static <T> List<T> difference(Collection<T> l1, Collection<T> l2) {
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
439 LinkedList<T> result = new LinkedList<T>(l2);
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
440 for (T t : l1) {
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
441 if (l2.contains(t)) {
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
442 result.remove(t);
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
443 } else {
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
444 result.add(t);
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
445 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
446 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
447 return result;
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
448 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
449 }