|
10 | 10 | racket/contract/base |
11 | 11 | framework/preferences) |
12 | 12 |
|
| 13 | +;; For uniform comparisons, all tests use simplified paths normalized |
| 14 | +;; with path->directory-path when applicable. |
| 15 | + |
13 | 16 | (define (path-base pth) |
14 | 17 | (define-values (base name dir?) |
15 | 18 | (split-path pth)) |
|
30 | 33 | (preferences:get/set 'path-utils:autosave-dir)) |
31 | 34 | (define elem |
32 | 35 | (bytes->path-element #"example.rkt")) |
33 | | - (define dir |
| 36 | + (define current-dir |
34 | 37 | (path->directory-path |
35 | 38 | (simplify-path (current-directory)))) |
36 | 39 | (define complete |
37 | | - (build-path dir elem)) |
| 40 | + ; don't put the complete path in (current-directory) directly |
| 41 | + ; so that we can test that the functions don't just always use (current-directory) |
| 42 | + (build-path current-dir "somewhere" elem)) |
| 43 | + (define dir-of-complete |
| 44 | + (path-base complete)) |
38 | 45 | ;; Tests with #f for directories |
39 | 46 | (current-backup-dir #f) |
40 | 47 | (current-autosave-dir #f) |
41 | | - (check-equal? (path-base (simplify-path(generate-autosave-name #f))) |
42 | | - (path->directory-path (find-system-path 'doc-dir))) |
43 | | - (check-equal? (path-base (simplify-path (generate-autosave-name elem))) |
44 | | - dir) |
45 | | - (check-equal? (path-base (generate-autosave-name complete)) |
46 | | - dir) |
47 | | - (check-equal? (path-base (simplify-path (generate-backup-name elem))) |
48 | | - dir) |
49 | | - (check-equal? (path-base (generate-backup-name complete)) |
50 | | - dir) |
| 48 | + (with-check-info (['path-utils:backup-dir (current-backup-dir)] |
| 49 | + ['path-utils:autosave-dir (current-autosave-dir)]) |
| 50 | + (with-check-info (['|generate- function| (string-info "generate-autosave-name")]) |
| 51 | + (check-equal? (path-base (simplify-path (generate-autosave-name #f))) |
| 52 | + (path->directory-path (find-system-path 'doc-dir)) |
| 53 | + "no orig name should use 'doc-dir") |
| 54 | + (check-equal? (path-base (simplify-path (generate-autosave-name elem))) |
| 55 | + current-dir |
| 56 | + "should resolve relative using current directory") |
| 57 | + (check-equal? (path-base (generate-autosave-name complete)) |
| 58 | + dir-of-complete |
| 59 | + "complete path should use that directory")) |
| 60 | + (with-check-info (['|generate- function| (string-info "generate-backup-name")]) |
| 61 | + (check-equal? (path-base (simplify-path (generate-backup-name elem))) |
| 62 | + current-dir |
| 63 | + "should resolve relative using current directory") |
| 64 | + (check-equal? (path-base (generate-backup-name complete)) |
| 65 | + dir-of-complete |
| 66 | + "complete path should use that directory"))) |
51 | 67 | ;; Tests with designated directories |
52 | | - (define backup-dir |
| 68 | + (define (make-temp-directory/normalize-path fmt-str) |
53 | 69 | (path->directory-path |
54 | 70 | (simplify-path |
55 | | - (make-temporary-file "rkt-backup-dir-~a" |
56 | | - 'directory)))) |
| 71 | + (make-temporary-file fmt-str 'directory)))) |
| 72 | + (define backup-dir |
| 73 | + (make-temp-directory/normalize-path "rkt-backup-dir-~a")) |
57 | 74 | (define autosave-dir |
58 | | - (path->directory-path |
59 | | - (simplify-path |
60 | | - (make-temporary-file "rkt-autosave-dir-~a" |
61 | | - 'directory)))) |
| 75 | + (make-temp-directory/normalize-path "rkt-autosave-dir-~a")) |
62 | 76 | (dynamic-wind |
63 | 77 | void |
64 | 78 | (λ () |
65 | 79 | (current-backup-dir backup-dir) |
66 | 80 | (current-autosave-dir autosave-dir) |
67 | | - (check-equal? (path-base (generate-autosave-name #f)) |
68 | | - autosave-dir) |
69 | | - (check-equal? (path-base (generate-autosave-name elem)) |
70 | | - autosave-dir) |
71 | | - (check-equal? (path-base (generate-autosave-name complete)) |
72 | | - autosave-dir) |
73 | | - (check-equal? (path-base (generate-backup-name elem)) |
74 | | - backup-dir) |
75 | | - (check-equal? (path-base (generate-backup-name complete)) |
76 | | - backup-dir) |
77 | 81 | (define clashing-name |
78 | | - (build-path dir "elsewhere" elem)) |
79 | | - (check-false |
80 | | - (equal? (simplify-path (generate-autosave-name complete)) |
81 | | - (simplify-path (generate-autosave-name clashing-name)))) |
82 | | - (check-false |
83 | | - (equal? (simplify-path (generate-backup-name complete)) |
84 | | - (simplify-path (generate-backup-name clashing-name))))) |
| 82 | + (build-path current-dir "elsewhere" elem)) |
| 83 | + (with-check-info (['path-utils:backup-dir (current-backup-dir)] |
| 84 | + ['path-utils:autosave-dir (current-autosave-dir)]) |
| 85 | + (with-check-info (['|generate- function| (string-info "generate-autosave-name")]) |
| 86 | + (check-equal? (path-base (generate-autosave-name #f)) |
| 87 | + autosave-dir |
| 88 | + "no orig name should use autosave dir") |
| 89 | + (check-equal? (path-base (generate-autosave-name elem)) |
| 90 | + autosave-dir |
| 91 | + "relative path should use autosave dir") |
| 92 | + (check-equal? (path-base (generate-autosave-name complete)) |
| 93 | + autosave-dir |
| 94 | + "complete path should use autosave dir") |
| 95 | + (check-false |
| 96 | + (equal? (simplify-path (generate-autosave-name complete)) |
| 97 | + (simplify-path (generate-autosave-name clashing-name))) |
| 98 | + "files with the same name in different directories should not collide") |
| 99 | + ; delete |
| 100 | + (delete-directory autosave-dir) |
| 101 | + (check-equal? (path-base (generate-autosave-name complete)) |
| 102 | + dir-of-complete |
| 103 | + "should fall back when autosave dir deleted")) |
| 104 | + (with-check-info (['|generate- function| (string-info "generate-backup-name")]) |
| 105 | + (check-equal? (path-base (generate-backup-name elem)) |
| 106 | + backup-dir |
| 107 | + "relative path should use backup dir") |
| 108 | + (check-equal? (path-base (generate-backup-name complete)) |
| 109 | + backup-dir |
| 110 | + "complete path should use backup dir") |
| 111 | + (check-false |
| 112 | + (equal? (simplify-path (generate-backup-name complete)) |
| 113 | + (simplify-path (generate-backup-name clashing-name))) |
| 114 | + "files with the same name in different directories should not collide") |
| 115 | + ; delete |
| 116 | + (delete-directory backup-dir) |
| 117 | + (check-equal? (path-base (generate-backup-name complete)) |
| 118 | + dir-of-complete |
| 119 | + "should fall back when backup dir deleted")))) |
85 | 120 | (λ () |
86 | | - (delete-directory backup-dir) |
87 | | - (delete-directory autosave-dir))))) |
| 121 | + (when (directory-exists? backup-dir) |
| 122 | + (delete-directory backup-dir)) |
| 123 | + (when (directory-exists? autosave-dir) |
| 124 | + (delete-directory autosave-dir)))))) |
88 | 125 |
|
89 | 126 |
|
90 | 127 |
|
|
0 commit comments