aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-05-10 16:27:45 +0200
committerLudovic Courtès <ludo@gnu.org>2017-05-10 16:28:56 +0200
commitcf787bc8723fec137d0e8d366d517d8b929547c6 (patch)
treefd0a451375f6a7ab6d9c5be9f77c25a504e349cc
parent03d241330082833a54ab9a285e7e36561c9c194c (diff)
downloadcuirass-cf787bc8723fec137d0e8d366d517d8b929547c6.tar
cuirass-cf787bc8723fec137d0e8d366d517d8b929547c6.tar.gz
tests: Compare JSON objects instead of JSON strings.
This fixes a test failure with Guile 2.2. * tests/http.scm (hash-table-keys, hash-table=?): New procedures. ("spec->json-string"): Use it to compare the JSON objects.
-rw-r--r--tests/http.scm61
1 files changed, 46 insertions, 15 deletions
diff --git a/tests/http.scm b/tests/http.scm
index 4d278d7..4c5214d 100644
--- a/tests/http.scm
+++ b/tests/http.scm
@@ -1,5 +1,6 @@
;;; http.scm -- tests for (cuirass http) module
;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of Cuirass.
;;;
@@ -17,24 +18,54 @@
;;; along with Cuirass. If not, see <http://www.gnu.org/licenses/>.
(use-modules (cuirass http)
+ (json)
+ (srfi srfi-1)
(srfi srfi-64))
+(define (hash-table-keys table)
+ (hash-fold (lambda (key value rest)
+ (cons key rest))
+ '()
+ table))
+
+(define (hash-table=? t1 t2)
+ (and (lset= equal?
+ (hash-table-keys t1)
+ (hash-table-keys t2))
+ (hash-fold (lambda (key value result)
+ (and result
+ (let ((equal? (if (hash-table? value)
+ hash-table=?
+ equal?)))
+ (equal? value
+ (hash-ref t2 key)))))
+ #t
+ t1)))
+
(test-begin "http")
-(test-equal "spec->json-string"
- (string-append "{"
- "\"boolean\" : false,"
- "\"string\" : \"guix\","
- "\"alist\" : {\"subset\" : \"hello\"},"
- "\"list\" : [1, \"2\", \"three\"],"
- "\"symbol\" : \"hydra-jobs\","
- "\"number\" : 1"
- "}")
- (spec->json-string '((#:number . 1)
- (string . "guix")
- ("symbol" . hydra-jobs)
- (#:alist (subset . "hello"))
- (list 1 "2" #:three)
- ("boolean" . #f))))
+(test-assert "spec->json-string"
+ ;; Note: We cannot compare the strings directly because field ordering
+ ;; depends on the hash algorithm used in Guile's hash tables, and that
+ ;; algorithm changed in Guile 2.2.
+ (hash-table=?
+ (call-with-input-string
+ (string-append "{"
+ "\"boolean\" : false,"
+ "\"string\" : \"guix\","
+ "\"alist\" : {\"subset\" : \"hello\"},"
+ "\"list\" : [1, \"2\", \"three\"],"
+ "\"symbol\" : \"hydra-jobs\","
+ "\"number\" : 1"
+ "}")
+ json->scm)
+ (call-with-input-string
+ (spec->json-string '((#:number . 1)
+ (string . "guix")
+ ("symbol" . hydra-jobs)
+ (#:alist (subset . "hello"))
+ (list 1 "2" #:three)
+ ("boolean" . #f)))
+ json->scm)))
(test-end)