Path manipulation now works with SomeSystemPath correctly.
This commit is contained in:
parent
05af2b9e17
commit
9a65545814
58
collects/tests/typed-scheme/succeed/paths.rkt
Normal file
58
collects/tests/typed-scheme/succeed/paths.rkt
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#lang typed/racket
|
||||||
|
|
||||||
|
(: foo-path Path)
|
||||||
|
(define foo-path (build-path "foo" "bar" 'same 'up))
|
||||||
|
|
||||||
|
;Check predicates are always true
|
||||||
|
(+ (if (path? foo-path) 2 'two)
|
||||||
|
(if (path-for-some-system? foo-path) 3 'three))
|
||||||
|
|
||||||
|
(: current-system (U 'unix 'windows))
|
||||||
|
(define current-system (system-path-convention-type))
|
||||||
|
|
||||||
|
(: other-system (U 'unix 'windows))
|
||||||
|
(define other-system
|
||||||
|
(case (system-path-convention-type)
|
||||||
|
((unix) 'windows)
|
||||||
|
((windows) 'unix)))
|
||||||
|
|
||||||
|
(: other-foo-path SomeSystemPath)
|
||||||
|
(define other-foo-path
|
||||||
|
(build-path/convention-type other-system
|
||||||
|
(string->some-system-path "foo" other-system)
|
||||||
|
(string->some-system-path "bar" other-system)
|
||||||
|
'same
|
||||||
|
'up))
|
||||||
|
|
||||||
|
|
||||||
|
(path->string foo-path)
|
||||||
|
(some-system-path->string other-foo-path)
|
||||||
|
(path->bytes foo-path)
|
||||||
|
(path->bytes other-foo-path)
|
||||||
|
|
||||||
|
(bytes->path #"foo" other-system)
|
||||||
|
(string->path "foo")
|
||||||
|
|
||||||
|
(bytes->path-element #"foo" other-system)
|
||||||
|
(string->path-element "foo")
|
||||||
|
|
||||||
|
|
||||||
|
(cleanse-path foo-path)
|
||||||
|
(cleanse-path other-foo-path)
|
||||||
|
|
||||||
|
(expand-user-path foo-path)
|
||||||
|
|
||||||
|
(absolute-path? other-foo-path)
|
||||||
|
(relative-path? other-foo-path)
|
||||||
|
(complete-path? other-foo-path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(split-path foo-path)
|
||||||
|
(split-path other-foo-path)
|
||||||
|
|
||||||
|
|
||||||
|
;Original Soundness bug
|
||||||
|
(when (path? other-foo-path) (error 'path "This shouldn't be raised"))
|
||||||
|
|
|
@ -868,6 +868,25 @@
|
||||||
[tc-e (in-hash #hash((1 . 2))) (-seq -Integer -Integer)]
|
[tc-e (in-hash #hash((1 . 2))) (-seq -Integer -Integer)]
|
||||||
[tc-e (in-hash-keys #hash((1 . 2))) (-seq -Integer)]
|
[tc-e (in-hash-keys #hash((1 . 2))) (-seq -Integer)]
|
||||||
[tc-e (in-hash-values #hash((1 . 2))) (-seq -Integer)]
|
[tc-e (in-hash-values #hash((1 . 2))) (-seq -Integer)]
|
||||||
|
|
||||||
|
;;Path tests
|
||||||
|
(tc-e (bytes->path #"foo" 'unix) -SomeSystemPath)
|
||||||
|
(tc-e (bytes->path #"foo") -Path)
|
||||||
|
(tc-e (bytes->path-element #"foo") -Path)
|
||||||
|
(tc-e (bytes->path-element #"foo" 'windows) -SomeSystemPath)
|
||||||
|
|
||||||
|
(tc-e (cleanse-path "foo") -Path)
|
||||||
|
(tc-e (cleanse-path (string->some-system-path "foo" 'unix)) -SomeSystemPath)
|
||||||
|
(tc-e (simplify-path "foo") -Path)
|
||||||
|
(tc-e (simplify-path "foo" #t) -Path)
|
||||||
|
(tc-e (simplify-path (string->some-system-path "foo" 'unix) #f) -SomeSystemPath)
|
||||||
|
(tc-e (path->directory-path "foo") -Path)
|
||||||
|
(tc-e (path->directory-path (string->some-system-path "foo" 'unix)) -SomeSystemPath)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
(test-suite
|
(test-suite
|
||||||
"check-type tests"
|
"check-type tests"
|
||||||
|
|
|
@ -391,10 +391,8 @@
|
||||||
|
|
||||||
[string-copy (-> -String -String)]
|
[string-copy (-> -String -String)]
|
||||||
[string->immutable-string (-> -String -String)]
|
[string->immutable-string (-> -String -String)]
|
||||||
[string->path (-> -String -Path)]
|
|
||||||
|
|
||||||
|
|
||||||
[build-path ((list -SomeSystemPathlike*) -SomeSystemPathlike* . ->* . -Path)]
|
|
||||||
[with-input-from-file
|
[with-input-from-file
|
||||||
(-poly (a) (->key -Pathlike (-> a) #:mode (one-of/c 'binary 'text) #f a))]
|
(-poly (a) (->key -Pathlike (-> a) #:mode (one-of/c 'binary 'text) #f a))]
|
||||||
[with-output-to-file
|
[with-output-to-file
|
||||||
|
@ -532,7 +530,6 @@
|
||||||
[seconds->date (-Integer . -> . (make-Name #'date))]
|
[seconds->date (-Integer . -> . (make-Name #'date))]
|
||||||
[current-seconds (-> -Integer)]
|
[current-seconds (-> -Integer)]
|
||||||
[current-print (-Param (Univ . -> . Univ) (Univ . -> . Univ))]
|
[current-print (-Param (Univ . -> . Univ) (Univ . -> . Univ))]
|
||||||
[path->string (-> -Path -String)]
|
|
||||||
|
|
||||||
[link-exists? (-> -Pathlike B)]
|
[link-exists? (-> -Pathlike B)]
|
||||||
[directory-exists? (-> -Pathlike B)]
|
[directory-exists? (-> -Pathlike B)]
|
||||||
|
@ -550,6 +547,88 @@
|
||||||
[file-size (-> -Pathlike -Nat)]
|
[file-size (-> -Pathlike -Nat)]
|
||||||
|
|
||||||
|
|
||||||
|
;; path manipulation
|
||||||
|
|
||||||
|
[path? (make-pred-ty -Path)]
|
||||||
|
[path-string? (-> Univ B)]
|
||||||
|
[path-for-some-system? (make-pred-ty -SomeSystemPath)]
|
||||||
|
|
||||||
|
[string->path (-> -String -Path)]
|
||||||
|
[bytes->path (cl->* (-> -Bytes -Path) (-> -Bytes -PathConventionType -SomeSystemPath))]
|
||||||
|
[path->string (-> -Path -String)]
|
||||||
|
[path->bytes (-> -SomeSystemPath -Bytes)]
|
||||||
|
|
||||||
|
[string->path-element (-> -String -Path)]
|
||||||
|
[bytes->path-element (cl->* (-> -Bytes -Path) (-> -Bytes -PathConventionType -SomeSystemPath))]
|
||||||
|
[path-element->string (-> -Path -String)]
|
||||||
|
[path-element->bytes (-> -SomeSystemPath -Bytes)]
|
||||||
|
|
||||||
|
[path-convention-type (-> -SomeSystemPath -PathConventionType)]
|
||||||
|
[system-path-convention-type (-> -PathConventionType)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[build-path (cl->*
|
||||||
|
((list -Pathlike*) -Pathlike* . ->* . -Path)
|
||||||
|
((list -SomeSystemPathlike*) -SomeSystemPathlike* . ->* . -SomeSystemPath))]
|
||||||
|
[build-path/convention-type
|
||||||
|
((list -PathConventionType -SomeSystemPathlike*) -SomeSystemPathlike* . ->* . -SomeSystemPath)]
|
||||||
|
|
||||||
|
[absolute-path? (-> -SomeSystemPath B)]
|
||||||
|
[relative-path? (-> -SomeSystemPath B)]
|
||||||
|
[complete-path? (-> -SomeSystemPath B)]
|
||||||
|
|
||||||
|
[path->complete-path
|
||||||
|
(cl->* (-> -Pathlike -Path)
|
||||||
|
(-> -Pathlike -Pathlike -Path)
|
||||||
|
(-> -SomeSystemPathlike -SomeSystemPathlike -SomeSystemPath))]
|
||||||
|
|
||||||
|
[path->directory-path
|
||||||
|
(cl->* (-> -Pathlike -Path)
|
||||||
|
(-> -SomeSystemPathlike -SomeSystemPath))]
|
||||||
|
|
||||||
|
[resolve-path (-> -Path -Path)]
|
||||||
|
[cleanse-path
|
||||||
|
(cl->* (-> -Pathlike -Path)
|
||||||
|
(-> -SomeSystemPathlike -SomeSystemPath))]
|
||||||
|
[expand-user-path (-> -Path -Path)]
|
||||||
|
|
||||||
|
[simplify-path
|
||||||
|
(cl->*
|
||||||
|
(-Pathlike . -> . -Path)
|
||||||
|
(-Pathlike B . -> . -Path)
|
||||||
|
(-SomeSystemPathlike B . -> . -SomeSystemPath))]
|
||||||
|
|
||||||
|
[normal-case-path
|
||||||
|
(cl->* (-> -Pathlike -Path)
|
||||||
|
(-> -SomeSystemPathlike -SomeSystemPath))]
|
||||||
|
|
||||||
|
[split-path
|
||||||
|
(cl->*
|
||||||
|
(-> -Pathlike
|
||||||
|
(-values (list
|
||||||
|
(Un -Path (-val 'relative) (-val #f))
|
||||||
|
(Un -Path (-val 'up) (-val 'same))
|
||||||
|
B)))
|
||||||
|
(-> -SomeSystemPathlike
|
||||||
|
(-values (list
|
||||||
|
(Un -SomeSystemPath (-val 'relative) (-val #f))
|
||||||
|
(Un -SomeSystemPath (-val 'up) (-val 'same))
|
||||||
|
B))))]
|
||||||
|
|
||||||
|
[path-replace-suffix
|
||||||
|
(cl->*
|
||||||
|
(-> -Pathlike (Un -String -Bytes) -Path)
|
||||||
|
(-> -SomeSystemPathlike (Un -String -Bytes) -SomeSystemPath))]
|
||||||
|
|
||||||
|
[path-add-suffix
|
||||||
|
(cl->*
|
||||||
|
(-> -Pathlike (Un -String -Bytes) -Path)
|
||||||
|
(-> -SomeSystemPathlike (Un -String -Bytes) -SomeSystemPath))]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[hash? (make-pred-ty (make-HashtableTop))]
|
[hash? (make-pred-ty (make-HashtableTop))]
|
||||||
[hash-eq? (-> (make-HashtableTop) B)]
|
[hash-eq? (-> (make-HashtableTop) B)]
|
||||||
[hash-eqv? (-> (make-HashtableTop) B)]
|
[hash-eqv? (-> (make-HashtableTop) B)]
|
||||||
|
@ -749,8 +828,6 @@
|
||||||
|
|
||||||
[object-name (Univ . -> . Univ)]
|
[object-name (Univ . -> . Univ)]
|
||||||
|
|
||||||
[path? (make-pred-ty -Path)]
|
|
||||||
[path-for-some-system? (make-pred-ty -SomeSystemPath)]
|
|
||||||
|
|
||||||
;; scheme/function
|
;; scheme/function
|
||||||
[const (-poly (a) (-> a (->* '() Univ a)))]
|
[const (-poly (a) (-> a (->* '() Univ a)))]
|
||||||
|
@ -855,11 +932,6 @@
|
||||||
[string->some-system-path
|
[string->some-system-path
|
||||||
(-String (Un (-val 'unix) (-val 'windows)) . -> . -SomeSystemPath)]
|
(-String (Un (-val 'unix) (-val 'windows)) . -> . -SomeSystemPath)]
|
||||||
|
|
||||||
[simplify-path (-SomeSystemPathlike [B] . ->opt . -SomeSystemPath)]
|
|
||||||
[path->complete-path
|
|
||||||
(cl->* (-> -Pathlike -Path)
|
|
||||||
(-> -SomeSystemPathlike -SomeSystemPathlike -SomeSystemPath))]
|
|
||||||
[system-path-convention-type (-> (Un (-val 'unix) (-val 'windows)))]
|
|
||||||
|
|
||||||
|
|
||||||
;; scheme/file
|
;; scheme/file
|
||||||
|
|
|
@ -166,8 +166,10 @@
|
||||||
(define -SomeSystemPath (*Un -Path -OtherSystemPath))
|
(define -SomeSystemPath (*Un -Path -OtherSystemPath))
|
||||||
(define -Pathlike (*Un -String -Path))
|
(define -Pathlike (*Un -String -Path))
|
||||||
(define -SomeSystemPathlike (*Un -String -SomeSystemPath))
|
(define -SomeSystemPathlike (*Un -String -SomeSystemPath))
|
||||||
;(define -Pathlike* (*Un -String -Path (-val 'up) (-val 'same)))
|
(define -Pathlike* (*Un -String -Path (-val 'up) (-val 'same)))
|
||||||
(define -SomeSystemPathlike* (*Un -String -SomeSystemPath(-val 'up) (-val 'same)))
|
(define -SomeSystemPathlike* (*Un -String -SomeSystemPath(-val 'up) (-val 'same)))
|
||||||
|
(define -PathConventionType (*Un (-val 'unix) (-val 'windows)))
|
||||||
|
|
||||||
(define -Pattern (*Un -Bytes -Regexp -PRegexp -Byte-Regexp -Byte-PRegexp -String))
|
(define -Pattern (*Un -Bytes -Regexp -PRegexp -Byte-Regexp -Byte-PRegexp -String))
|
||||||
|
|
||||||
(define -top (make-Top))
|
(define -top (make-Top))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user