@@ -290,10 +290,91 @@ private void runUrlContainerValidation(Validator validator, URLContainer contain
290
290
}
291
291
292
292
private void assertValidUrls (ConstraintValidator <URL , CharSequence > validator ) {
293
+ //valid urls
293
294
assertTrue ( validator .isValid ( null , null ) );
295
+ assertTrue ( validator .isValid ( "ftp://abc.de" , null ) );
296
+ assertTrue ( validator .isValid ( "http://foo.com/blah_blah" , null ) );
297
+ assertTrue ( validator .isValid ( "http://foo.com/blah_blah/" , null ) );
298
+ assertTrue ( validator .isValid ( "http://foo.com/blah_blah_(wikipedia)" , null ) );
299
+ assertTrue ( validator .isValid ( "http://foo.com/blah_blah_(wikipedia)_(again)" , null ) );
300
+ assertTrue ( validator .isValid ( "http://www.example.com/wpstyle/?p=364" , null ) );
301
+ assertTrue ( validator .isValid ( "https://www.example.com/foo/?bar=baz&inga=42&quux" , null ) );
302
+ assertTrue ( validator .isValid ( "http://✪df.ws/123" , null ) );
303
+ assertTrue ( validator .isValid ( "http://userid:password@example.com:8080" , null ) );
304
+ assertTrue ( validator .isValid ( "http://userid:password@example.com:8080/" , null ) );
305
+ assertTrue ( validator .isValid ( "http://userid@example.com" , null ) );
306
+ assertTrue ( validator .isValid ( "http://userid@example.com/" , null ) );
307
+ assertTrue ( validator .isValid ( "http://userid@example.com:8080" , null ) );
308
+ assertTrue ( validator .isValid ( "http://userid@example.com:8080/" , null ) );
309
+ assertTrue ( validator .isValid ( "http://userid:password@example.com" , null ) );
310
+ assertTrue ( validator .isValid ( "http://userid:password@example.com/" , null ) );
311
+ assertTrue ( validator .isValid ( "http://142.42.1.1/" , null ) );
312
+ assertTrue ( validator .isValid ( "http://142.42.1.1:8080/" , null ) );
313
+ assertTrue ( validator .isValid ( "http://➡.ws/䨹" , null ) );
314
+ assertTrue ( validator .isValid ( "http://⌘.ws" , null ) );
315
+ assertTrue ( validator .isValid ( "http://⌘.ws/" , null ) );
316
+ assertTrue ( validator .isValid ( "http://foo.com/blah_(wikipedia)#cite-1" , null ) );
317
+ assertTrue ( validator .isValid ( "http://foo.com/blah_(wikipedia)_blah#cite-1" , null ) );
318
+ assertTrue ( validator .isValid ( "http://foo.com/unicode_(✪)_in_parens" , null ) );
319
+ assertTrue ( validator .isValid ( "http://foo.com/(something)?after=parens" , null ) );
320
+ assertTrue ( validator .isValid ( "http://☺.damowmow.com/" , null ) );
321
+ assertTrue ( validator .isValid ( "http://code.google.com/events/#&product=browser" , null ) );
322
+ assertTrue ( validator .isValid ( "http://j.mp" , null ) );
323
+ assertTrue ( validator .isValid ( "ftp://foo.bar/baz" , null ) );
324
+ assertTrue ( validator .isValid ( "http://foo.bar/?q=Test%20URL-encoded%20stuff" , null ) );
325
+ assertTrue ( validator .isValid ( "http://مثال.إختبار" , null ) );
326
+ assertTrue ( validator .isValid ( "http://例子.测试" , null ) );
327
+ assertTrue ( validator .isValid ( "http://उदाहरण.परीक्षा" , null ) );
328
+ assertTrue ( validator .isValid ( "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com" , null ) );
329
+ assertTrue ( validator .isValid ( "http://1337.net" , null ) );
330
+ assertTrue ( validator .isValid ( "http://a.b-c.de" , null ) );
331
+ assertTrue ( validator .isValid ( "http://223.255.255.254" , null ) );
332
+ assertTrue ( validator .isValid ( "http://[2001:0db8:0a0b:12f0:0000:0000:0000:0001]" , null ) );
333
+
334
+ // invalid urls:
294
335
assertFalse ( validator .isValid ( "http" , null ) );
295
336
assertFalse ( validator .isValid ( "ftp//abc.de" , null ) );
296
- assertTrue ( validator .isValid ( "ftp://abc.de" , null ) );
337
+ assertFalse ( validator .isValid ( "//" , null ) );
338
+ assertFalse ( validator .isValid ( "//a" , null ) );
339
+ assertFalse ( validator .isValid ( "///" , null ) );
340
+ assertFalse ( validator .isValid ( "///a" , null ) );
341
+ assertFalse ( validator .isValid ( "foo.com" , null ) );
342
+ assertFalse ( validator .isValid ( ":// should fail" , null ) );
343
+
344
+ if ( validator instanceof URLValidator ) {
345
+ // 'exotic' protocols are considered valid using RegexpURLValidator but not URLValidator
346
+ // as the last one doesn't allow unknown protocols
347
+ assertFalse ( validator .isValid ( "rdar://1234" , null ) );
348
+ assertFalse ( validator .isValid ( "ftps://foo.bar/" , null ) );
349
+ assertFalse ( validator .isValid ( "h://test" , null ) );
350
+ }
351
+
352
+ if ( validator instanceof RegexpURLValidator ) {
353
+ assertFalse ( validator .isValid ( "http://" , null ) );
354
+ assertFalse ( validator .isValid ( "http://." , null ) );
355
+ assertFalse ( validator .isValid ( "http://.." , null ) );
356
+ assertFalse ( validator .isValid ( "http://../" , null ) );
357
+ assertFalse ( validator .isValid ( "http://?" , null ) );
358
+ assertFalse ( validator .isValid ( "http://??" , null ) );
359
+ assertFalse ( validator .isValid ( "http://??/" , null ) );
360
+ assertFalse ( validator .isValid ( "http://#" , null ) );
361
+ assertFalse ( validator .isValid ( "http://##" , null ) );
362
+ assertFalse ( validator .isValid ( "http://##/" , null ) );
363
+ assertFalse ( validator .isValid ( "http://foo.bar?q=Spaces should be encoded" , null ) );
364
+ assertFalse ( validator .isValid ( "http:///a" , null ) );
365
+ assertFalse ( validator .isValid ( "http:// shouldfail.com" , null ) );
366
+ assertFalse ( validator .isValid ( "http://foo.bar/foo(bar)baz quux" , null ) );
367
+ assertFalse ( validator .isValid ( "http://-error-.invalid/" , null ) );
368
+ assertFalse ( validator .isValid ( "http://a.b--c.de/" , null ) );
369
+ assertFalse ( validator .isValid ( "http://-a.b.co" , null ) );
370
+ assertFalse ( validator .isValid ( "http://a.b-.co" , null ) );
371
+ // assertFalse( validator.isValid( "http://123.123.123", null ) );
372
+ // assertFalse( validator.isValid( "http://3628126748", null ) );
373
+ assertFalse ( validator .isValid ( "http://.www.foo.bar/" , null ) );
374
+ assertFalse ( validator .isValid ( "http://www.foo.bar./" , null ) );
375
+ assertFalse ( validator .isValid ( "http://.www.foo.bar./" , null ) );
376
+ assertFalse ( validator .isValid ( "http://2001:0db8:0a0b:12f0:0000:0000:0000:0001" , null ) );
377
+ }
297
378
}
298
379
299
380
private void assertValidCharSequenceUrls (ConstraintValidator <URL , CharSequence > validator ) {
0 commit comments