annotate test/org/tmatesoft/hg/test/TestStatus.java @ 713:661e77dc88ba tip

Mac support: respect Mac alternatives of command-line arguments for common unix tools
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sun, 03 Aug 2014 18:09:00 +0200
parents b286222158be
children
rev   line source
61
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
1 /*
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
2 * Copyright (c) 2011-2013 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;
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
20 import static org.junit.Assert.*;
127
2e395db595e2 Moved HgStatus to toplevel
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 109
diff changeset
21 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
22 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
23 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
24
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
25 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
26 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
27 import java.util.Collection;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
28 import java.util.Collections;
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
29 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
30 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
31 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
32 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
33 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
34 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
35
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
36 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
37 import org.junit.Ignore;
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
38 import org.junit.Rule;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
39 import org.junit.Test;
127
2e395db595e2 Moved HgStatus to toplevel
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 109
diff changeset
40 import org.tmatesoft.hg.core.HgStatus;
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
41 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
42 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
43 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
44 import org.tmatesoft.hg.internal.PathGlobMatcher;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
45 import org.tmatesoft.hg.repo.HgLookup;
74
6f1b88693d48 Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 68
diff changeset
46 import org.tmatesoft.hg.repo.HgRepository;
94
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
47 import org.tmatesoft.hg.repo.HgStatusCollector;
af1f3b78b918 *StatusCollector renamed to Hg*StatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 93
diff changeset
48 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
49 import org.tmatesoft.hg.util.Path;
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
50 import org.tmatesoft.hg.util.Outcome;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
51
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
52 /**
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
53 *
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
54 * @author Artem Tikhomirov
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
55 * @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
56 */
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
57 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
58
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
59 @Rule
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
60 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
61
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
62 private HgRepository repo;
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
63 private StatusOutputParser statusParser;
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
64 private ExecHelper eh;
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
65 private StatusReporter sr;
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
66
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
67 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
68 TestStatus test = new TestStatus();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
69 test.testLowLevel();
99
4d7bb95d553b StatusCommand().add should list copies
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 95
diff changeset
70 test.testStatusCommand();
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
71 test.testPerformance();
103
0b2dcca7de9f ErrorCollector in tests to grab multiple errors
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 102
diff changeset
72 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
73 //
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 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
75 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
76 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
77 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
78 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
79 t3.errorCollector.verify();
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
80 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
81
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
82 public TestStatus() throws Exception {
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
83 this(new HgLookup().detectFromWorkingDir());
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
84 }
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 private TestStatus(HgRepository hgRepo) {
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
87 repo = hgRepo;
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
88 Assume.assumeTrue(!repo.isInvalid());
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
89 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
90 eh = new ExecHelper(statusParser, hgRepo.getWorkingDir());
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
91 sr = new StatusReporter(errorCollector, statusParser);
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
92 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
100 sr.report("hg status -A", r);
62
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
106 sr.report("status -A --rev " + revision, r);
62
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
112 sr.report("status -A --change " + revision, r);
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
119 sr.report("Status -A -rev " + range, r);
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)
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
126 * and if status is calculated correctly
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
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
148 sr.report("hg status -A", r);
283
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);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
154 sr.report("status -A --rev " + revision, r);
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
101
777ab7034c1b Switch to JUnit for tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 100
diff changeset
157 @Test
66
52dc3f4cfc76 Primitive test suite in org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 62
diff changeset
158 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
159 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
160 StatusCollector r;
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
161 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
162 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
163 sc.execute(r = new StatusCollector());
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
164 sr.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
165 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
166 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
167 int revision = 3;
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
168 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
169 sc.base(revision).execute(r = new StatusCollector());
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
170 sr.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
171 //
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
172 statusParser.reset();
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
173 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
174 sc.base(TIP).revision(revision).execute(r = new StatusCollector());
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
175 sr.report("status -A --change " + revision, r);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
176
68
0e499fed9b3d StatusCommand with tests. Extra constants to indicate common revision cases
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 66
diff changeset
177 // 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
178 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
179
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
180 static class StatusCollector implements HgStatusHandler {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
181 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
182 private final Map<Path, List<Kind>> name2kinds = new TreeMap<Path, List<Kind>>();
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
183 private final Map<Path, Outcome> name2error = new LinkedHashMap<Path, Outcome>();
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
184 private final Map<Path, Path> new2oldName = new LinkedHashMap<Path, 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
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());
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
192 if (s.isCopy()) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
193 new2oldName.put(s.getPath(), s.getOriginalPath());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
194 }
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
195 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
196 List<Kind> k = name2kinds.get(s.getPath());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
197 if (k == null) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
198 name2kinds.put(s.getPath(), k = new LinkedList<Kind>());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
199 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
200 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
201 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
202
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
203 public void error(Path file, Outcome s) {
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
204 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
205 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
206
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
207 public List<Path> get(Kind k) {
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
208 List<Path> rv = kind2names.get(k);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
209 return rv == null ? Collections.<Path> emptyList() : rv;
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
210 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
211
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
212 public List<Kind> get(Path p) {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
213 List<Kind> rv = name2kinds.get(p);
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
214 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
215 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
216
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
217 public Map<Path, Outcome> getErrors() {
360
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
218 return name2error;
150500515714 Report non-critical errors during status operation to handler/inspector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 283
diff changeset
219 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
220
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
221 public HgStatusCollector.Record asStatusRecord() {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
222 HgStatusCollector.Record rv = new HgStatusCollector.Record();
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
223 for (Path p : get(Modified)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
224 rv.modified(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
225 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
226 for (Path p : get(Added)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
227 if (!new2oldName.containsKey(p)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
228 // new files that are result of a copy get reported separately, below
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
229 rv.added(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
230 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
231 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
232 for (Path p : get(Removed)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
233 rv.removed(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
234 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
235 for (Path p : get(Clean)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
236 rv.clean(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
237 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
238 for (Path p : get(Ignored)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
239 rv.ignored(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
240 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
241 for (Path p : get(Missing)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
242 rv.missing(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
243 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
244 for (Path p : get(Unknown)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
245 rv.unknown(p);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
246 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
247 for (Map.Entry<Path, Path> e : new2oldName.entrySet()) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
248 rv.copied(e.getValue(), e.getKey());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
249 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
250 return rv;
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
251 }
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
252 }
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
253
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
254 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
255 * 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
256 * 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
257 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
258 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
259 public void testRemovedAgainstBaseWithoutIt() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
260 // 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
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().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
265 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
266 Path file5 = Path.create("dir/file5");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
267 // shall not be listed at all
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
268 assertTrue(sc.get(file5).isEmpty());
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
269 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
270
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
271 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
272 * 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
273 * HG doesn't respect .hgignore for tracked files.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
274 * Now reported as ignored and missing(?!).
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
275 * Shall be reported as modified.
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
276 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
277 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
278 public void testTrackedModifiedIgnored() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
279 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
280 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
281 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
282 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
283 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
284 final Path file2 = Path.create("file2");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
285 assertTrue(sc.get(file2).contains(Modified));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
286 assertTrue(sc.get(file2).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
287 }
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
288
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
289 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
290 * status/dir/file4, added in rev 3, has been scheduled for removal (hg remove -Af file4), but still there in the WC.
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
291 * Shall be reported as Removed, when comparing against rev 3
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
292 * (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)
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
293 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
294 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
295 public void testMarkedRemovedButStillInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
296 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
297 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
298 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
299 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
300 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
301 Path file4 = Path.create("dir/file4");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
302 assertTrue(sc.get(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
303 assertTrue(sc.get(file4).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
304 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
305 // different code path (collect != null)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
306 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
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(file4).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
309 assertTrue(sc.get(file4).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 // 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
312 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
313 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
314 assertTrue(sc.get(file4).isEmpty());
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 /*
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
318 * status-1/dir/file3 tracked, listed in .hgignore since rev 4, removed (hg remove file3) from repo and WC
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
319 * (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
320 * Shall be reported as ignored when comparing against WC's parent,
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
321 * and both ignored and removed when comparing against revision 3
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
322 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
323 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
324 public void testRemovedIgnoredInWC() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
325 // check branch !known, ignored
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
326 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
327 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
328 StatusCollector sc = new StatusCollector();
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 file3 = Path.create("dir/file3");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
332 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
333 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
334 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
335 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
336 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
337 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
338 assertTrue(sc.get(file3).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
339 assertTrue(sc.get(file3).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
340 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
341 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
342 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
343 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
344 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
345 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
346 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
347 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
348 assertTrue(sc.get(file3).contains(Ignored));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
349 assertTrue(sc.get(file3).size() == 1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
350
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
351 }
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
352
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
353 /*
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
354 * status/file1 was removed in cset 2. New file with the same name in the WC.
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
355 * Shall report 2 statuses (as cmdline hg does): unknown and removed when comparing against that revision.
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
356 */
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
357 @Test
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
358 public void testNewFileWithSameNameAsDeletedOld() throws Exception {
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
359 // check branch !known, !ignored (=> unknown)
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
360 repo = Configuration.get().find("status-1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
361 HgStatusCommand cmd = new HgStatusCommand(repo);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
362 StatusCollector sc = new StatusCollector();
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
363 cmd.base(1);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
364 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
365 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
366 final Path file1 = Path.create("file1");
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
367 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
368 assertTrue(sc.get(file1).contains(Removed));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
369 assertTrue(sc.get(file1).size() == 2);
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
370 //
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
371 // 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
372 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
373 assertTrue(sc.getErrors().isEmpty());
224
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
374 assertTrue(sc.get(file1).contains(Unknown));
7fe5982bcac0 Few tests for HgWorkingCopyStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 162
diff changeset
375 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
376 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
377
229
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 testSubTreeStatus() 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 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
382 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
383 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
384 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
385 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
386 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
387 * C .hgignore
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
388 * ? file1
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
389 * M file2
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
390 * C readme
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
391 */
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
392 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
393 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
394 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
395 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
396 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
397 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
398 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
399 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
400 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
401 /*
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
402 * I dir/file3
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
403 * R dir/file4
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
404 * R dir/file5
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
405 */
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
406 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
407 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
408 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
409 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
410 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
411
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
412 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
413 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
414 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
415 // files only
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
416 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
417 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
418 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
419 HgStatusCollector.Record r = new HgStatusCollector.Record();
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
420 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
421 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
422 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
423 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
424 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
425 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
426 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
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 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
429 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
430 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
431 // 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
432 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
433 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
434 sc = HgWorkingCopyStatusCollector.create(repo, readme, dir);
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
435 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
436 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
437 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
438 for (Path p : r.getRemoved()) {
458
c95cd5994ba2 Tests: with more precise relations for files/dirs, ImmediateChild is the right expectation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 454
diff changeset
439 assertEquals(Path.CompareResult.ImmediateChild, p.compareWith(dir));
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
440 }
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 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
449 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
450
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
451 @Test
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
452 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
453 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
454 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
455 final Path file5 = Path.create("dir/file5");
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
456
229
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
457 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
458 HgStatusCollector.Record r;
429
cd658b24a620 FIXMEs: javadoc, proper use of constants
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 427
diff changeset
459 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
460 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
461 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
462 //
1ec6b327a6ac Scope for status reworked: explicit files or a general matcher
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 224
diff changeset
463 // 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
464 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
465 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
466 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
467 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
468 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
469
230
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
470 @Test
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
471 public void testScopeInHistoricalStatus() throws Exception {
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
472 repo = Configuration.get().find("status-1");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
473 HgStatusCommand cmd = new HgStatusCommand(repo);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
474 cmd.base(3).revision(8).all();
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
475 cmd.match(new PathGlobMatcher("dir/*"));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
476 StatusCollector sc = new StatusCollector();
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
477 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
478 assertTrue(sc.getErrors().isEmpty());
230
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
479 final Path file3 = Path.create("dir/file3");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
480 final Path file4 = Path.create("dir/file4");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
481 final Path file5 = Path.create("dir/file5");
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
482 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
483 assertTrue(sc.get(file3).contains(Removed));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
484 assertTrue(sc.get(file3).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
485 assertTrue(sc.get(Removed).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
486 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
487 assertTrue(sc.get(file4).contains(Clean));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
488 assertTrue(sc.get(file4).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
489 assertTrue(sc.get(Clean).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
490 //
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
491 assertTrue(sc.get(file5).contains(Added));
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
492 assertTrue(sc.get(file5).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
493 assertTrue(sc.get(Added).size() == 1);
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
494
0dd9da7489dc Test for scoped operation of HgStatusCollector
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 229
diff changeset
495 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
496
372
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
497 /**
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
498 * Issue 22
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
499 */
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
500 @Test
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
501 public void testOnEmptyRepositoryWithAllFilesDeleted() throws Exception {
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
502 repo = Configuration.get().find("status-2");
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
503 HgStatusCommand cmd = new HgStatusCommand(repo);
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
504 cmd.all();
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
505 StatusCollector sc = new StatusCollector();
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
506 cmd.execute(sc);
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
507 // shall pass without exception
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
508 assertTrue(sc.getErrors().isEmpty());
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
509 for (HgStatus.Kind k : HgStatus.Kind.values()) {
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
510 assertTrue("Kind " + k.name() + " shall be empty", sc.get(k).isEmpty());
372
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
511 }
155c1893bda4 Issue 22: UnsupportedOperationException on empty manifest entry
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 360
diff changeset
512 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
513
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
514 /**
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 * 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
516 * Here's excerpt from my RevlogWriter utility:
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
517 *
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
518 * <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
519 * final List<String> filesList = Collections.singletonList("file1");
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
520 * //
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
521 * file1.writeUncompressed(-1, -1, 0, 0, "garbage".getBytes());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
522 * //
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
523 * ManifestBuilder mb = new ManifestBuilder();
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
524 * mb.reset().add("file1", file1.getRevision(0));
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
525 * manifest.writeUncompressed(-1, -1, 0, 0, mb.build()); // manifest revision 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
526 * final byte[] cset1 = buildChangelogEntry(manifest.getRevision(0), Collections.<String, String>emptyMap(), filesList, "Add a file");
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
527 * changelog.writeUncompressed(-1, -1, 0, 0, cset1);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
528 * //
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
529 * // pretend we delete all files in a branch 1
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
530 * manifest.writeUncompressed(0, -1, 1, 1, new byte[0]); // manifest revision 1
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
531 * final byte[] cset2 = buildChangelogEntry(manifest.getRevision(1), Collections.singletonMap("branch", "delete-all-1"), filesList, "Delete all files in a first branch");
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
532 * changelog.writeUncompressed(0, -1, 1, 1, cset2);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
533 * //
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
534 * // pretend we delete all files in a branch 2 (which is based on revision 0, same as branch 1)
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
535 * manifest.writeUncompressed(1, -1, 1 /*!!! here comes baseRevision != index * /, 2, new byte[0]); // manifest revision 2
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
536 * final byte[] cset3 = buildChangelogEntry(manifest.getRevision(2), Collections.singletonMap("branch", "delete-all-2"), filesList, "Again delete all files but in another branch");
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
537 * changelog.writeUncompressed(0, -1, 2, 2, cset3);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
538 * </pre>
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
539 */
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
540 @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
541 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
542 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
543 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
544 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
545 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
546 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
547 // 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
548 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
549 for (HgStatus.Kind k : HgStatus.Kind.values()) {
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
550 assertTrue("Kind " + k.name() + " shall be empty", sc.get(k).isEmpty());
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
551 }
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
552 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
553
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
554 /**
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
555 * Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest)
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
556 */
cdea37239b01 Issue 23: HgInvalidRevisionException for svn imported repository (changeset 0 references nullid manifest). Tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 377
diff changeset
557 @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
558 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
559 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
560 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
561 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
562 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
563 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
564 // 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
565 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
566 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
567
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
568 /**
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 * 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
570 * There were two related defects in RevlogStream
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
571 * 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.
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
572 * Patch was not applied (userDataAccess.isEmpty() check thanks to Issue 22)
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
573 * b) That FilterDataAccess (with 0 size represents patch more or less relevantly, but didn't represent actual revision) get successfully
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
574 * reassigned as lastUserData for the next iteration. And at the next step attempt to apply patch recorded in the next revision failed
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
575 * 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
576 *
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
577 * Same applies for
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
578 * 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
579 * with the difference in separate .i and .d (thus not 0 but 'x' first byte was read)
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
580 *
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
581 * Sample:
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
582 * status-5/file1 has 3 revisions, second is zero-length patch:
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
583 * Index Offset Packed Actual Base Rev
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
584 * 0: 0 8 7 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
585 * DATA
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
586 * 1: 8 0 7 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
587 * NO DATA
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
588 * 2: 8 14 6 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
589 * PATCH
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
590 */
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 @Test
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
592 public void testZeroLengthPatchAgainstNonEmptyBaseRev() throws Exception {
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
593 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
594 // 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
595 // 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
596 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
597 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
598 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
599 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
600 //
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 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
602 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
603 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
604 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
605 // 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
606 //
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
607 for (Map.Entry<Path, Outcome> e : sc.getErrors().entrySet()) {
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
608 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
609 }
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
610 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
611 }
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
612
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
613 /**
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
614 * 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
615 *
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
616 * Sample:
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
617 * status-5/file2 has 3 revisions, second is patch (complete revision content in a form of the patch) for empty base revision:
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
618 * Index Offset Packed Actual Base Rev
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
619 * 0: 0 0 0 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
620 * NO DATA
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
621 * 1: 0 20 7 0
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
622 * PATCH: 0..0, 7:garbage
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
623 * 2: 20 16 7 0
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
624 */
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
625 @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
626 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
627 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
628 // 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
629 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
630 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
631 //
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
632 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
633 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
634 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
635 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
636 // 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
637 //
454
36fd1fd06492 oth.util.Status renamed to Outcome as the noun is too overloaded, especially in scm
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 442
diff changeset
638 for (Map.Entry<Path, Outcome> e : sc.getErrors().entrySet()) {
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
639 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
640 }
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
641 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
642 }
461
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
643
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
644 @Test
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
645 public void testNestedRepositoriesAreNotWalkedIn() throws Exception {
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
646 repo = Configuration.get().find("status-nested-repo");
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
647 File s2 = new File(repo.getWorkingDir(), "skip/s2/.hg/");
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
648 File s1 = new File(repo.getWorkingDir(), "s1/.hg/");
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
649 File s1b = new File(repo.getWorkingDir(), "s1/b");
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
650 assertTrue("[sanity]", s1.exists() && s1.isDirectory());
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
651 assertTrue("[sanity]", s1b.exists() && s1b.isFile());
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
652 assertTrue("[sanity]", s2.exists() && s2.isDirectory());
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
653 StatusCollector sc = new StatusCollector();
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
654 new HgStatusCommand(repo).all().execute(sc);
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
655 List<Path> ignored = sc.get(Ignored);
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
656 assertEquals(1, ignored.size());
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
657 assertEquals(Path.create("skip/a"), ignored.get(0));
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
658 assertTrue(sc.get(Path.create("s1/b")).isEmpty());
613c883e360e Do not walk into nested repositories at all, ignore not only .hg but whole nested repo
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 458
diff changeset
659 }
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
660
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
661 @Test
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
662 public void testDetectRenamesInNonFirstRev() throws Exception {
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
663 repo = Configuration.get().find("log-renames");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
664 eh.cwd(repo.getWorkingDir());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
665 final HgStatusCommand cmd = new HgStatusCommand(repo).defaults();
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
666 StatusCollector sc;
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
667 for (int r : new int[] {2,3,4}) {
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
668 statusParser.reset();
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
669 eh.run("hg", "status", "-C", "--change", String.valueOf(r));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
670 cmd.change(r).execute(sc = new StatusCollector());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
671 sr.report("hg status -C --change " + r, sc);
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
672 }
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
673 // a and d from r5 are missing in r3
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
674 statusParser.reset();
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
675 eh.run("hg", "status", "-C", "--rev", "3", "--rev", "5");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
676 cmd.base(3).revision(5).execute(sc = new StatusCollector());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
677 sr.report("hg status -C 3..5 ", sc);
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
678 //
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
679 // a is c which is initially b
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
680 // d is b which is initially a
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
681 Path fa = Path.create("a");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
682 Path fb = Path.create("b");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
683 Path fc = Path.create("c");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
684 Path fd = Path.create("d");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
685 // neither initial a nor b have isCopy(() == true
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
686 assertFalse("[sanity]", repo.getFileNode(fa).isCopy());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
687 // check HgStatusCollector
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
688 // originals (base revision) doesn't contain first copy origin (there's no b in r2)
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
689 cmd.base(2).revision(5).execute(sc = new StatusCollector());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
690 errorCollector.assertEquals(fa, sc.new2oldName.get(fd));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
691 errorCollector.assertEquals(Collections.singletonList(Removed), sc.get(fc));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
692 // ensure same result with HgWorkingCopyStatusCollector
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
693 cmd.base(2).revision(WORKING_COPY).execute(sc = new StatusCollector());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
694 errorCollector.assertEquals(fa, sc.new2oldName.get(fd));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
695 errorCollector.assertEquals(Collections.singletonList(Removed), sc.get(fc));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
696 // originals (base revision) does contain first copy origin (b is in r1)
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
697 cmd.base(1).revision(5).execute(sc = new StatusCollector());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
698 errorCollector.assertEquals(fa, sc.new2oldName.get(fd));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
699 errorCollector.assertEquals(Collections.singletonList(Removed), sc.get(fb));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 473
diff changeset
700 }
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
701
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
702 /*
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
703 * 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
704 * '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
705 * '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
706 * '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
707 *
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
708 * 18.02.2011
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
709 * 'hg status -A --rev 3:80', 10 runs: Native client total 2000 (200 per run), Java client 250 (25)
147
a05145db4d0c Bring test repos along with us to recreate testbench
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 133
diff changeset
710 * '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
711 *
c17a08095e44 New performance data
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 147
diff changeset
712 * 9.3.2011 (DataAccess instead of byte[] in ReflogStream.Inspector
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
713 * 'hg status -A', 10 runs: Native client total 1516 (151 per run), Java client 219 (21)
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
714 * 'hg status -A --rev 3:80', 10 runs: Native client total 1875 (187 per run), Java client 3187 (318) (!!! ???)
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
715 * '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
716 */
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
717 public void testPerformance() throws Exception {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
718 final int runs = 10;
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
719 final long start1 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
720 for (int i = 0; i < runs; i++) {
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
721 statusParser.reset();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
722 eh.run("hg", "status", "-A", "--rev", "3:80");
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
723 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
724 final long start2 = System.currentTimeMillis();
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
725 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
726 StatusCollector r = new StatusCollector();
131
aa1629f36482 Renamed .core classes to start with Hg prefix
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 127
diff changeset
727 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
728 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
729 final long end = System.currentTimeMillis();
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
730 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,
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
731 (end - start2) / runs);
100
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
732 }
b71b3f7d24d4 Primitive performance test
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 99
diff changeset
733
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
734 static class StatusReporter {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
735 private final StatusOutputParser statusParser;
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
736 private final ErrorCollectorExt errorCollector;
109
dd4d2d0e42cd Handler for StatusCommand to get notifications in the form of HgStatus object
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 103
diff changeset
737
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
738 public StatusReporter(ErrorCollectorExt ec, StatusOutputParser sp) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
739 errorCollector = ec;
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
740 statusParser = sp;
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
741 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
742
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
743 public void report(String what, StatusCollector r) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
744 errorCollector.assertTrue(what, r.getErrors().isEmpty());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
745 report(what, r.asStatusRecord());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
746 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
747
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
748 public void report(String what, HgStatusCollector.Record r) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
749 reportNotEqual(what + "#MODIFIED", r.getModified(), statusParser.getModified());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
750 reportNotEqual(what + "#ADDED", r.getAdded(), statusParser.getAdded());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
751 reportNotEqual(what + "#REMOVED", r.getRemoved(), statusParser.getRemoved());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
752 reportNotEqual(what + "#CLEAN", r.getClean(), statusParser.getClean());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
753 reportNotEqual(what + "#IGNORED", r.getIgnored(), statusParser.getIgnored());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
754 reportNotEqual(what + "#MISSING", r.getMissing(), statusParser.getMissing());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
755 reportNotEqual(what + "#UNKNOWN", r.getUnknown(), statusParser.getUnknown());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
756 List<Path> copiedKeyDiff = difference(r.getCopied().keySet(), statusParser.getCopied().keySet());
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
757 HashMap<Path, String> copyDiff = new HashMap<Path, String>();
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
758 if (copiedKeyDiff.isEmpty()) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
759 for (Path jk : r.getCopied().keySet()) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
760 Path jv = r.getCopied().get(jk);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
761 if (statusParser.getCopied().containsKey(jk)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
762 Path cmdv = statusParser.getCopied().get(jk);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
763 if (!jv.equals(cmdv)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
764 copyDiff.put(jk, jv + " instead of " + cmdv);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
765 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
766 } else {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
767 copyDiff.put(jk, "ERRONEOUSLY REPORTED IN JAVA");
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
768 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
769 }
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
770 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
771 errorCollector.checkThat(what + "#Non-matching 'copied' keys: ", copiedKeyDiff, equalTo(Collections.<Path> emptyList()));
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
772 errorCollector.checkThat(what + "#COPIED", copyDiff, equalTo(Collections.<Path, String> emptyMap()));
75
e62f9638fb27 Modified test to check copied files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 74
diff changeset
773 }
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
774
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
775 private <T extends Comparable<? super T>> void reportNotEqual(String what, Collection<T> l1, Collection<T> l2) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
776 // List<T> diff = difference(l1, l2);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
777 // errorCollector.checkThat(what, diff, equalTo(Collections.<T>emptyList()));
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
778 ArrayList<T> sl1 = new ArrayList<T>(l1);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
779 Collections.sort(sl1);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
780 ArrayList<T> sl2 = new ArrayList<T>(l2);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
781 Collections.sort(sl2);
473
5c09a9f2e073 Issue 34: incorrect status for a file copy in wc against base rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 461
diff changeset
782 if (!sl1.isEmpty() && !sl2.isEmpty()) {
5c09a9f2e073 Issue 34: incorrect status for a file copy in wc against base rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 461
diff changeset
783 what = what + ", diff:" + difference(sl1, sl2);
5c09a9f2e073 Issue 34: incorrect status for a file copy in wc against base rev
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 461
diff changeset
784 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
785 errorCollector.checkThat(what, sl1, equalTo(sl2));
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
786 }
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
787
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
788 public static <T> List<T> difference(Collection<T> l1, Collection<T> l2) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
789 LinkedList<T> result = new LinkedList<T>(l2);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
790 for (T t : l1) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
791 if (l2.contains(t)) {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
792 result.remove(t);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
793 } else {
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
794 result.add(t);
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
795 }
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
796 }
442
6865eb742883 Tests for subrepo API, refactor status tests for reuse, better subrepos API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 429
diff changeset
797 return result;
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
798 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
799 }
fac8e7fcc8b0 Simple test framework - capable of parsing Hg cmdline output to compare with Java result
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
800 }