(in-package :sax-tests)
(defun first-start-element-event (string)
(let ((events (xml:parse-string string (make-instance 'event-collecting-handler))))
(find :start-element events :key #'car)))
;;; Attribute handling
(deftest no-default-namespace-for-attributes
(let* ((evt (first-start-element-event ""))
(attr (car (fifth evt))))
(values
(attribute-namespace-uri attr)
(attribute-local-name attr)))
nil nil)
(deftest attribute-uniqueness-1
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest attribute-uniqueness-2
(handler-case
(xml:parse-string "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t))
t)
(deftest attribute-uniqueness-3
(let ((sax:*namespace-processing* nil))
(handler-case
(xml:parse-string "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t)))
t)
;;; Namespace undeclaring
(deftest undeclare-default-namespace-1
(let* ((evts (xml:parse-string ""
(make-instance 'event-collecting-handler)))
(start-elt-events (remove :start-element evts :test (complement #'eql) :key #'car))
(evt1 (first start-elt-events))
(evt2 (second start-elt-events )))
(values
(rod= #"http://example.com" (second evt1))
(second evt2)
(third evt2)))
t nil nil)
(deftest undeclare-other-namespace
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
;;; Require names otherwise totally out of scope of the xmlns rec to be NcNames for no reason
(deftest pi-names-are-ncnames-when-namespace-processing-1
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest pi-names-are-ncnames-when-namespace-processing-2
(let ((sax:*namespace-processing* nil))
(handler-case
(xml:parse-string "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t)))
t)
(deftest entity-names-are-ncnames-when-namespace-processing-1
(handler-case
(xml:parse-string " ]>&y:z;")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest entity-names-are-ncnames-when-namespace-processing-2
(handler-case
(xml:parse-string " ]>")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest entity-names-are-ncnames-when-namespace-processing-3
(let ((sax:*namespace-processing* nil))
(handler-case
(xml:parse-string " ]>&y:z;")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t)))
t)
(deftest entity-names-are-ncnames-when-namespace-processing-4
(let ((sax:*namespace-processing* nil))
(handler-case
(xml:parse-string " ]>")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t)))
t)
;;; Inclusion of xmlns attributes
(deftest xmlns-attr-include-1
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(length attrs))
1)
(deftest xmlns-attr-discard-1
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(length attrs))
0)
;;; Namespace of xmlns attributes
(deftest xmlns-attr-ns-uri-1
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-namespace-uri (car attrs)))
nil)
(deftest xmlns-attr-ns-uri-2
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-namespace-uri (car attrs)))
nil)
(deftest xmlns-attr-ns-uri-3
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-namespace-uri (car attrs)))
nil)
(deftest xmlns-attr-ns-uri-4
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"http://www.w3.org/2000/xmlns/" (attribute-namespace-uri (car attrs))))
t)
(deftest xmlns-attr-ns-local-name-1
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-local-name (car attrs)))
nil)
(deftest xmlns-attr-ns-local-name-2
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-local-name (car attrs)))
nil)
(deftest xmlns-attr-ns-local-name-3
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(attribute-local-name (car attrs)))
nil)
(deftest xmlns-attr-ns-local-name-4
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"foo" (attribute-local-name (car attrs))))
t)
(deftest xmlns-attr-qname-1
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"xmlns" (attribute-qname (car attrs))))
t)
(deftest xmlns-attr-qname-2
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* nil)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"xmlns:foo" (attribute-qname (car attrs))))
t)
(deftest xmlns-attr-qname-4
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"xmlns" (attribute-qname (car attrs))))
t)
(deftest xmlns-attr-qname-4
(let* ((sax:*namespace-processing* t)
(sax:*include-xmlns-attributes* t)
(sax:*use-xmlns-namespace* t)
(evt (first-start-element-event ""))
(attrs (fifth evt)))
(rod= #"xmlns:foo" (attribute-qname (car attrs))))
t)
;;; Predefined Namespaces
(deftest redefine-xml-namespace-1
(handler-case
(xml:parse-string "")
(error () nil)
(:no-error (&rest junk)
(declare (ignore junk))
t))
t)
(deftest redefine-xml-namespace-2
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xml-namespace-3
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xml-namespace-4
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xmlns-namespace-1
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xmlns-namespace-2
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xmlns-namespace-3
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)
(deftest redefine-xmlns-namespace-4
(handler-case
(xml:parse-string "")
(error () t)
(:no-error (&rest junk)
(declare (ignore junk))
nil))
t)