Mercurial > hg4j
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 } |