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.
This commit is contained in:
parent
03d2413300
commit
cf787bc872
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue