source: project/release/5/svn-client/trunk/tests/run.scm @ 36041

Last change on this file since 36041 was 36041, checked in by sjamaan, 20 months ago

Initial port of svn-client to CHICKEN 5

File size: 10.3 KB
Line 
1(import test svn-client (chicken file) (chicken pathname)
2        (chicken process-context) (chicken io) (chicken process)
3        (chicken sort))
4
5(when (directory-exists? "testrepo")
6  (delete-directory "testrepo" #t))
7
8(when (directory-exists? "testcheckout")
9  (delete-directory "testcheckout" #t))
10
11(when (directory-exists? "testcheckout2")
12  (delete-directory "testcheckout2" #t))
13
14(define repo-dir (make-pathname (current-directory) "testrepo"))
15(define repo-uri (string-append "file://" repo-dir))
16(define checkout-dir (make-pathname (current-directory) "testcheckout"))
17(define checkout-dir2 (make-pathname (current-directory) "testcheckout2"))
18
19(define user "testuser")
20(define user2 "different-testuser")
21(define pass "testpass")
22
23(define (svn-file f) (make-pathname checkout-dir f))
24(define (repo-file f) (string-append "file://" (make-pathname repo-dir f)))
25(define (write-svn-file file data)
26  (with-output-to-file (svn-file file) (lambda () (print data))))
27
28(test-begin "subversion client library")
29
30(test-assert "Create a testrepo" (svn-repos-create "testrepo"))
31(test "Make a checkout of revision 0"
32      0 (svn-checkout repo-uri checkout-dir svn-opt-revision-head #t user pass))
33
34(test "Make another checkout of revision 0, using a non-canonicalized uri"
35      0 (svn-checkout (string-append repo-uri "/") checkout-dir2 svn-opt-revision-head #t user pass))
36
37(test-group "initial state"
38 (let ((info (svn-client-info checkout-dir svn-opt-revision-head svn-opt-revision-head #t user pass)))
39   (test "At revision 0"
40         0 (svn-info-rev (cadar info)))
41   (test "Last changed revision of root also 0"
42         0 (svn-info-last-changed-rev (cadar info)))
43   (test "Root URI equals repo URI"
44         repo-uri (svn-info-repos-root-url (cadar info)))
45   (test "Directory item representing root's URI also equals repo URI"
46         repo-uri (svn-info-url (cadar info)))))
47
48(test-group "adding files"
49  (write-svn-file "foo" "Just added")
50  (test-assert "File can be added" (svn-add (svn-file "foo") #f user pass))
51  (test-assert "File can be committed"
52               (svn-commit (svn-file "foo") #t user pass "initial add"))
53  (let ((info (svn-client-info (svn-file "foo") svn-opt-revision-head svn-opt-revision-head #f user pass)))
54    (test "After adding a file, it is listed by info"
55          "foo" (caar info))
56    (test "File is at revision 1"
57          1 (svn-info-rev (cadar info)))
58    (test "File last changed at revision 1"
59          1 (svn-info-last-changed-rev (cadar info)))
60    (create-directory (svn-file "testdir"))
61    (test-assert "Directory can be added" (svn-add (svn-file "testdir") #f user pass))
62    (write-svn-file "testdir/bar" "Also just added")
63    (test-assert "Another file can be added" (svn-add (svn-file "testdir/bar") #f user pass))
64    (test-assert "Directory can be committed recursively"
65                 (svn-commit (svn-file "testdir") #t user2 pass "another initial add")))
66  (let ((info (svn-client-info (svn-file "testdir/bar")
67                               svn-opt-revision-head svn-opt-revision-head
68                               #f user pass)))
69   (test "After adding another file, it is listed by info"
70         "bar" (caar info))
71   (test "File is at revision 2"
72         2 (svn-info-rev (cadar info)))
73   (test "File last changed at revision 2"
74         2 (svn-info-last-changed-rev (cadar info))))
75  (let ((info (svn-client-info (svn-file "foo") svn-opt-revision-head
76                               svn-opt-revision-head #f user pass)))
77    (test "After adding another file, first file is also at revision 2"
78          2 (svn-info-rev (cadar info)))
79    (test "First file's last changed revision is still 1"
80          1 (svn-info-last-changed-rev (cadar info)))))
81
82(test-group "listing"
83  (test "Files and directories are all listed"
84        '("" "foo" "testdir" "testdir/bar")
85        (map svn-file-path
86             (svn-client-list checkout-dir svn-opt-revision-head #t user pass)))
87  (test "Files are marked as such"
88        '(#f "foo" #f "testdir/bar")
89        (map (lambda (f) (and (eq? (svn-file-kind f) 'file)
90                              (svn-file-path f)))
91             (svn-client-list checkout-dir svn-opt-revision-head #t user pass)))
92  (test "secondary checkout still empty"
93        '("")
94        (map svn-file-path
95             (svn-client-list checkout-dir2 svn-opt-revision-unspecified #t user pass)))
96  (svn-update checkout-dir2 svn-opt-revision-head #t user pass)
97  (test "Everything listed after update of secondary checkout"
98        '("" "foo" "testdir" "testdir/bar")
99        (map svn-file-path
100             (svn-client-list checkout-dir2 svn-opt-revision-unspecified #t user pass))))
101
102(test-group "modification"
103  (write-svn-file "testdir/bar" "Changed")
104  (let* ((diff-file (svn-diff (svn-file "testdir/bar")
105                              svn-opt-revision-head
106                              svn-opt-revision-working
107                              (svn-file "testdir")
108                              #t user pass))
109         (diff (with-input-from-file diff-file read-lines)))
110    (delete-file* diff-file)
111    (test "relative to testdir" "Index: bar" (car diff))
112    (test "Unified context diff file contents"
113          '("@@ -1 +1 @@"
114            "-Also just added"
115            "+Changed")
116          (cddddr diff)))
117  (test-assert "Reverting file" (svn-client-revert (list (svn-file "testdir/bar")) #f user pass))
118  (let* ((diff-file (svn-diff (svn-file "testdir/bar")
119                              svn-opt-revision-head
120                              svn-opt-revision-working
121                              (svn-file "testdir") #t user pass))
122         (diff (with-input-from-file diff-file read-lines)))
123    (delete-file* diff-file)
124    (test "Empty after revert"
125          '()
126          `,diff))
127  (write-svn-file "testdir/bar" "Changed")
128  (test-assert "Changed file can be committed"
129               (svn-commit (svn-file "testdir/bar") #t user pass "Modified for the first time"))
130
131  (let* ((info (svn-client-info (svn-file "testdir/bar")
132                                svn-opt-revision-head
133                                svn-opt-revision-head
134                                #f user pass))
135         (rev (svn-info-rev (cadar info)))
136         (diff-file (svn-diff (svn-file "testdir/bar")
137                              (make-svn-opt-revision-number (sub1 rev))
138                              (make-svn-opt-revision-number rev)
139                              (svn-file "") #t user pass))
140         (diff (with-input-from-file diff-file read-lines)))
141    (test "revision just committed is 3" 3 rev)
142    (delete-file* diff-file)
143    (test "relative to root" "Index: testdir/bar" (car diff))
144    (test "Unified context diff file contents of revision just committed"
145          '("@@ -1 +1 @@"
146            "-Also just added"
147            "+Changed")
148          (cddddr diff)))
149
150  ;; Again, but now using the repo root
151  (let* ((info (svn-client-info (repo-file "testdir/bar")
152                                svn-opt-revision-head
153                                svn-opt-revision-head
154                                #f user pass))
155         (rev (svn-info-rev (cadar info)))
156         (diff-file (svn-diff (svn-file "testdir/bar")
157                              (make-svn-opt-revision-number (sub1 rev))
158                              (make-svn-opt-revision-number rev)
159                              (svn-file "") #t user pass))
160         (diff (with-input-from-file diff-file read-lines)))
161    (test "revision just committed is 3" 3 rev)
162    (delete-file* diff-file)
163    (test "relative to root" "Index: testdir/bar" (car diff))
164    (test "Unified context diff file contents of revision just committed"
165          '("@@ -1 +1 @@"
166            "-Also just added"
167            "+Changed")
168          (cddddr diff))))
169
170(test-group "basic log"
171  (let ((log-info (svn-client-log checkout-dir (make-svn-opt-revision-number 0)
172                                  svn-opt-revision-head 0 #t #f user pass)))
173    (test "Last revision first"
174          3 (svn-log-revision (car log-info)))
175    (test "Log-message of r3 ok"
176          "Modified for the first time" (svn-log-message (car log-info)))
177    (test "Author of r3 is normal user"
178          user (svn-log-author (car log-info)))
179    (test "Files of r3 ok"
180          '("/testdir/bar")
181          (map svn-log-change-path (svn-log-changes (car log-info))))
182    (test "Actions of r3 OK"
183          '(modified)
184          (map svn-log-change-action (svn-log-changes (car log-info))))
185    (test "Log-message of r2 ok"
186          "another initial add" (svn-log-message (cadr log-info)))
187    (test "Files of r2 ok"
188          '("/testdir" "/testdir/bar")
189          (sort (map svn-log-change-path (svn-log-changes (cadr log-info))) string<=?))
190    (test "Author of r2 is alternative user"
191          user (svn-log-author (car log-info)))
192    (test "Actions of r2 OK"
193          '(added added)
194          (map svn-log-change-action (svn-log-changes (cadr log-info))))
195    (test "Log-message of r1 ok"
196          "initial add"
197          (svn-log-message (caddr log-info)))
198    (test "Files of r1 ok"
199          '("/foo")
200          (map svn-log-change-path (svn-log-changes (caddr log-info))))
201    (test "Actions of r1 OK"
202          '(added)
203          (map svn-log-change-action (svn-log-changes (caddr log-info))))
204    (test "No log-message for r0"
205          #f
206          (svn-log-message (cadddr log-info)))
207    (test "No changes for r0"
208          '()
209          (svn-log-changes (cadddr log-info)))))
210
211(test-group "catenation"
212  (let* ((f (svn-client-cat (svn-file "testdir/bar") svn-opt-revision-unspecified user pass))
213         (contents (with-input-from-file f read-string)))
214    (delete-file* f)
215    (test "Working dir" "Changed\n" contents))
216  (let* ((f (svn-client-cat (svn-file "testdir/bar") (make-svn-opt-revision-number 2) user pass))
217         (contents (with-input-from-file f read-string)))
218    (delete-file* f)
219    (test "Historical revision" "Also just added\n" contents)))
220
221(test-group "properties"
222  (svn-propset-local "testing" "123" (svn-file "testdir/bar") #f #f)
223  (test "After setting property, it can be retrieved"
224        `((,(svn-file "testdir/bar") "123"))
225        (svn-propget "testing" (svn-file "testdir/bar")
226                     svn-opt-revision-unspecified #t user pass)))
227
228(test-end)
229
230(when (file-exists? "testrepo")
231  (system "rm -rf testrepo"))
232
233(when (file-exists? "testcheckout")
234  (system "rm -rf testcheckout"))
235
236(when (file-exists? "testcheckout2")
237  (system "rm -rf testcheckout2"))
238
239(unless (zero? (test-failure-count)) (exit 1))
Note: See TracBrowser for help on using the repository browser.