summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)