| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// @assertion Uri parse(String uri, [int start = 0, int end]) |
| /// Creates a new Uri object by parsing a URI string. |
| /// |
| /// If start and end are provided, only the substring from start to end is parsed |
| /// as a URI. |
| /// |
| /// If the string is not valid as a URI or URI reference, a FormatException is |
| /// thrown. |
| /// @description Checks that components of well-formed URI match |
| /// appropriate regexp match groups. |
| /// RFC-3986 The following line is the regular expression for |
| /// breaking-down a well-formed URI reference into its components. |
| /// ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? |
| /// 12 3 4 5 6 7 8 9 |
| /// scheme = $2 |
| /// authority = $4 |
| /// path = $5 |
| /// query = $7 |
| /// fragment = $9 |
| /// @author ilya |
| |
| import "../../../Utils/expect.dart"; |
| |
| var r = new RegExp(r'^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?'); |
| |
| main() { |
| var s = 'scheme://user:pass@foo.bar-baz:123/A/V/file-name.ext?query#fragment'; |
| var uri = Uri.parse(s); |
| var match = r.firstMatch(s); |
| if (match != null) { |
| Expect.equals(match[2], uri.scheme); |
| Expect.equals(match[4], uri.authority); |
| Expect.equals(match[5], uri.path); |
| Expect.equals(match[7], uri.query); |
| Expect.equals(match[9], uri.fragment); |
| } else { |
| Expect.fail("match is null"); |
| } |
| } |