source: project/release/4/svn-client/tags/0.22/tests/run.scm @ 33977

Last change on this file since 33977 was 33977, checked in by sjamaan, 18 months ago

Tag svn-client 0.22

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