annotate test/org/tmatesoft/hg/test/TestStatus.java @ 427:31a89587eb04

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