|
| 1 | +import 'package:formdator/src/net/url.dart'; |
| 2 | +import 'package:test/test.dart'; |
| 3 | + |
| 4 | +void main() { |
| 5 | + group('URL', () { |
| 6 | + const error = 'malformed URL value'; |
| 7 | + const url = Url(mal: error); |
| 8 | + test('Valid Urls:', () { |
| 9 | + expect(url(null), null); |
| 10 | + expect(url('//shortsyntax.com'), null); |
| 11 | + expect(url('//www.shortsyntax.com'), null); |
| 12 | + expect(url('http://www.example.com'), null); |
| 13 | + expect(url('http://www.example.com.'), null); |
| 14 | + expect(url('http://www.example.com/index.html'), null); |
| 15 | + expect(url('http://example.com?foo=bar'), null); |
| 16 | + expect(url('https://www.example.com/foo/?bar=baz&inga=42&quux'), null); |
| 17 | + expect(url('http://odf.ws/123'), null); |
| 18 | + expect(url('http://userid:password@example.com:8080'), null); |
| 19 | + expect(url('http://userid:password@example.com:8080/'), null); |
| 20 | + expect(url('https://www.youtube.com/watch?v=nmhX3_m84Is'), null); |
| 21 | + expect(url('http://foo.com/blah_blah#cite-1'), null); |
| 22 | + expect(url('http://userid@example.com:8080/'), null); |
| 23 | + expect(url('http://foo.com/blah_(wikipedia)#cite-1'), null); |
| 24 | + expect(url('http://foo.com/blah_(wikipedia)_blah#cite-1'), null); |
| 25 | + expect(url('http://code.google.com/events/#&product=browser'), null); |
| 26 | + expect(url('http://foo.bar/?q=Test%20URL-encoded%20stuff'), null); |
| 27 | + expect(url("http://-.~_!&'()*+,;=:%40:80%2f::::::@example.com"), null); |
| 28 | + expect(url('https://foo_bar.example.com/'), null); |
| 29 | + expect(url('http://1337.net'), null); |
| 30 | + expect(url('http://192.168.0.3'), null); |
| 31 | + expect(url('http://192.168.0.3/resource'), null); |
| 32 | + expect(url('http://223.255.255.254'), null); |
| 33 | + }); |
| 34 | + test('Valid FTP Urls:', () { |
| 35 | + expect(url('ftp://example.com'), null); |
| 36 | + expect(url('ftp://example.com:8080'), null); |
| 37 | + expect(url('ftp://example.com:8080/'), null); |
| 38 | + expect(url('ftp://example.com:8080/url-path'), null); |
| 39 | + expect(url('ftp://userid:password@example.com:8080/url-path'), null); |
| 40 | + }); |
| 41 | + test('invalid URLs', () { |
| 42 | + expect(url(''), error); |
| 43 | + expect(url('//'), error); |
| 44 | + expect(url('://'), error); |
| 45 | + expect(url('//a'), error); |
| 46 | + expect(url('http://'), error); |
| 47 | + expect(url('http:///a'), error); |
| 48 | + expect(url('foo.com'), error); |
| 49 | + expect(url('rdar://1234'), error); |
| 50 | + expect(url('http://.'), error); |
| 51 | + expect(url('http://..'), error); |
| 52 | + expect(url('http://?'), error); |
| 53 | + expect(url('http://??'), error); |
| 54 | + expect(url('http://#'), error); |
| 55 | + expect(url('http://##'), error); |
| 56 | + expect(url('1'), error); |
| 57 | + expect(url('10.10'), error); |
| 58 | + expect(url('0.0.0.0'), error); |
| 59 | + expect(url('http://10.1.1.255'), error); |
| 60 | + expect(url('http://224.1.1.1'), error); |
| 61 | + expect(url('http://3628126748'), error); |
| 62 | + // the first IP andress (network) of each class is considered invalid. |
| 63 | + expect(url('http://192.168.0.0'), error); |
| 64 | + expect(url('http://192.168.0.0/resource'), error); |
| 65 | + // the last IP andress (broadcast) of each class is considered invalid. |
| 66 | + expect(url('http://192.168.0.255/'), error); |
| 67 | + expect(url('http://192.168.0.255/resource'), error); |
| 68 | + |
| 69 | + expect(url('http://?df.ws/123'), error); |
| 70 | + expect(url('http:// shouldfail.com'), error); |
| 71 | + expect(url('http://.www.foo.bar/'), error); |
| 72 | + expect(url('http://foo.bar?q=Spaces should be encoded'), error); |
| 73 | + }); |
| 74 | + }); |
| 75 | +} |
0 commit comments