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.Reader;
22 import java.io.StringReader;
23
24 import org.apache.commons.io.IOUtils;
25 import org.codehaus.plexus.interpolation.Interpolator;
26 import org.codehaus.plexus.interpolation.RecursionInterceptor;
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.Test;
29 import org.mockito.Mock;
30 import org.mockito.MockitoAnnotations;
31
32 import static org.junit.jupiter.api.Assertions.assertEquals;
33 import static org.mockito.ArgumentMatchers.eq;
34 import static org.mockito.ArgumentMatchers.isA;
35 import static org.mockito.Mockito.when;
36
37 public abstract class AbstractInterpolatorFilterReaderLineEndingTest {
38
39 @Mock
40 private Interpolator interpolator;
41
42 @BeforeEach
43 public void onSetup() {
44 MockitoAnnotations.openMocks(this);
45 }
46
47 @Test
48 void defaults() throws Exception {
49 when(interpolator.interpolate(eq("${a}"), eq(""), isA(RecursionInterceptor.class)))
50 .thenReturn("DONE_A");
51
52 Reader in = new StringReader("text without expression");
53 Reader reader = getDollarBracesReader(in, interpolator, "\\");
54 assertEquals("text without expression", IOUtils.toString(reader));
55
56 in = new StringReader("valid expression ${a}");
57 reader = getDollarBracesReader(in, interpolator, null);
58 assertEquals("valid expression DONE_A", IOUtils.toString(reader));
59
60 in = new StringReader("empty expression ${}");
61 reader = getDollarBracesReader(in, interpolator, null);
62 assertEquals("empty expression ${}", IOUtils.toString(reader));
63
64 in = new StringReader("dollar space expression $ {a}");
65 reader = getDollarBracesReader(in, interpolator, "\\");
66 assertEquals("dollar space expression $ {a}", IOUtils.toString(reader));
67
68 in = new StringReader("space in expression ${ a}");
69 reader = getDollarBracesReader(in, interpolator, "\\");
70 assertEquals("space in expression ${ a}", IOUtils.toString(reader));
71
72 in = new StringReader("escape dollar with expression \\${a}");
73 reader = getDollarBracesReader(in, interpolator, "\\");
74 assertEquals("escape dollar with expression ${a}", IOUtils.toString(reader));
75
76
77
78
79
80
81
82
83
84 in = new StringReader("unknown expression ${unknown}");
85 reader = getDollarBracesReader(in, interpolator, "\\");
86 assertEquals("unknown expression ${unknown}", IOUtils.toString(reader));
87 }
88
89
90 @Test
91 void customDelimiters() throws Exception {
92 when(interpolator.interpolate(eq("aaaFILTER.a.MEaaa"), eq(""), isA(RecursionInterceptor.class)))
93 .thenReturn("DONE");
94 when(interpolator.interpolate(eq("abcFILTER.a.MEabc"), eq(""), isA(RecursionInterceptor.class)))
95 .thenReturn("DONE");
96
97 Reader in = new StringReader("aaaFILTER.a.MEaaa");
98 Reader reader = getAaaAaaReader(in, interpolator);
99
100 assertEquals("DONE", IOUtils.toString(reader));
101
102 in = new StringReader("abcFILTER.a.MEabc");
103 reader = getAbcAbcReader(in, interpolator);
104 assertEquals("DONE", IOUtils.toString(reader));
105 }
106
107
108 @Test
109 void markInvalid() throws Exception {
110 try (Reader reader = getAtReader(new StringReader("@\").replace(p,\"]\").replace(q,\""), interpolator, "\\")) {
111 assertEquals("@\").replace(p,\"]\").replace(q,\"", IOUtils.toString(reader));
112 }
113 }
114
115 protected abstract Reader getAbcAbcReader(Reader in, Interpolator interpolator);
116
117 protected abstract Reader getAaaAaaReader(Reader in, Interpolator interpolator);
118
119 protected abstract Reader getDollarBracesReader(Reader in, Interpolator interpolator, String escapeString);
120
121 protected abstract Reader getAtReader(Reader in, Interpolator interpolator, String escapeString);
122 }