summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2017-01-21 11:44:52 +0100
committerGitHub <noreply@github.com>2017-01-21 11:44:52 +0100
commite634ee858cf09e87e1fb5cbe09fcd79e59700049 (patch)
treecf21b9a9ea34f5402384ec777f5e80da198c8ff3 /lib
parentebcc88238e26078a1ac2c7199773a0962b5b0c88 (diff)
parentf2ce8eb3723656237702638f5f81f95b9f44e06d (diff)
downloadNim-e634ee858cf09e87e1fb5cbe09fcd79e59700049.tar.gz
Merge pull request #5255 from enthus1ast/devel
added isAbsolute to uri.nim
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/uri.nim45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/pure/uri.nim b/lib/pure/uri.nim
index e7db39c10..ba745cfd3 100644
--- a/lib/pure/uri.nim
+++ b/lib/pure/uri.nim
@@ -245,6 +245,10 @@ proc combine*(uris: varargs[Uri]): Uri =
   for i in 1 .. <uris.len:
     result = combine(result, uris[i])
 
+proc isAbsolute*(uri: Uri): bool =
+  ## returns true if URI is absolute, false otherwise
+  return uri.scheme != "" and (uri.hostname != "" or uri.path != "")
+
 proc `/`*(x: Uri, path: string): Uri =
   ## Concatenates the path specified to the specified URI's path.
   ##
@@ -452,3 +456,44 @@ when isMainModule:
   block:
     let foo = parseUri("http://example.com") / "/baz"
     doAssert foo.path == "/baz"
+
+  # isAbsolute tests
+  block:
+    doAssert "www.google.com".parseUri().isAbsolute() == false
+    doAssert "http://www.google.com".parseUri().isAbsolute() == true
+    doAssert "file:/dir/file".parseUri().isAbsolute() == true
+    doAssert "file://localhost/dir/file".parseUri().isAbsolute() == true
+    doAssert "urn:ISSN:1535-3613".parseUri().isAbsolute() == true
+
+    # path-relative URL *relative
+    doAssert "about".parseUri().isAbsolute == false
+    doAssert "about/staff.html".parseUri().isAbsolute == false
+    doAssert "about/staff.html?".parseUri().isAbsolute == false
+    doAssert "about/staff.html?parameters".parseUri().isAbsolute == false
+
+    # absolute-path-relative URL *relative
+    doAssert "/".parseUri().isAbsolute == false
+    doAssert "/about".parseUri().isAbsolute == false
+    doAssert "/about/staff.html".parseUri().isAbsolute == false
+    doAssert "/about/staff.html?".parseUri().isAbsolute == false
+    doAssert "/about/staff.html?parameters".parseUri().isAbsolute == false
+
+    # scheme-relative URL *relative
+    doAssert "//username:password@example.com:8888".parseUri().isAbsolute == false
+    doAssert "//username@example.com".parseUri().isAbsolute == false
+    doAssert "//example.com".parseUri().isAbsolute == false
+    doAssert "//example.com/".parseUri().isAbsolute == false
+    doAssert "//example.com/about".parseUri().isAbsolute == false
+    doAssert "//example.com/about/staff.html".parseUri().isAbsolute == false
+    doAssert "//example.com/about/staff.html?".parseUri().isAbsolute == false
+    doAssert "//example.com/about/staff.html?parameters".parseUri().isAbsolute == false
+
+    # absolute URL *absolute
+    doAssert "https://username:password@example.com:8888".parseUri().isAbsolute == true
+    doAssert "https://username@example.com".parseUri().isAbsolute == true
+    doAssert "https://example.com".parseUri().isAbsolute == true
+    doAssert "https://example.com/".parseUri().isAbsolute == true
+    doAssert "https://example.com/about".parseUri().isAbsolute == true
+    doAssert "https://example.com/about/staff.html".parseUri().isAbsolute == true
+    doAssert "https://example.com/about/staff.html?".parseUri().isAbsolute == true
+    doAssert "https://example.com/about/staff.html?parameters".parseUri().isAbsolute == true
\ No newline at end of file