1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.filtering;
20
21 import java.io.File;
22 import java.io.Reader;
23 import java.io.StringReader;
24 import java.nio.file.Files;
25 import java.nio.file.Path;
26 import java.nio.file.Paths;
27 import java.nio.file.attribute.FileTime;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collections;
31 import java.util.LinkedHashSet;
32 import java.util.List;
33 import java.util.Properties;
34
35 import org.apache.maven.api.di.Inject;
36 import org.apache.maven.api.di.testing.MavenDITest;
37 import org.apache.maven.api.model.Build;
38 import org.apache.maven.api.plugin.testing.stubs.ProjectStub;
39 import org.apache.maven.di.Injector;
40 import org.junit.jupiter.api.BeforeEach;
41 import org.junit.jupiter.api.Test;
42 import org.sonatype.plexus.build.incremental.BuildContext;
43
44 import static org.apache.maven.api.di.testing.MavenDIExtension.getBasedir;
45 import static org.junit.jupiter.api.Assertions.assertEquals;
46 import static org.mockito.Mockito.mock;
47
48
49
50
51
52 @MavenDITest
53 public class DefaultMavenFileFilterTest {
54
55 @Inject
56 Injector container;
57
58 Path to = Paths.get(getBasedir(), "target/reflection-test.properties");
59
60 @BeforeEach
61 protected void setUp() throws Exception {
62 Files.deleteIfExists(to);
63 }
64
65 @Test
66 public void testOverwriteFile() throws Exception {
67 MavenFileFilter mavenFileFilter = container.getInstance(MavenFileFilter.class);
68
69 Path from = Paths.get(getBasedir(), "src/test/units-files/reflection-test.properties");
70
71 mavenFileFilter.copyFile(from, to, false, null, null);
72
73 from = Paths.get(getBasedir(), "src/test/units-files/reflection-test-older.properties");
74
75
76 Files.setLastModifiedTime(from, FileTime.fromMillis(1));
77
78 Files.setLastModifiedTime(to, FileTime.fromMillis(System.currentTimeMillis()));
79
80 mavenFileFilter.copyFile(from, to, false, null, null);
81
82 Properties properties = PropertyUtils.loadPropertyFile(to, null);
83 assertEquals("older file", properties.getProperty("version"));
84 }
85
86 @Test
87 public void testNullSafeDefaultFilterWrappers() throws Exception {
88 MavenFileFilter mavenFileFilter = container.getInstance(MavenFileFilter.class);
89
90 mavenFileFilter.getDefaultFilterWrappers(null, null, false, null, null);
91
92
93 }
94
95 @Test
96 public void testMultiFilterFileInheritance() throws Exception {
97 DefaultMavenFileFilter mavenFileFilter = new DefaultMavenFileFilter(mock(BuildContext.class));
98
99 File testDir = new File(getBasedir(), "src/test/units-files/MSHARED-177");
100
101 List<String> filters = new ArrayList<>();
102
103 filters.add(new File(testDir, "first_filter_file.properties").getAbsolutePath());
104 filters.add(new File(testDir, "second_filter_file.properties").getAbsolutePath());
105 filters.add(new File(testDir, "third_filter_file.properties").getAbsolutePath());
106
107 final Properties filterProperties = new Properties();
108
109 mavenFileFilter.loadProperties(filterProperties, Paths.get(getBasedir()), filters, new Properties());
110
111 assertEquals("first and second", filterProperties.getProperty("third_filter_key"));
112 }
113
114
115
116 @Test
117 public void testMavenBasedir() throws Exception {
118 MavenFileFilter mavenFileFilter = container.getInstance(MavenFileFilter.class);
119
120 AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
121 req.setFileFilters(Collections.singletonList("src/main/filters/filefilter.properties"));
122
123 ProjectStub mavenProject = new ProjectStub();
124 mavenProject.setBasedir(Paths.get("src/test/units-files/MSHARED-161"));
125 List<String> filters = Collections.singletonList("src/main/filters/buildfilter.properties");
126 mavenProject.setModel(mavenProject
127 .getModel()
128 .withBuild(Build.newBuilder().filters(filters).build()));
129 req.setMavenProject(mavenProject);
130 req.setInjectProjectBuildFilters(true);
131
132 List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers(req);
133
134 try (Reader reader = wrappers.get(0).getReader(new StringReader("${filefilter} ${buildfilter}"))) {
135 assertEquals("true true", IOUtils.toString(reader));
136 }
137 }
138
139
140 @Test
141 public void testCustomDelimiters() throws Exception {
142 MavenFileFilter mavenFileFilter = container.getInstance(MavenFileFilter.class);
143
144 AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
145 Properties additionalProperties = new Properties();
146 additionalProperties.setProperty("FILTER.a.ME", "DONE");
147 req.setAdditionalProperties(additionalProperties);
148 req.setDelimiters(new LinkedHashSet<>(Arrays.asList("aaa*aaa", "abc*abc")));
149
150 List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers(req);
151
152 Reader reader = wrappers.get(0).getReader(new StringReader("aaaFILTER.a.MEaaa"));
153 assertEquals("DONE", IOUtils.toString(reader));
154
155 reader = wrappers.get(0).getReader(new StringReader("abcFILTER.a.MEabc"));
156 assertEquals("DONE", IOUtils.toString(reader));
157 }
158
159
160 @Test
161 public void testLineWithSingleAtAndExpression() throws Exception {
162 MavenFileFilter mavenFileFilter = container.getInstance(MavenFileFilter.class);
163
164 AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
165 Properties additionalProperties = new Properties();
166 additionalProperties.setProperty("foo", "bar");
167 req.setAdditionalProperties(additionalProperties);
168
169 List<FilterWrapper> wrappers = mavenFileFilter.getDefaultFilterWrappers(req);
170
171 try (Reader reader = wrappers.get(0).getReader(new StringReader("toto@titi.com ${foo}"))) {
172 assertEquals("toto@titi.com bar", IOUtils.toString(reader));
173 }
174 }
175 }