diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-05-10 16:27:45 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-05-10 16:28:56 +0200 |
commit | cf787bc8723fec137d0e8d366d517d8b929547c6 (patch) | |
tree | fd0a451375f6a7ab6d9c5be9f77c25a504e349cc | |
parent | 03d241330082833a54ab9a285e7e36561c9c194c (diff) | |
download | cuirass-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.scm | 61 |
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) |