source: project/release/4/svn-client/trunk/tests/run.scm @ 33980

Last change on this file since 33980 was 33980, checked in by sjamaan, 3 years ago

svn-client: for diff, use revision pegged at working copy head so history can be traced correctly.

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