module Tests.Path open NUnit.Framework open Pentole open Pentole.Assert open Pentole.Path [] let constructor_test () = "/" |> Path.of_string |> Result.isOk |> isTrue '\000' |> string |> Path.of_string |> Result.isOk |> isFalse [] let absolute_test () = let is_absolute (p: IPath) = p.string_value |> System.IO.Path.IsPathFullyQualified let test (s:string) = s |> Path.of_string |> Result.map is_absolute "/" |> test |> okEquals true "//" |> test |> okEquals true "tmp/" |> test |> okEquals false "tmp" |> test |> okEquals false "~" |> test |> okEquals false "." |> test |> okEquals false ".." |> test |> okEquals false "../" |> test |> okEquals false "../../" |> test |> okEquals false "..a" |> test |> okEquals false ":a" |> test |> okEquals false "\\a" |> test |> okEquals false "/etc/../" |> test |> okEquals true "/tmp/Char:é" |> test |> okEquals true [] let resolve_test () = let test (s:string) = s |> Path.of_string |> Result.map FileSystem.resolve |> Result.Unsafe.get let p (n: string ) = Path.of_string n |> Result.Unsafe.get "/" |> test |> okEquals (p "/") "/etc/../" |> test |> okEquals (p "/") "/etc/../etc" |> test |> okEquals (p "/etc") [] let equality_test () = let p (n: string ) = Path.of_string n |> Result.Unsafe.get areEqual (p "/etc") (p "/etc/") areNotEqual (p "etc") (p "/etc/") areNotEqual (p "etc") (p "/etc") areEqual (Path.of_string "/tmp" ) ( Path.of_string "/tmp/") isTrue (Path.of_string "/tmp" = Path.of_string "/tmp/") [] let parent_test () = let p (n: string ) = Path.of_string n |> Result.Unsafe.get let test (s:string) = s |> Path.of_string |> Result.Unsafe.get |> parent "/" |> test |> areEqual (p "/") "/etc/" |> test |> areEqual (p "/") "/etc/conf" |> test |> areEqual (p "/etc") "/etc/../etc" |> test |> areEqual (p "/etc/../") "etc/../etc" |> test |> areEqual (p "etc/../") [] let exitsts_test () = let p (n: string ) = Path.of_string n |> Result.Unsafe.get FileSystem.exists (p "/tmp/") |> isTrue FileSystem.exists (p "/IHOPE_this_DOESNT_exist/") |> isFalse