1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model.building;
20
21 import java.io.File;
22 import java.util.concurrent.atomic.AtomicReference;
23
24 import org.apache.maven.api.model.Dependency;
25 import org.apache.maven.api.model.Parent;
26 import org.apache.maven.api.model.Repository;
27 import org.apache.maven.model.Model;
28 import org.apache.maven.model.resolution.InvalidRepositoryException;
29 import org.apache.maven.model.resolution.ModelResolver;
30 import org.apache.maven.model.resolution.UnresolvableModelException;
31 import org.junit.jupiter.api.Test;
32
33 import static org.junit.jupiter.api.Assertions.assertNotNull;
34 import static org.junit.jupiter.api.Assertions.assertThrows;
35
36
37
38 class DefaultModelBuilderTest {
39
40 private static final String BASE1_ID = "thegroup:base1:pom";
41
42 private static final String BASE1 = "<project>\n" + " <modelVersion>4.0.0</modelVersion>\n"
43 + " <groupId>thegroup</groupId>\n"
44 + " <artifactId>base1</artifactId>\n"
45 + " <version>1</version>\n"
46 + " <packaging>pom</packaging>\n"
47 + " <dependencyManagement>\n"
48 + " <dependencies>\n"
49 + " <dependency>\n"
50 + " <groupId>thegroup</groupId>\n"
51 + " <artifactId>base2</artifactId>\n"
52 + " <version>1</version>\n"
53 + " <type>pom</type>\n"
54 + " <scope>import</scope>\n"
55 + " </dependency>\n"
56 + " </dependencies>\n"
57 + " </dependencyManagement>\n"
58 + "</project>\n";
59
60 private static final String BASE2_ID = "thegroup:base2:pom";
61
62 private static final String BASE2 = "<project>\n" + " <modelVersion>4.0.0</modelVersion>\n"
63 + " <groupId>thegroup</groupId>\n"
64 + " <artifactId>base2</artifactId>\n"
65 + " <version>1</version>\n"
66 + " <packaging>pom</packaging>\n"
67 + " <dependencyManagement>\n"
68 + " <dependencies>\n"
69 + " <dependency>\n"
70 + " <groupId>thegroup</groupId>\n"
71 + " <artifactId>base1</artifactId>\n"
72 + " <version>1</version>\n"
73 + " <type>pom</type>\n"
74 + " <scope>import</scope>\n"
75 + " </dependency>\n"
76 + " </dependencies>\n"
77 + " </dependencyManagement>\n"
78 + "</project>\n";
79
80 @Test
81 void testCycleInImports() throws Exception {
82 ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
83 assertNotNull(builder);
84
85 DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
86 request.setModelSource(new StringModelSource(BASE1));
87 request.setModelResolver(new CycleInImportsResolver());
88
89 assertThrows(ModelBuildingException.class, () -> builder.build(request));
90 }
91
92 static class CycleInImportsResolver extends BaseModelResolver {
93 @Override
94 public ModelSource resolveModel(org.apache.maven.model.Dependency dependency)
95 throws UnresolvableModelException {
96 switch (dependency.getManagementKey()) {
97 case BASE1_ID:
98 return new StringModelSource(BASE1);
99 case BASE2_ID:
100 return new StringModelSource(BASE2);
101 }
102 return null;
103 }
104 }
105
106 static class BaseModelResolver implements ModelResolver {
107 @Override
108 public ModelSource resolveModel(String groupId, String artifactId, String version)
109 throws UnresolvableModelException {
110 return null;
111 }
112
113 @Override
114 public ModelSource resolveModel(Parent parent, AtomicReference<Parent> modified)
115 throws UnresolvableModelException {
116 return null;
117 }
118
119 @Override
120 public ModelSource resolveModel(Dependency dependency, AtomicReference<Dependency> modified)
121 throws UnresolvableModelException {
122 return null;
123 }
124
125 @Override
126 public void addRepository(Repository repository) throws InvalidRepositoryException {}
127
128 @Override
129 public void addRepository(Repository repository, boolean replace) throws InvalidRepositoryException {}
130
131 @Override
132 public ModelResolver newCopy() {
133 return this;
134 }
135
136 @Override
137 public ModelSource resolveModel(org.apache.maven.model.Parent parent) throws UnresolvableModelException {
138 return null;
139 }
140
141 @Override
142 public ModelSource resolveModel(org.apache.maven.model.Dependency dependency)
143 throws UnresolvableModelException {
144 return null;
145 }
146
147 @Override
148 public void addRepository(org.apache.maven.model.Repository repository) throws InvalidRepositoryException {}
149
150 @Override
151 public void addRepository(org.apache.maven.model.Repository repository, boolean replace)
152 throws InvalidRepositoryException {}
153 }
154
155 @Test
156 void testBuildRawModel() throws Exception {
157 ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
158 assertNotNull(builder);
159
160 Result<? extends Model> res = builder.buildRawModel(
161 new File(getClass().getResource("/poms/factory/simple.xml").getFile()),
162 ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL,
163 false);
164 assertNotNull(res.get());
165 }
166 }