1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.transformation.impl;
20
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.nio.file.Files;
24 import java.nio.file.Path;
25 import java.nio.file.Paths;
26
27 import org.apache.maven.model.Model;
28 import org.apache.maven.model.building.TransformerContext;
29 import org.apache.maven.model.v4.MavenStaxReader;
30 import org.apache.maven.project.MavenProject;
31 import org.eclipse.aether.RepositorySystemSession;
32 import org.eclipse.aether.SessionData;
33 import org.junit.jupiter.api.Test;
34 import org.mockito.Mockito;
35 import org.xmlunit.assertj.XmlAssert;
36
37 import static org.assertj.core.api.Assertions.assertThat;
38 import static org.mockito.ArgumentMatchers.any;
39 import static org.mockito.Mockito.when;
40
41 class ConsumerPomArtifactTransformerTest {
42
43 @Test
44 void transform() throws Exception {
45 RepositorySystemSession systemSessionMock = Mockito.mock(RepositorySystemSession.class);
46 SessionData sessionDataMock = Mockito.mock(SessionData.class);
47 when(systemSessionMock.getData()).thenReturn(sessionDataMock);
48 when(sessionDataMock.get(any())).thenReturn(new NoTransformerContext());
49
50 Path beforePomFile =
51 Paths.get("src/test/resources/projects/transform/before.pom").toAbsolutePath();
52 Path afterPomFile =
53 Paths.get("src/test/resources/projects/transform/after.pom").toAbsolutePath();
54 Path tempFile = Files.createTempFile("", ".pom");
55 Files.delete(tempFile);
56 try (InputStream expected = Files.newInputStream(beforePomFile)) {
57 Model model = new Model(new MavenStaxReader().read(expected));
58 MavenProject project = new MavenProject(model);
59 project.setOriginalModel(model);
60 DefaultConsumerPomArtifactTransformer t = new DefaultConsumerPomArtifactTransformer((s, p, f) -> {
61 try (InputStream is = Files.newInputStream(f)) {
62 return DefaultConsumerPomBuilder.transform(new MavenStaxReader().read(is), project);
63 }
64 });
65
66 t.transform(project, systemSessionMock, beforePomFile, tempFile);
67 }
68 XmlAssert.assertThat(afterPomFile.toFile()).and(tempFile.toFile()).areIdentical();
69 }
70
71 @Test
72 void transformJarConsumerPom() throws Exception {
73 RepositorySystemSession systemSessionMock = Mockito.mock(RepositorySystemSession.class);
74 SessionData sessionDataMock = Mockito.mock(SessionData.class);
75 when(systemSessionMock.getData()).thenReturn(sessionDataMock);
76 when(sessionDataMock.get(any())).thenReturn(new NoTransformerContext());
77
78 Path beforePomFile = Paths.get("src/test/resources/projects/transform/jar/before.pom")
79 .toAbsolutePath();
80 Path afterPomFile =
81 Paths.get("src/test/resources/projects/transform/jar/after.pom").toAbsolutePath();
82 Path tempFile = Files.createTempFile("", ".pom");
83 Files.delete(tempFile);
84 try (InputStream expected = Files.newInputStream(beforePomFile)) {
85 Model model = new Model(new MavenStaxReader().read(expected));
86 MavenProject project = new MavenProject(model);
87 project.setOriginalModel(model);
88 DefaultConsumerPomArtifactTransformer t = new DefaultConsumerPomArtifactTransformer((s, p, f) -> {
89 try (InputStream is = Files.newInputStream(f)) {
90 return DefaultConsumerPomBuilder.transform(new MavenStaxReader().read(is), project);
91 }
92 });
93
94 t.transform(project, systemSessionMock, beforePomFile, tempFile);
95 }
96 XmlAssert.assertThat(afterPomFile.toFile()).and(tempFile.toFile()).areIdentical();
97 }
98
99 @Test
100 void injectTransformedArtifactsWithoutPomShouldNotInjectAnyArtifacts() throws IOException {
101 MavenProject emptyProject = new MavenProject();
102
103 RepositorySystemSession systemSessionMock = Mockito.mock(RepositorySystemSession.class);
104 SessionData sessionDataMock = Mockito.mock(SessionData.class);
105 when(systemSessionMock.getData()).thenReturn(sessionDataMock);
106 when(sessionDataMock.get(any())).thenReturn(new NoTransformerContext());
107
108 new DefaultConsumerPomArtifactTransformer((session, project, src) -> null)
109 .injectTransformedArtifacts(systemSessionMock, emptyProject);
110
111 assertThat(emptyProject.getAttachedArtifacts()).isEmpty();
112 }
113
114 private static class NoTransformerContext implements TransformerContext {
115 @Override
116 public String getUserProperty(String key) {
117 return null;
118 }
119
120 @Override
121 public Model getRawModel(Path from, String groupId, String artifactId) throws IllegalStateException {
122 throw new UnsupportedOperationException();
123 }
124
125 @Override
126 public Model getRawModel(Path from, Path p) {
127 throw new UnsupportedOperationException();
128 }
129
130 @Override
131 public Path locate(Path path) {
132 throw new UnsupportedOperationException();
133 }
134 }
135 }