1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 package org.eclipse.jgit.pgm;
44
45 import static org.junit.Assert.assertArrayEquals;
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertFalse;
48 import static org.junit.Assert.assertTrue;
49 import static org.junit.Assert.fail;
50
51 import java.util.Arrays;
52
53 import org.eclipse.jgit.api.Git;
54 import org.eclipse.jgit.lib.CLIRepositoryTestCase;
55 import org.eclipse.jgit.pgm.internal.CLIText;
56 import org.junit.Before;
57 import org.junit.Test;
58
59 public class DescribeTest extends CLIRepositoryTestCase {
60
61 private Git git;
62
63 @Override
64 @Before
65 public void setUp() throws Exception {
66 super.setUp();
67 git = new Git(db);
68 }
69
70 private void initialCommitAndTag() throws Exception {
71 git.commit().setMessage("initial commit").call();
72 git.tag().setName("v1.0").call();
73 }
74
75 private void secondCommit() throws Exception {
76 writeTrashFile("greeting", "Hello, world!");
77 git.add().addFilepattern("greeting").call();
78 git.commit().setMessage("2nd commit").call();
79 }
80
81 @Test
82 public void testNoHead() throws Exception {
83 assertEquals(CLIText.fatalError(CLIText.get().noNamesFound),
84 toString(executeUnchecked("git describe")));
85 }
86
87 @Test
88 public void testHeadNoTag() throws Exception {
89 git.commit().setMessage("initial commit").call();
90 assertEquals(CLIText.fatalError(CLIText.get().noNamesFound),
91 toString(executeUnchecked("git describe")));
92 }
93
94 @Test
95 public void testDescribeTag() throws Exception {
96 initialCommitAndTag();
97 assertArrayEquals(new String[] { "v1.0", "" },
98 execute("git describe HEAD"));
99 }
100
101 @Test
102 public void testDescribeCommit() throws Exception {
103 initialCommitAndTag();
104 secondCommit();
105 assertArrayEquals(new String[] { "v1.0-1-g56f6ceb", "" },
106 execute("git describe"));
107 }
108
109 @Test
110 public void testDescribeTagLong() throws Exception {
111 initialCommitAndTag();
112 assertArrayEquals(new String[] { "v1.0-0-g6fd41be", "" },
113 execute("git describe --long HEAD"));
114 }
115
116 @Test
117 public void testDescribeCommitMatch() throws Exception {
118 initialCommitAndTag();
119 secondCommit();
120 assertArrayEquals(new String[] { "v1.0-1-g56f6ceb", "" },
121 execute("git describe --match v1.*"));
122 }
123
124 @Test
125 public void testDescribeCommitMatch2() throws Exception {
126 initialCommitAndTag();
127 secondCommit();
128 git.tag().setName("v2.0").call();
129 assertArrayEquals(new String[] { "v1.0-1-g56f6ceb", "" },
130 execute("git describe --match v1.*"));
131 }
132
133 @Test
134 public void testDescribeCommitMultiMatch() throws Exception {
135 initialCommitAndTag();
136 secondCommit();
137 git.tag().setName("v2.0.0").call();
138 git.tag().setName("v2.1.1").call();
139 assertArrayEquals("git yields v2.0.0", new String[] { "v2.0.0", "" },
140 execute("git describe --match v2.0* --match v2.1.*"));
141 }
142
143 @Test
144 public void testDescribeCommitNoMatch() throws Exception {
145 initialCommitAndTag();
146 writeTrashFile("greeting", "Hello, world!");
147 secondCommit();
148 try {
149 execute("git describe --match 1.*");
150 fail("git describe should not find any tag matching 1.*");
151 } catch (Die e) {
152 assertEquals("No names found, cannot describe anything.",
153 e.getMessage());
154 }
155 }
156
157 @Test
158 public void testHelpArgumentBeforeUnknown() throws Exception {
159 String[] output = execute("git describe -h -XYZ");
160 String all = Arrays.toString(output);
161 assertTrue("Unexpected help output: " + all,
162 all.contains("jgit describe"));
163 assertFalse("Unexpected help output: " + all, all.contains("fatal"));
164 }
165
166 @Test
167 public void testHelpArgumentAfterUnknown() throws Exception {
168 String[] output = executeUnchecked("git describe -XYZ -h");
169 String all = Arrays.toString(output);
170 assertTrue("Unexpected help output: " + all,
171 all.contains("jgit describe"));
172 assertTrue("Unexpected help output: " + all, all.contains("fatal"));
173 }
174 }