// Copyright (c) 2017, 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 bool hasFragment
/// Returns whether the URI has a fragment part.
/// @description Checks that this property returns true if the URI has a fragment
/// part
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

main() {
  var uri = new Uri(path: "index.dart");
  Expect.isFalse(uri.hasFragment);
  
  uri = new Uri(port: 123);
  Expect.isFalse(uri.hasFragment);
  
  uri = new Uri(fragment: "mark");
  Expect.isTrue(uri.hasFragment);

  uri = Uri.parse("https://www.dartlang.org/");
  Expect.isFalse(uri.hasFragment);

  uri = Uri.parse("https://www.dartlang.org/guides/language/sound-faq#is-typing-optional");
  Expect.isTrue(uri.hasFragment);

  uri = Uri.parse("foo:/");
  Expect.isFalse(uri.hasFragment);

  uri = Uri.parse("/a/b/c/index.dart#mark");
  Expect.isTrue(uri.hasFragment);

  uri = Uri.parse("a/b/c/index.dart#mark");
  Expect.isTrue(uri.hasFragment);
}
