blob: 14708f2e4de459bf76b0f7cedbf5cea0604cabc1 [file] [log] [blame]
// 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");
}
}