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

Mac support: respect Mac alternatives of command-line arguments for common unix tools
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sun, 03 Aug 2014 18:09:00 +0200
parents b286222158be
children
rev   line source
479
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
1 /*
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
2 * Copyright (c) 2012-2013 TMate Software Ltd
479
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
3 *
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
6 * the Free Software Foundation; version 2 of the License.
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
7 *
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
8 * This program is distributed in the hope that it will be useful,
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
11 * GNU General Public License for more details.
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
12 *
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
13 * For information on how to redistribute this software under
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
14 * the terms of a license other than GNU General Public License
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
15 * contact TMate Software at support@hg4j.com
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
16 */
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
17 package org.tmatesoft.hg.test;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
18
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
19 import static org.junit.Assert.*;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
20
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
21 import org.junit.Rule;
479
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
22 import org.junit.Test;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
23 import org.tmatesoft.hg.core.HgCatCommand;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
24 import org.tmatesoft.hg.core.HgChangesetFileSneaker;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
25 import org.tmatesoft.hg.core.Nodeid;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
26 import org.tmatesoft.hg.internal.ByteArrayChannel;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
27 import org.tmatesoft.hg.repo.HgLookup;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
28 import org.tmatesoft.hg.repo.HgRepository;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
29 import org.tmatesoft.hg.util.Path;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
30
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
31 /**
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
32 *
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
33 * @author Artem Tikhomirov
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
34 * @author TMate Software Ltd.
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
35 */
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
36 public class TestCatCommand {
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
37
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
38 @Rule
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
39 public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
40
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
41 private HgRepository repo;
479
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
42
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
43 public TestCatCommand() throws Exception {
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
44 repo = new HgLookup().detectFromWorkingDir();
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
45 }
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
46
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
47 @Test
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
48 public void testCatAtCsetRevision() throws Exception {
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
49 HgCatCommand cmd = new HgCatCommand(repo);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
50 final Path file = Path.create("src/org/tmatesoft/hg/internal/RevlogStream.java");
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
51 cmd.file(file);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
52 final Nodeid cset = Nodeid.fromAscii("08db726a0fb7914ac9d27ba26dc8bbf6385a0554");
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
53 cmd.changeset(cset);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
54 final ByteArrayChannel sink = new ByteArrayChannel();
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
55 cmd.execute(sink);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
56 final int result1 = sink.toArray().length;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
57 HgChangesetFileSneaker i = new HgChangesetFileSneaker(repo);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
58 boolean result = i.changeset(cset).checkExists(file);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
59 assertFalse(result);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
60 assertFalse(i.exists());
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
61 result = i.followRenames(true).checkExists(file);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
62 assertTrue(result);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
63 assertTrue(i.exists());
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
64 HgCatCommand cmd2 = new HgCatCommand(repo).revision(i.getFileRevision());
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
65 final ByteArrayChannel sink2 = new ByteArrayChannel();
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
66 cmd2.execute(sink2);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
67 final int result2 = sink2.toArray().length;
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
68 assertEquals(result1, result2);
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
69 }
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
70
690
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
71 // ensure code to follow rename history in the command is correct
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
72 @Test
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
73 public void testRenamedFileInCset() throws Exception {
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
74 repo = Configuration.get().find("log-renames");
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
75 HgCatCommand cmd1 = new HgCatCommand(repo);
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
76 HgCatCommand cmd2 = new HgCatCommand(repo);
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
77 cmd1.file(Path.create("a")); // a is initial b through temporary c
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
78 cmd2.file(Path.create("c"));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
79 ByteArrayChannel sink1, sink2;
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
80 // a from wc/tip was c in rev 4
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
81 cmd1.changeset(4).execute(sink1 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
82 cmd2.changeset(4).execute(sink2 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
83 assertArrayEquals(sink2.toArray(), sink1.toArray());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
84 //
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
85 // d from wc/tip was a in 0..2 and b in rev 3..4. Besides, there's another d in r4
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
86 cmd2.file(Path.create("d"));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
87 cmd1.changeset(2).execute(sink1 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
88 cmd2.changeset(2).execute(sink2 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
89 assertArrayEquals(sink1.toArray(), sink2.toArray());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
90 //
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
91 cmd1.file(Path.create("b"));
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
92 cmd1.changeset(3).execute(sink1 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
93 cmd2.changeset(3).execute(sink2 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
94 assertArrayEquals(sink1.toArray(), sink2.toArray());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
95 //
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
96 cmd2.changeset(4).execute(sink2 = new ByteArrayChannel()); // ensure d in r4 is not from a or b
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
97 assertArrayEquals("d:4\n".getBytes(), sink2.toArray());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
98 cmd2.changeset(5).execute(sink2 = new ByteArrayChannel()); // d in r5 is copy of b in r4
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
99 cmd1.changeset(4).execute(sink1 = new ByteArrayChannel());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
100 assertArrayEquals(sink1.toArray(), sink2.toArray());
b286222158be Fix file.isCopy() use for status and cat commands
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 479
diff changeset
101 }
479
59b7c817bc4d Methods from Main graduated as tests
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
102 }