@@ -131,43 +131,90 @@ public void testEmail127() throws Exception {
131131 email .getBccAddresses (), true );
132132 }
133133
134- @ ParameterizedTest
135- @ MethodSource
136- public void testImgRegex (String inputHtml , List <String > srcMatches ) {
137- Matcher matcher = imgSrcPattern .matcher (inputHtml );
138- for (String expectedMatch : srcMatches ) {
139- assertTrue (matcher .find ());
140- assertEquals (expectedMatch , matcher .group (2 ));
141- }
134+ @ Test
135+ public void testRegex () {
136+ final Pattern pattern = Pattern .compile (ImageHtmlEmail .REGEX_IMG_SRC );
137+
138+ // ensure that the regex that we use is catching the cases correctly
139+ Matcher matcher = pattern .matcher ("<html><body><img src=\" h\" /></body></html>" );
140+ assertTrue (matcher .find ());
141+ assertEquals ("h" , matcher .group (2 ));
142+
143+ matcher = pattern .matcher ("<html><body><img id=\" laskdasdkj\" src=\" h\" /></body></html>" );
144+ assertTrue (matcher .find ());
145+ assertEquals ("h" , matcher .group (2 ));
146+
147+ // uppercase
148+ matcher = pattern .matcher ("<html><body><IMG id=\" laskdasdkj\" SRC=\" h\" /></body></html>" );
149+ assertTrue (matcher .find ());
150+ assertEquals ("h" , matcher .group (2 ));
151+
152+ // matches twice
153+ matcher = pattern .matcher (
154+ "<html><body><img id=\" laskdasdkj\" src=\" http://dstadler1.org/\" /><img id=\" laskdasdkj\" src=\" http://dstadler2.org/\" /></body></html>" );
155+ assertTrue (matcher .find ());
156+ assertEquals ("http://dstadler1.org/" , matcher .group (2 ));
157+ assertTrue (matcher .find ());
158+ assertEquals ("http://dstadler2.org/" , matcher .group (2 ));
159+
160+ // what about newlines
161+ matcher = pattern .matcher (
162+ "<html><body><img\n \r id=\" laskdasdkj\" \n \r src=\" http://dstadler1.org/\" /><img id=\" laskdasdkj\" src=\" http://dstadler2.org/\" /></body></html>" );
163+ assertTrue (matcher .find ());
164+ assertEquals ("http://dstadler1.org/" , matcher .group (2 ));
165+ assertTrue (matcher .find ());
166+ assertEquals ("http://dstadler2.org/" , matcher .group (2 ));
167+
168+ // what about newlines and other whitespaces
169+ matcher = pattern .matcher (
170+ "<html><body><img\n \t \r id=\" laskdasdkj\" \n \r src \n =\r \" http://dstadler1.org/\" /><img \r id=\" laskdasdkj\" src = \" http://dstadler2.org/\" /></body></html>" );
171+ assertTrue (matcher .find ());
172+ assertEquals ("http://dstadler1.org/" , matcher .group (2 ));
173+ assertTrue (matcher .find ());
174+ assertEquals ("http://dstadler2.org/" , matcher .group (2 ));
175+
176+ // what about some real markup
177+ matcher = pattern .matcher (
178+ "<img alt=\" Chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0\" src=\" /chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0.2&l=A,C,S,T&v=3.0,3.0,2.0,2.0\" " );
179+ assertTrue (matcher .find ());
180+ assertEquals ("/chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0.2&l=A,C,S,T&v=3.0,3.0,2.0,2.0" , matcher .group (2 ));
181+
182+ // had a problem with multiple img-source tags
183+ matcher = pattern .matcher ("<img src=\" file1\" /><img src=\" file2\" />" );
184+ assertTrue (matcher .find ());
185+ assertEquals ("file1" , matcher .group (2 ));
186+ assertTrue (matcher .find ());
187+ assertEquals ("file2" , matcher .group (2 ));
188+
189+ matcher = pattern .matcher ("<img src=\" file1\" /><img src=\" file2\" /><img src=\" file3\" /><img src=\" file4\" /><img src=\" file5\" />" );
190+ assertTrue (matcher .find ());
191+ assertEquals ("file1" , matcher .group (2 ));
192+ assertTrue (matcher .find ());
193+ assertEquals ("file2" , matcher .group (2 ));
194+ assertTrue (matcher .find ());
195+ assertEquals ("file3" , matcher .group (2 ));
196+ assertTrue (matcher .find ());
197+ assertEquals ("file4" , matcher .group (2 ));
198+ assertTrue (matcher .find ());
199+ assertEquals ("file5" , matcher .group (2 ));
200+
201+ // try with invalid HTML that is seems sometimes, i.e. without closing "/" or "</img>"
202+ matcher = pattern .matcher ("<img src=\" file1\" ><img src=\" file2\" >" );
203+ assertTrue (matcher .find ());
204+ assertEquals ("file1" , matcher .group (2 ));
205+ assertTrue (matcher .find ());
206+ assertEquals ("file2" , matcher .group (2 ));
207+
208+ // should not match any other tags
209+ matcher = pattern .matcher ("<nomatch src=\" s\" />" );
142210 assertFalse (matcher .find ());
143- }
144211
145- private static Stream <Arguments > testImgRegex () {
146- Stream <Arguments > argumentsStream = Stream .of (
147- // ensure that the regex that we use is catching the cases correctly
148- Arguments .of ("<html><body><img src=\" h\" /></body></html>" , Arrays .asList ("h" )),
149- Arguments .of ("<html><body><img id=\" laskdasdkj\" src=\" h\" /></body></html>" , Arrays .asList ("h" )),
150- // uppercase
151- Arguments .of ("<html><body><IMG id=\" laskdasdkj\" SRC=\" h\" /></body></html>" , Arrays .asList ("h" )),
152- // matches twice
153- Arguments .of ("<html><body><img id=\" laskdasdkj\" src=\" http://dstadler1.org/\" /><img id=\" laskdasdkj\" src=\" http://dstadler2.org/\" /></body></html>" , Arrays .asList ("http://dstadler1.org/" , "http://dstadler2.org/" )),
154- // what about newlines
155- Arguments .of ("<html><body><img\n \r id=\" laskdasdkj\" \n \r src=\" http://dstadler1.org/\" /><img id=\" laskdasdkj\" src=\" http://dstadler2.org/\" /></body></html>" , Arrays .asList ("http://dstadler1.org/" , "http://dstadler2.org/" )),
156- // what about newlines and other whitespaces
157- Arguments .of ("<html><body><img\n \t \r id=\" laskdasdkj\" \n \r src \n =\r \" http://dstadler1.org/\" /><img \r id=\" laskdasdkj\" src = \" http://dstadler2.org/\" /></body></html>" , Arrays .asList ("http://dstadler1.org/" , "http://dstadler2.org/" )),
158- // what about some real markup
159- Arguments .of ("<img alt=\" Chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0\" src=\" /chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0.2&l=A,C,S,T&v=3.0,3.0,2.0,2.0\" " , Arrays .asList ("/chart?ck=xradar&w=120&h=120&c=7fff00|7fff00&m=4&g=0.2&l=A,C,S,T&v=3.0,3.0,2.0,2.0" )),
160- // had a problem with multiple img-source tags
161- Arguments .of ("<img src=\" file1\" /><img src=\" file2\" />" , Arrays .asList ("file1" , "file2" )),
162- Arguments .of ("<img src=\" file1\" /><img src=\" file2\" /><img src=\" file3\" /><img src=\" file4\" /><img src=\" file5\" />" , Arrays .asList ("file1" , "file2" , "file3" , "file4" , "file5" )),
163- // try with invalid HTML that is seen sometimes, i.e. without closing "/" or "</img>"
164- Arguments .of ("<img src=\" file1\" ><img src=\" file2\" >" , Arrays .asList ("file1" , "file2" )),
165- // should not match some other tag
166- Arguments .of ("<nomatch src=\" s\" />" , Arrays .asList ()),
167- Arguments .of ("<imgx src=\" file1\" >" , Arrays .asList ()),
168- Arguments .of ("<img xsrc=\" file1\" >" , Arrays .asList ())
169- );
170- return argumentsStream ;
212+ matcher = pattern .matcher ("<imgx src=\" file1\" >" );
213+ assertFalse (matcher .find ());
214+
215+ // should not match any other attribute
216+ matcher = pattern .matcher ("<img xsrc=\" file1\" >" );
217+ assertFalse (matcher .find ());
171218 }
172219
173220 @ ParameterizedTest
@@ -201,9 +248,10 @@ private static Stream<Arguments> testScriptRegex() {
201248 // try with invalid scripts
202249 Arguments .of ("<script src=\" s\" />" , Arrays .asList ("s" )),
203250 Arguments .of ("<script src=\" s\" >" , Arrays .asList ("s" )),
204- // should not match some other tag
251+ // should not match any other tags
205252 Arguments .of ("<nomatch src=\" s\" />" , Arrays .asList ()),
206253 Arguments .of ("<scriptx src=\" s\" />" , Arrays .asList ()),
254+ // should not match any other attribute
207255 Arguments .of ("<script xsrc=\" s\" />" , Arrays .asList ())
208256 );
209257 return argumentsStream ;
0 commit comments