annotate test/org/tmatesoft/hg/test/TestStatus.java @ 429:cd658b24a620

FIXMEs: javadoc, proper use of constants
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 29 Mar 2012 18:29:03 +0200
parents 31a89587eb04
children 6865eb742883
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 /*
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
2 * Copyright (c) 2011-2012 TMate Software Ltd
66
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;
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
24 import static org.tmatesoft.hg.repo.HgRepository.WORKING_COPY;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
25
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
26 import java.io.File;
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
27 import java.util.ArrayList;
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.Collection;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
29 import java.util.Collections;
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
30 import java.util.HashMap;
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
31 import java.util.LinkedHashMap;
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 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
33 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
34 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
35 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
36
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
37 import org.junit.Assume;
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
38 import org.junit.Ignore;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
39 import org.junit.Rule;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
40 import org.junit.Test;
127
2e395db595e2 Moved HgStatus to toplevel
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 109
diff changeset
41 import org.tmatesoft.hg.core.HgStatus;
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
42 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
43 import org.tmatesoft.hg.core.HgStatusCommand;
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
44 import org.tmatesoft.hg.core.HgStatusHandler;
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
45 import org.tmatesoft.hg.internal.PathGlobMatcher;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
46 import org.tmatesoft.hg.repo.HgLookup;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 68
diff changeset
47 import org.tmatesoft.hg.repo.HgRepository;
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
48 import org.tmatesoft.hg.repo.HgStatusCollector;
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
49 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
50 import org.tmatesoft.hg.util.Path;
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
51 import org.tmatesoft.hg.util.Status;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
52
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
53
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
54 /**
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
55 *
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
56 * @author Artem Tikhomirov
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
57 * @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
58 */
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
59 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
60
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
61 @Rule
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
62 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
63
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
64 private HgRepository repo;
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
65 private StatusOutputParser statusParser;
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
66 private ExecHelper eh;
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
67
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
68 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
69 TestStatus test = new TestStatus();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
70 test.testLowLevel();
99
4d7bb95d553b StatusCommand().add should list copies
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
71 test.testStatusCommand();
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
72 test.testPerformance();
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
73 test.errorCollector.verify();
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
74 //
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
75 TestStatus t2 = new TestStatus(new HgLookup().detect("/temp/hg/hg4j-merging/hg4j"));
283
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
76 t2.testDirstateParentOtherThanTipWithUpdate();
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
77 t2.errorCollector.verify();
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
78 TestStatus t3 = new TestStatus(new HgLookup().detect("/temp/hg/cpython"));
283
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
79 t3.testDirstateParentOtherThanTipNoUpdate();
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
80 t3.errorCollector.verify();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
81 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
82
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
83 public TestStatus() throws Exception {
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
84 this(new HgLookup().detectFromWorkingDir());
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
85 }
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
86
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
87 private TestStatus(HgRepository hgRepo) {
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
88 repo = hgRepo;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
89 Assume.assumeTrue(!repo.isInvalid());
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
90 statusParser = new StatusOutputParser();
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
91 eh = new ExecHelper(statusParser, hgRepo.getWorkingDir());
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
92 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
93
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
94 @Test
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
95 public void testLowLevel() throws Exception {
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
96 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
97 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
98 eh.run("hg", "status", "-A");
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
99 HgStatusCollector.Record r = wcc.status(HgRepository.TIP);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
100 report("hg status -A", r, statusParser);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
101 //
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
102 statusParser.reset();
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
103 int revision = 3;
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
104 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
105 r = wcc.status(revision);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
106 report("status -A --rev " + revision, r, statusParser);
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
107 //
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
108 statusParser.reset();
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
109 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
110 r = new HgStatusCollector.Record();
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
111 new HgStatusCollector(repo).change(revision, r);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
112 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
113 //
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
114 statusParser.reset();
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
115 int rev2 = 80;
61eedab3eb3e Status between two revisions to recognize copy/rename
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 76
diff changeset
116 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
117 eh.run("hg", "status", "-A", "--rev", range);
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
118 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
119 report("Status -A -rev " + range, r, statusParser);
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
120 }
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
121
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
122 /**
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
123 * hg up --rev <earlier rev>; hg status
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
124 *
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
125 * To check if HgWorkingCopyStatusCollector respects actual working copy parent (takes from dirstate)
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
126 * and if status is calculated correctly
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
127 */
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
128 @Test
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
129 @Ignore("modifies test repository, needs careful configuration")
283
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
130 public void testDirstateParentOtherThanTipWithUpdate() throws Exception {
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
131 int revToUpdate = 238;
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
132 try {
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
133 eh.run("hg", "up", "--rev", String.valueOf(revToUpdate));
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
134 testDirstateParentOtherThanTipNoUpdate();
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
135 } finally {
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
136 eh.run("hg", "up");
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
137 }
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
138 }
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
139
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
140 @Test
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
141 @Ignore("needs configuration as it requires special repository")
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
142 public void testDirstateParentOtherThanTipNoUpdate() throws Exception {
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
143 final HgWorkingCopyStatusCollector wcc = new HgWorkingCopyStatusCollector(repo);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
144 statusParser.reset();
283
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
145 //
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
146 eh.run("hg", "status", "-A");
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
147 HgStatusCollector.Record r = wcc.status(HgRepository.TIP);
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
148 report("hg status -A", r, statusParser);
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
149 //
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
150 statusParser.reset();
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
151 int revision = 3;
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
152 eh.run("hg", "status", "-A", "--rev", String.valueOf(revision));
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
153 r = wcc.status(revision);
7a8e1a305a78 Ignored tests shall be valid tests nevertheless
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 282
diff changeset
154 report("status -A --rev " + revision, r, statusParser);
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
155 }
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
156
62
25819103de17 Few more tests for status
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 61
diff changeset
157
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
158 @Test
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
159 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
160 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
161 StatusCollector r;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
162 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
163 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
164 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
165 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
166 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
167 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
168 int revision = 3;
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
169 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
170 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
171 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
172 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
173 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
174 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
175 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
176 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
177
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
178 // 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
179 }
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
180
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
181 private static class StatusCollector implements HgStatusHandler {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
182 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
183 private final Map<Path, List<Kind>> name2kinds = new TreeMap<Path, List<Kind>>();
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
184 private final Map<Path, Status> name2error = new LinkedHashMap<Path, Status>();
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
185
427
31a89587eb04 FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 418
diff changeset
186 public void status(HgStatus s) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
187 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
188 if (l == null) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
189 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
190 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
191 l.add(s.getPath());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
192 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
193 List<Kind> k = name2kinds.get(s.getPath());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
194 if (k == null) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
195 name2kinds.put(s.getPath(), k = new LinkedList<Kind>());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
196 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
197 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
198 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
199
427
31a89587eb04 FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 418
diff changeset
200 public void error(Path file, Status s) {
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
201 name2error.put(file, s);
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
202 }
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
203
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
204 public List<Path> get(Kind k) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
205 List<Path> rv = kind2names.get(k);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
206 return rv == null ? Collections.<Path>emptyList() : rv;
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
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
209 public List<Kind> get(Path p) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
210 List<Kind> rv = name2kinds.get(p);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
211 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
212 }
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
213
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
214 public Map<Path, Status> getErrors() {
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
215 return name2error;
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
216 }
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
217 }
224
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 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
220 * 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
221 * 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
222 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
223 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
224 public void testRemovedAgainstBaseWithoutIt() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
225 // 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
226 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
227 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
228 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
229 cmd.all().base(7).execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
230 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
231 Path file5 = Path.create("dir/file5");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
232 // shall not be listed at all
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
233 assertTrue(sc.get(file5).isEmpty());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
234 }
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
235
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
236 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
237 * 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
238 * HG doesn't respect .hgignore for tracked files.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
239 * Now reported as ignored and missing(?!).
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
240 * Shall be reported as modified.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
241 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
242 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
243 public void testTrackedModifiedIgnored() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
244 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
245 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
246 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
247 cmd.all().execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
248 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
249 final Path file2 = Path.create("file2");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
250 assertTrue(sc.get(file2).contains(Modified));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
251 assertTrue(sc.get(file2).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
252 }
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
253
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
254 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
255 * 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
256 * 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
257 * (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
258 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
259 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
260 public void testMarkedRemovedButStillInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
261 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
262 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
263 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
264 cmd.all().execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
265 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
266 Path file4 = Path.create("dir/file4");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
267 assertTrue(sc.get(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
268 assertTrue(sc.get(file4).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
269 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
270 // different code path (collect != null)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
271 cmd.base(3).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
272 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
273 assertTrue(sc.get(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
274 assertTrue(sc.get(file4).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
275 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
276 // 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
277 cmd.base(2).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
278 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
279 assertTrue(sc.get(file4).isEmpty());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
280 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
281
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
282 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
283 * 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
284 * (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
285 * 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
286 * 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
287 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
288 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
289 public void testRemovedIgnoredInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
290 // check branch !known, ignored
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
291 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
292 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
293 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
294 cmd.all().execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
295 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
296 final Path file3 = Path.create("dir/file3");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
297 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
298 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
299 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
300 cmd.base(3).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
301 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
302 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
303 assertTrue(sc.get(file3).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
304 assertTrue(sc.get(file3).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
305 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
306 cmd.base(5).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
307 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
308 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
309 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
310 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
311 cmd.base(0).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
312 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
313 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
314 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
315
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
316 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
317
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
318 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
319 * 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
320 * 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
321 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
322 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
323 public void testNewFileWithSameNameAsDeletedOld() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
324 // check branch !known, !ignored (=> unknown)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
325 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
326 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
327 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
328 cmd.base(1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
329 cmd.all().execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
330 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
331 final Path file1 = Path.create("file1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
332 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
333 assertTrue(sc.get(file1).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
334 assertTrue(sc.get(file1).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
335 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
336 // 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
337 cmd.base(2).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
338 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
339 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
340 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
341 }
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
342
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
343 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
344 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
345 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
346 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
347 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
348 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
349 cmd.all().execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
350 assertTrue(sc.getErrors().isEmpty());
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
351 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
352 * C .hgignore
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
353 * ? file1
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
354 * M file2
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
355 * C readme
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 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
358 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
359 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
360 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
361 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
362 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
363 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
364 cmd.match(new PathGlobMatcher("dir/*")).execute(sc = new StatusCollector());
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
365 assertTrue(sc.getErrors().isEmpty());
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
366 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
367 * I dir/file3
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
368 * R dir/file4
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
369 * R dir/file5
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
370 */
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
371 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
372 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
373 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
374 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
375 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
376
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
377
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
378 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
379 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
380 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
381 // files only
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
382 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
383 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
384 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
385 HgStatusCollector.Record r = new HgStatusCollector.Record();
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
386 sc.walk(WORKING_COPY, r);
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
387 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
388 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
389 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
390 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
391 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
392 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
393 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
394 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
395 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
396 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
397 // 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
398 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
399 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
400 sc = HgWorkingCopyStatusCollector.create(repo, readme, dir);
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
401 sc.walk(WORKING_COPY, r = new HgStatusCollector.Record());
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
402 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
403 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
404 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
405 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
406 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
407 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
408 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
409 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
410 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
411 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
412 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
413 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
414 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
415 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
416
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
417 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
418 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
419 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
420 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
421 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
422
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
423 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
424 HgStatusCollector.Record r;
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
425 sc.walk(WORKING_COPY, r = new HgStatusCollector.Record());
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
426 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
427 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
428 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
429 // 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
430 sc = HgWorkingCopyStatusCollector.create(repo, new PathGlobMatcher(file3.toString(), file5.toString()));
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
431 sc.walk(WORKING_COPY, r = new HgStatusCollector.Record());
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
432 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
433 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
434 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
435
230
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
436 @Test
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
437 public void testScopeInHistoricalStatus() throws Exception {
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
438 repo = Configuration.get().find("status-1");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
439 HgStatusCommand cmd = new HgStatusCommand(repo);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
440 cmd.base(3).revision(8).all();
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
441 cmd.match(new PathGlobMatcher("dir/*"));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
442 StatusCollector sc = new StatusCollector();
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
443 cmd.execute(sc);
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
444 assertTrue(sc.getErrors().isEmpty());
230
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
445 final Path file3 = Path.create("dir/file3");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
446 final Path file4 = Path.create("dir/file4");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
447 final Path file5 = Path.create("dir/file5");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
448 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
449 assertTrue(sc.get(file3).contains(Removed));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
450 assertTrue(sc.get(file3).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
451 assertTrue(sc.get(Removed).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
452 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
453 assertTrue(sc.get(file4).contains(Clean));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
454 assertTrue(sc.get(file4).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
455 assertTrue(sc.get(Clean).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
456 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
457 assertTrue(sc.get(file5).contains(Added));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
458 assertTrue(sc.get(file5).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
459 assertTrue(sc.get(Added).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
460
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
461 }
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
462
372
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
463 /**
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
464 * Issue 22
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
465 */
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
466 @Test
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
467 public void testOnEmptyRepositoryWithAllFilesDeleted() throws Exception {
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
468 repo = Configuration.get().find("status-2");
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
469 HgStatusCommand cmd = new HgStatusCommand(repo);
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
470 cmd.all();
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
471 StatusCollector sc = new StatusCollector();
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
472 cmd.execute(sc);
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
473 // shall pass without exception
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
474 assertTrue(sc.getErrors().isEmpty());
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
475 for (HgStatus.Kind k : HgStatus.Kind.values()) {
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
476 assertTrue("Kind " + k.name() + " shall be empty",sc.get(k).isEmpty());
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
477 }
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
478 }
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
479
377
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
480 /**
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
481 * Issue 22, two subsequent commits that remove all repository files, each in a different branch.
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
482 * Here's excerpt from my RevlogWriter utility:
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
483 * <pre>
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
484 * final List<String> filesList = Collections.singletonList("file1");
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
485 * //
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
486 * file1.writeUncompressed(-1, -1, 0, 0, "garbage".getBytes());
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
487 * //
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
488 * ManifestBuilder mb = new ManifestBuilder();
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
489 * mb.reset().add("file1", file1.getRevision(0));
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
490 * manifest.writeUncompressed(-1, -1, 0, 0, mb.build()); // manifest revision 0
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
491 * final byte[] cset1 = buildChangelogEntry(manifest.getRevision(0), Collections.<String, String>emptyMap(), filesList, "Add a file");
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
492 * changelog.writeUncompressed(-1, -1, 0, 0, cset1);
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
493 * //
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
494 * // pretend we delete all files in a branch 1
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
495 * manifest.writeUncompressed(0, -1, 1, 1, new byte[0]); // manifest revision 1
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
496 * final byte[] cset2 = buildChangelogEntry(manifest.getRevision(1), Collections.singletonMap("branch", "delete-all-1"), filesList, "Delete all files in a first branch");
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
497 * changelog.writeUncompressed(0, -1, 1, 1, cset2);
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
498 * //
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
499 * // pretend we delete all files in a branch 2 (which is based on revision 0, same as branch 1)
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
500 * manifest.writeUncompressed(1, -1, 1 /*!!! here comes baseRevision != index * /, 2, new byte[0]); // manifest revision 2
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
501 * final byte[] cset3 = buildChangelogEntry(manifest.getRevision(2), Collections.singletonMap("branch", "delete-all-2"), filesList, "Again delete all files but in another branch");
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
502 * changelog.writeUncompressed(0, -1, 2, 2, cset3);
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
503 * </pre>
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
504 */
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
505 @Test
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
506 public void testOnEmptyRepositoryWithAllFilesDeletedInBranch() throws Exception {
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
507 repo = Configuration.get().find("status-3");
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
508 HgStatusCommand cmd = new HgStatusCommand(repo);
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
509 cmd.all();
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
510 StatusCollector sc = new StatusCollector();
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
511 cmd.execute(sc);
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
512 // shall pass without exception
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
513 assertTrue(sc.getErrors().isEmpty());
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
514 for (HgStatus.Kind k : HgStatus.Kind.values()) {
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
515 assertTrue("Kind " + k.name() + " shall be empty",sc.get(k).isEmpty());
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
516 }
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
517 }
387
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
518
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
519 /**
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
520 * Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest)
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
521 */
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
522 @Test
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
523 public void testImportedRepoWithOddManifestRevisions() throws Exception {
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
524 repo = Configuration.get().find("status-4");
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
525 HgStatusCommand cmd = new HgStatusCommand(repo);
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
526 cmd.all();
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
527 StatusCollector sc = new StatusCollector();
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
528 cmd.execute(sc);
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
529 // shall pass without exception
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
530 assertTrue(sc.getErrors().isEmpty());
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
531 }
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
532
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
533 /**
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
534 * Issue 24: IllegalArgumentException in FilterDataAccess
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
535 * There were two related defects in RevlogStream
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
536 * a) for compressedLen == 0, a byte was read and FilterDataAccess (of length 0, but it didn't help too much) was created - first byte happen to be 0.
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
537 * Patch was not applied (userDataAccess.isEmpty() check thanks to Issue 22)
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
538 * b) That FilterDataAccess (with 0 size represents patch more or less relevantly, but didn't represent actual revision) get successfully
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
539 * reassigned as lastUserData for the next iteration. And at the next step attempt to apply patch recorded in the next revision failed
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
540 * because baseRevisionData is 0 length FilterDataAccess
399
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
541 *
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
542 * Same applies for
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
543 * Issue 25: IOException: Underflow. Rewind past end of the slice in InflaterDataAccess
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
544 * with the difference in separate .i and .d (thus not 0 but 'x' first byte was read)
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
545 *
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
546 * Sample:
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
547 * status-5/file1 has 3 revisions, second is zero-length patch:
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
548 * Index Offset Packed Actual Base Rev
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
549 * 0: 0 8 7 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
550 * DATA
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
551 * 1: 8 0 7 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
552 * NO DATA
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
553 * 2: 8 14 6 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
554 * PATCH
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
555 */
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
556 @Test
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
557 public void testZeroLengthPatchAgainstNonEmptyBaseRev() throws Exception{
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
558 repo = Configuration.get().find("status-5");
399
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
559 // pretend we modified files in the working copy
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
560 // for HgWorkingCopyStatusCollector to go and retrieve its content from repository
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
561 File f1 = new File(repo.getWorkingDir(), "file1");
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
562 f1.setLastModified(System.currentTimeMillis());
399
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
563 File f3 = new File(repo.getWorkingDir(), "file3");
fdc1db8f7f61 Issue 25: Underflow in InflaterDataAccess; test and fix for hang up when reading past end of compressed data (or zero-length data)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 397
diff changeset
564 f3.setLastModified(System.currentTimeMillis());
397
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
565 //
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
566 HgStatusCommand cmd = new HgStatusCommand(repo);
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
567 cmd.all();
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
568 StatusCollector sc = new StatusCollector();
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
569 cmd.execute(sc);
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
570 // shall pass without exception
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
571 //
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
572 for (Map.Entry<Path,Status> e : sc.getErrors().entrySet()) {
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
573 System.out.printf("%s : (%s %s)\n", e.getKey(), e.getValue().getKind(), e.getValue().getMessage());
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
574 }
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
575 assertTrue(sc.getErrors().isEmpty());
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
576 }
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
577
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
578 /**
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
579 * Issue 26: UnsupportedOperationException when patching empty base revision
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
580 *
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
581 * Sample:
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
582 * status-5/file2 has 3 revisions, second is patch (complete revision content in a form of the patch) for empty base revision:
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
583 * Index Offset Packed Actual Base Rev
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
584 * 0: 0 0 0 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
585 * NO DATA
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
586 * 1: 0 20 7 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
587 * PATCH: 0..0, 7:garbage
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
588 * 2: 20 16 7 0
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
589 */
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
590 @Test
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
591 public void testPatchZeroLengthBaseRevision() throws Exception {
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
592 repo = Configuration.get().find("status-5");
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
593 // touch the file to force content retrieval
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
594 File f2 = new File(repo.getWorkingDir(), "file2");
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
595 f2.setLastModified(System.currentTimeMillis());
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
596 //
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
597 HgStatusCommand cmd = new HgStatusCommand(repo);
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
598 cmd.all();
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
599 StatusCollector sc = new StatusCollector();
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
600 cmd.execute(sc);
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
601 // shall pass without exception
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
602 //
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
603 for (Map.Entry<Path,Status> e : sc.getErrors().entrySet()) {
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
604 System.out.printf("%s : (%s %s)\n", e.getKey(), e.getValue().getKind(), e.getValue().getMessage());
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
605 }
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
606 assertTrue(sc.getErrors().isEmpty());
5e95b0da26f2 Issue 24: IAE, Underflow in FilterDataAccess. Issue 26:UnsupportedOperationException when patching empty base revision. Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 387
diff changeset
607 }
377
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
608
86f049e6bcae Issue 22: Test for subsequent empty manifest entries case for separate .i and .d repository control files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 372
diff changeset
609
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
610 /*
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
611 * 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
612 * '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
613 * '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
614 * '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
615 *
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
616 * 18.02.2011
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
617 * '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
618 * '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
619 *
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
620 * 9.3.2011 (DataAccess instead of byte[] in ReflogStream.Inspector
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
621 * '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
622 * '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
623 * '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
624 */
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
625 public void testPerformance() throws Exception {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
626 final int runs = 10;
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
627 final long start1 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
628 for (int i = 0; i < runs; i++) {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
629 statusParser.reset();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
630 eh.run("hg", "status", "-A", "--rev", "3:80");
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
631 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
632 final long start2 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
633 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
634 StatusCollector r = new StatusCollector();
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
635 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
636 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
637 final long end = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
638 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
639 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
640
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
641 private void report(String what, StatusCollector r) {
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
642 assertTrue(r.getErrors().isEmpty());
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
643 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
644 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
645 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
646 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
647 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
648 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
649 reportNotEqual(what + "#UNKNOWN", r.get(Unknown), statusParser.getUnknown());
418
528b6780a8bd A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 399
diff changeset
650 // TODO test copies
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
651 }
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
652
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
653 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
654 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
655 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
656 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
657 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
658 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
659 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
660 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
661 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
662 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
663 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
664 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
665 Path jv = r.getCopied().get(jk);
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
666 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
667 Path cmdv = statusParser.getCopied().get(jk);
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
668 if (!jv.equals(cmdv)) {
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
669 copyDiff.put(jk, jv + " instead of " + cmdv);
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
670 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
671 } else {
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
672 copyDiff.put(jk, "ERRONEOUSLY REPORTED IN JAVA");
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
673 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
674 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
675 }
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
676 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
677 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
678 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
679
282
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
680 private <T extends Comparable<? super T>> void reportNotEqual(String what, Collection<T> l1, Collection<T> l2) {
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
681 // List<T> diff = difference(l1, l2);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
682 // errorCollector.checkThat(what, diff, equalTo(Collections.<T>emptyList()));
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
683 ArrayList<T> sl1 = new ArrayList<T>(l1);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
684 Collections.sort(sl1);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
685 ArrayList<T> sl2 = new ArrayList<T>(l2);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
686 Collections.sort(sl2);
e51dd9a14b6f Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 230
diff changeset
687 errorCollector.checkThat(what, sl1, equalTo(sl2));
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
688 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
689
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
690 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
691 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
692 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
693 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
694 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
695 } 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
696 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
697 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
698 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
699 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
700 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
701 }