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