90e18416 |
(in-package :cl-user)
(defpackage cl-yaml-test.emitter2
(:use :cl :fiveam)
(:export :emitter2)
(:documentation "Emitter tests - libyaml-based emitter."))
(in-package :cl-yaml-test.emitter2)
(defmacro define-test-cases ((name) &rest pairs)
`(test ,name
,@(loop for (form string) in pairs collecting
`(is (equal (yaml.emitter:with-emitter-to-string (emitter)
(yaml.emitter:emit-stream (emitter)
(yaml.emitter:emit-document (emitter :implicit t)
(yaml.emitter:emit-scalar emitter ,form))))
,(format nil "~a~%...~%" string)))))) ;; Document end marker
;; is libyaml behavior
(defun test-emit-sequence (sequence style)
(yaml.emitter:with-emitter-to-string (emitter)
(yaml.emitter:emit-stream (emitter)
(yaml.emitter:emit-document (emitter :implicit t)
(yaml.emitter:emit-sequence (emitter :style style)
(mapcar (lambda (element) (yaml.emitter:emit-scalar emitter element))
sequence))))))
(defun test-emit-mapping (mapping style)
(yaml.emitter:with-emitter-to-string (emitter)
(yaml.emitter:emit-stream (emitter)
(yaml.emitter:emit-document (emitter :implicit t)
(yaml.emitter:emit-mapping (emitter :style style)
(mapcar (lambda (pair)
(yaml.emitter:emit-scalar emitter (car pair))
(yaml.emitter:emit-scalar emitter (cdr pair)))
mapping))))))
(def-suite emitter2
:description "YAML libyaml-based emitter tests.")
(in-suite emitter2)
(define-test-cases (boolean)
(t "true")
(nil "false"))
(define-test-cases (integers)
(1 "1")
(123 "123")
(+123 "123")
(-123 "-123"))
(define-test-cases (floats)
(1.23 "1.23")
(6.62607e-34 "6.62607e-34"))
(test flow-sequence
(is (equal (test-emit-sequence '(1 "a" 3.14f0 3.14d0) :flow-sequence-style)
"[1, a, 3.14, 3.14]
")))
(test block-sequence
(is (equal (test-emit-sequence '(1 "a" 3.14f0 3.14d0) :block-sequence-style)
"- 1
- a
- 3.14
- 3.14
")))
(test flow-mapping
(is (equal (test-emit-mapping '(("integer" . 1) ("string" . "test") ("bool" . nil))
:flow-mapping-style)
"{integer: 1, string: test, bool: false}
")))
(test block-mapping
(is (equal (test-emit-mapping '(("integer" . 1) ("string" . "test") ("bool" . nil))
:block-mapping-style)
"integer: 1
string: test
bool: false
")))
|