@@ -134,4 +134,33 @@ void main() {
134134 // `close` on a `contentWindow` does nothing.
135135 expect (contentWindow.closed, false );
136136 });
137+
138+ test ('converts from a JS to a Dart URL' , () {
139+ final url =
140+ URL ('https://foo:bar@example.org:1234/path?query#fragment' ).toDart;
141+ expect (url.scheme, equals ('https' ));
142+ expect (url.userInfo, equals ('foo:bar' ));
143+ expect (url.host, equals ('example.org' ));
144+ expect (url.port, equals (1234 ));
145+ expect (url.path, equals ('/path' ));
146+ expect (url.query, equals ('query' ));
147+ expect (url.fragment, equals ('fragment' ));
148+ });
149+
150+ test ('converts from a Dart to a JS URL' , () {
151+ final url =
152+ Uri .parse ('https://foo:bar@example.org:1234/path?query#fragment' ).toJS;
153+ expect (url.protocol, equals ('https:' ));
154+ expect (url.username, equals ('foo' ));
155+ expect (url.password, equals ('bar' ));
156+ expect (url.hostname, equals ('example.org' ));
157+ expect (url.port, equals ('1234' ));
158+ expect (url.pathname, equals ('/path' ));
159+ expect (url.search, equals ('?query' ));
160+ expect (url.hash, equals ('#fragment' ));
161+ });
162+
163+ test ('Uri.toJS throws an ArgumentError for a relative URL' , () {
164+ expect (() => Uri .parse ('/path' ).toJS, throwsArgumentError);
165+ });
137166}
0 commit comments