1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.model.profile.activation;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.nio.file.Path;
24
25 import org.apache.maven.api.model.Activation;
26 import org.apache.maven.api.model.ActivationFile;
27 import org.apache.maven.api.model.Profile;
28 import org.apache.maven.model.path.DefaultPathTranslator;
29 import org.apache.maven.model.path.ProfileActivationFilePathInterpolator;
30 import org.apache.maven.model.profile.DefaultProfileActivationContext;
31 import org.apache.maven.model.root.RootLocator;
32 import org.junit.jupiter.api.BeforeEach;
33 import org.junit.jupiter.api.Test;
34 import org.junit.jupiter.api.io.TempDir;
35
36 import static org.junit.jupiter.api.Assertions.assertEquals;
37 import static org.junit.jupiter.api.Assertions.assertThrows;
38
39
40
41
42
43 class FileProfileActivatorTest extends AbstractProfileActivatorTest<FileProfileActivator> {
44
45 @TempDir
46 Path tempDir;
47
48 private final DefaultProfileActivationContext context = new DefaultProfileActivationContext();
49
50 @BeforeEach
51 @Override
52 void setUp() throws Exception {
53 activator = new FileProfileActivator(
54 new ProfileActivationFilePathInterpolator(new DefaultPathTranslator(), bd -> true));
55
56 context.setProjectDirectory(tempDir.toFile());
57
58 File file = new File(tempDir.resolve("file.txt").toString());
59 if (!file.createNewFile()) {
60 throw new IOException("Can't create " + file);
61 }
62 }
63
64 @Test
65 void testRootDirectoryWithNull() {
66 context.setProjectDirectory(null);
67
68 IllegalStateException e = assertThrows(
69 IllegalStateException.class,
70 () -> assertActivation(false, newExistsProfile("${rootDirectory}"), context));
71 assertEquals(RootLocator.UNABLE_TO_FIND_ROOT_PROJECT_MESSAGE, e.getMessage());
72 }
73
74 @Test
75 void testRootDirectory() {
76 assertActivation(false, newExistsProfile("${rootDirectory}/someFile.txt"), context);
77 assertActivation(true, newMissingProfile("${rootDirectory}/someFile.txt"), context);
78 assertActivation(true, newExistsProfile("${rootDirectory}"), context);
79 assertActivation(true, newExistsProfile("${rootDirectory}/" + "file.txt"), context);
80 assertActivation(false, newMissingProfile("${rootDirectory}"), context);
81 assertActivation(false, newMissingProfile("${rootDirectory}/" + "file.txt"), context);
82 }
83
84 @Test
85 void testIsActiveNoFile() {
86 assertActivation(false, newExistsProfile(null), context);
87 assertActivation(false, newExistsProfile("someFile.txt"), context);
88 assertActivation(false, newExistsProfile("${basedir}/someFile.txt"), context);
89
90 assertActivation(false, newMissingProfile(null), context);
91 assertActivation(true, newMissingProfile("someFile.txt"), context);
92 assertActivation(true, newMissingProfile("${basedir}/someFile.txt"), context);
93 }
94
95 @Test
96 void testIsActiveExistsFileExists() {
97 assertActivation(true, newExistsProfile("file.txt"), context);
98 assertActivation(true, newExistsProfile("${basedir}"), context);
99 assertActivation(true, newExistsProfile("${basedir}/" + "file.txt"), context);
100
101 assertActivation(false, newMissingProfile("file.txt"), context);
102 assertActivation(false, newMissingProfile("${basedir}"), context);
103 assertActivation(false, newMissingProfile("${basedir}/" + "file.txt"), context);
104 }
105
106 @Test
107 void testIsActiveExistsLeavesFileUnchanged() {
108 Profile profile = newExistsProfile("file.txt");
109 assertEquals("file.txt", profile.getActivation().getFile().getExists());
110
111 assertActivation(true, profile, context);
112
113 assertEquals("file.txt", profile.getActivation().getFile().getExists());
114 }
115
116 private Profile newExistsProfile(String filePath) {
117 ActivationFile activationFile =
118 ActivationFile.newBuilder().exists(filePath).build();
119 return newProfile(activationFile);
120 }
121
122 private Profile newMissingProfile(String filePath) {
123 ActivationFile activationFile =
124 ActivationFile.newBuilder().missing(filePath).build();
125 return newProfile(activationFile);
126 }
127
128 private Profile newProfile(ActivationFile activationFile) {
129 Activation activation = Activation.newBuilder().file(activationFile).build();
130 return Profile.newBuilder().activation(activation).build();
131 }
132 }