1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.cli.event;
20
21 import java.io.File;
22 import java.util.List;
23
24 import org.apache.maven.execution.ExecutionEvent;
25 import org.apache.maven.execution.MavenSession;
26 import org.apache.maven.jline.JLineMessageBuilderFactory;
27 import org.apache.maven.jline.MessageUtils;
28 import org.apache.maven.project.MavenProject;
29 import org.junit.jupiter.api.AfterAll;
30 import org.junit.jupiter.api.BeforeAll;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33 import org.mockito.InOrder;
34 import org.mockito.Mockito;
35 import org.slf4j.Logger;
36
37 import static org.mockito.ArgumentMatchers.matches;
38 import static org.mockito.Mockito.inOrder;
39 import static org.mockito.Mockito.mock;
40 import static org.mockito.Mockito.never;
41 import static org.mockito.Mockito.when;
42
43 @Deprecated
44 class ExecutionEventLoggerTest {
45
46 private Logger logger;
47 private ExecutionEventLogger executionEventLogger;
48 private JLineMessageBuilderFactory messageBuilderFactory = new JLineMessageBuilderFactory();
49
50 @BeforeAll
51 static void setUp() {
52 MessageUtils.setColorEnabled(false);
53 }
54
55 @AfterAll
56 static void tearDown() {
57 MessageUtils.setColorEnabled(true);
58 }
59
60 @BeforeEach
61 void beforeEach() {
62 logger = mock(Logger.class);
63 when(logger.isInfoEnabled()).thenReturn(true);
64 executionEventLogger = new ExecutionEventLogger(messageBuilderFactory, logger);
65 }
66
67 @Test
68 void testProjectStarted() {
69
70 File basedir = new File("").getAbsoluteFile();
71 ExecutionEvent event = mock(ExecutionEvent.class);
72 MavenProject project = mock(MavenProject.class);
73 when(project.getGroupId()).thenReturn("org.apache.maven");
74 when(project.getArtifactId()).thenReturn("maven-embedder");
75 when(project.getPackaging()).thenReturn("jar");
76 when(project.getName()).thenReturn("Apache Maven Embedder");
77 when(project.getVersion()).thenReturn("3.5.4-SNAPSHOT");
78 when(project.getFile()).thenReturn(new File(basedir, "maven-embedder/pom.xml"));
79 when(event.getProject()).thenReturn(project);
80
81 MavenProject rootProject = mock(MavenProject.class);
82 when(rootProject.getBasedir()).thenReturn(basedir);
83 MavenSession session = mock(MavenSession.class);
84 when(session.getTopLevelProject()).thenReturn(rootProject);
85 when(session.getTopDirectory()).thenReturn(basedir.toPath());
86 when(event.getSession()).thenReturn(session);
87
88
89 executionEventLogger.projectStarted(event);
90
91
92 InOrder inOrder = inOrder(logger);
93 inOrder.verify(logger).info("");
94 inOrder.verify(logger).info("------------------< org.apache.maven:maven-embedder >-------------------");
95 inOrder.verify(logger).info("Building Apache Maven Embedder 3.5.4-SNAPSHOT");
96 inOrder.verify(logger).info(adaptDirSeparator(" from maven-embedder/pom.xml"));
97 inOrder.verify(logger).info("--------------------------------[ jar ]---------------------------------");
98 }
99
100 @Test
101 void testProjectStartedOverflow() {
102
103 File basedir = new File("").getAbsoluteFile();
104 ExecutionEvent event = mock(ExecutionEvent.class);
105 MavenProject project = mock(MavenProject.class);
106 when(project.getGroupId()).thenReturn("org.apache.maven.plugins.overflow");
107 when(project.getArtifactId()).thenReturn("maven-project-info-reports-plugin");
108 when(project.getPackaging()).thenReturn("maven-plugin");
109 when(project.getName()).thenReturn("Apache Maven Project Info Reports Plugin");
110 when(project.getVersion()).thenReturn("3.0.0-SNAPSHOT");
111 when(event.getProject()).thenReturn(project);
112 when(project.getFile()).thenReturn(new File(basedir, "pom.xml"));
113 when(project.getBasedir()).thenReturn(basedir);
114
115 MavenSession session = mock(MavenSession.class);
116 when(session.getTopLevelProject()).thenReturn(project);
117 when(event.getSession()).thenReturn(session);
118 when(session.getTopDirectory()).thenReturn(basedir.toPath());
119
120
121 executionEventLogger.projectStarted(event);
122
123
124 InOrder inOrder = inOrder(logger);
125 inOrder.verify(logger).info("");
126 inOrder.verify(logger).info("--< org.apache.maven.plugins.overflow:maven-project-info-reports-plugin >--");
127 inOrder.verify(logger).info("Building Apache Maven Project Info Reports Plugin 3.0.0-SNAPSHOT");
128 inOrder.verify(logger).info(adaptDirSeparator(" from pom.xml"));
129 inOrder.verify(logger).info("----------------------------[ maven-plugin ]----------------------------");
130 }
131
132 @Test
133 void testTerminalWidth() {
134
135 Logger logger = mock(Logger.class);
136 when(logger.isInfoEnabled()).thenReturn(true);
137
138 ExecutionEvent event = mock(ExecutionEvent.class);
139 MavenProject project = mock(MavenProject.class);
140 when(project.getGroupId()).thenReturn("org.apache.maven.plugins.overflow");
141 when(project.getArtifactId()).thenReturn("maven-project-info-reports-plugin");
142 when(project.getPackaging()).thenReturn("maven-plugin");
143 when(project.getName()).thenReturn("Apache Maven Project Info Reports Plugin");
144 when(project.getVersion()).thenReturn("3.0.0-SNAPSHOT");
145 when(event.getProject()).thenReturn(project);
146
147
148 new ExecutionEventLogger(messageBuilderFactory, logger, -1).projectStarted(event);
149 Mockito.verify(logger).info("----------------------------[ maven-plugin ]----------------------------");
150
151
152 new ExecutionEventLogger(messageBuilderFactory, logger, 30).projectStarted(event);
153 Mockito.verify(logger).info("------------------[ maven-plugin ]------------------");
154
155
156 new ExecutionEventLogger(messageBuilderFactory, logger, 70).projectStarted(event);
157 Mockito.verify(logger).info("-----------------------[ maven-plugin ]-----------------------");
158
159
160 new ExecutionEventLogger(messageBuilderFactory, logger, 110).projectStarted(event);
161 Mockito.verify(logger)
162 .info(
163 "-------------------------------------------[ maven-plugin ]-------------------------------------------");
164
165
166 new ExecutionEventLogger(messageBuilderFactory, logger, 200).projectStarted(event);
167 Mockito.verify(logger)
168 .info(
169 "-----------------------------------------------------[ maven-plugin ]-----------------------------------------------------");
170 }
171
172 @Test
173 void testProjectStartedNoPom() {
174
175 File basedir = new File("").getAbsoluteFile();
176 ExecutionEvent event = mock(ExecutionEvent.class);
177 MavenProject project = mock(MavenProject.class);
178 when(project.getGroupId()).thenReturn("org.apache.maven");
179 when(project.getArtifactId()).thenReturn("standalone-pom");
180 when(project.getPackaging()).thenReturn("pom");
181 when(project.getName()).thenReturn("Maven Stub Project (No POM)");
182 when(project.getVersion()).thenReturn("1");
183 when(event.getProject()).thenReturn(project);
184 when(project.getFile()).thenReturn(null);
185 when(project.getBasedir()).thenReturn(basedir);
186
187
188 executionEventLogger.projectStarted(event);
189
190
191 InOrder inOrder = inOrder(logger);
192 inOrder.verify(logger).info("");
193 inOrder.verify(logger).info("------------------< org.apache.maven:standalone-pom >-------------------");
194 inOrder.verify(logger).info("Building Maven Stub Project (No POM) 1");
195 inOrder.verify(logger).info("--------------------------------[ pom ]---------------------------------");
196 }
197
198 @Test
199 void testMultiModuleProjectProgress() {
200
201 MavenProject project1 = generateMavenProject("Apache Maven Embedder 1");
202 MavenProject project2 = generateMavenProject("Apache Maven Embedder 2");
203 MavenProject project3 = generateMavenProject("Apache Maven Embedder 3");
204
205 MavenSession session = mock(MavenSession.class);
206 when(session.getProjects()).thenReturn(List.of(project1, project2, project3));
207 when(session.getAllProjects()).thenReturn(List.of(project1, project2, project3));
208
209 ExecutionEvent sessionStartedEvent = mock(ExecutionEvent.class);
210 when(sessionStartedEvent.getSession()).thenReturn(session);
211 ExecutionEvent projectStartedEvent1 = mock(ExecutionEvent.class);
212 when(projectStartedEvent1.getProject()).thenReturn(project1);
213 ExecutionEvent projectStartedEvent2 = mock(ExecutionEvent.class);
214 when(projectStartedEvent2.getProject()).thenReturn(project2);
215 ExecutionEvent projectStartedEvent3 = mock(ExecutionEvent.class);
216 when(projectStartedEvent3.getProject()).thenReturn(project3);
217
218
219 executionEventLogger.sessionStarted(sessionStartedEvent);
220 executionEventLogger.projectStarted(projectStartedEvent1);
221 executionEventLogger.projectStarted(projectStartedEvent2);
222 executionEventLogger.projectStarted(projectStartedEvent3);
223
224
225 InOrder inOrder = inOrder(logger);
226 inOrder.verify(logger).info(matches(".*Apache Maven Embedder 1.*\\[1\\/3\\]"));
227 inOrder.verify(logger).info(matches(".*Apache Maven Embedder 2.*\\[2\\/3\\]"));
228 inOrder.verify(logger).info(matches(".*Apache Maven Embedder 3.*\\[3\\/3\\]"));
229 }
230
231 @Test
232 void testMultiModuleProjectResumeFromProgress() {
233
234 MavenProject project1 = generateMavenProject("Apache Maven Embedder 1");
235 MavenProject project2 = generateMavenProject("Apache Maven Embedder 2");
236 MavenProject project3 = generateMavenProject("Apache Maven Embedder 3");
237
238 MavenSession session = mock(MavenSession.class);
239 when(session.getProjects()).thenReturn(List.of(project2, project3));
240 when(session.getAllProjects()).thenReturn(List.of(project1, project2, project3));
241
242 ExecutionEvent sessionStartedEvent = mock(ExecutionEvent.class);
243 when(sessionStartedEvent.getSession()).thenReturn(session);
244 ExecutionEvent projectStartedEvent2 = mock(ExecutionEvent.class);
245 when(projectStartedEvent2.getProject()).thenReturn(project2);
246 ExecutionEvent projectStartedEvent3 = mock(ExecutionEvent.class);
247 when(projectStartedEvent3.getProject()).thenReturn(project3);
248
249
250 executionEventLogger.sessionStarted(sessionStartedEvent);
251 executionEventLogger.projectStarted(projectStartedEvent2);
252 executionEventLogger.projectStarted(projectStartedEvent3);
253
254
255 InOrder inOrder = inOrder(logger);
256 inOrder.verify(logger, never()).info(matches(".*Apache Maven Embedder 1.*\\[1\\/3\\]"));
257 inOrder.verify(logger).info(matches(".*Apache Maven Embedder 2.*\\[2\\/3\\]"));
258 inOrder.verify(logger).info(matches(".*Apache Maven Embedder 3.*\\[3\\/3\\]"));
259 }
260
261 private static MavenProject generateMavenProject(String projectName) {
262 MavenProject project = mock(MavenProject.class);
263 when(project.getPackaging()).thenReturn("jar");
264 when(project.getVersion()).thenReturn("3.5.4-SNAPSHOT");
265 when(project.getName()).thenReturn(projectName);
266 return project;
267 }
268
269 private static String adaptDirSeparator(String path) {
270 return path.replace('/', File.separatorChar).replace('\\', File.separatorChar);
271 }
272 }