Extract jabber-xml-parse-next-stanza, and test it

Move the functionality of reading the next complete stanza into a
separate function, and add some test cases for it.  I'd like to get rid
of jabber-xml-skip-tag-forward at some point, so a good first step
towards that should be moving calls to it into a function that's easy to
test in isolation.
pete
Magnus Henoch 8 years ago
parent d4d7782741
commit 98dc8e429b

@ -899,10 +899,7 @@ DATA is any sexp."
(while (search-forward-regexp " \\w+=''" nil t)
(replace-match "")))
(setq xml-data (and (catch 'unfinished
(jabber-xml-skip-tag-forward)
(> (point) (point-min)))
(xml-parse-region (point-min) (point))))
(setq xml-data (jabber-xml-parse-next-stanza))
while xml-data
do

@ -133,6 +133,17 @@ enough for us."
(t
(throw 'unfinished nil))))
(defun jabber-xml-parse-next-stanza ()
"Parse the first XML stanza in the current buffer.
Parse and return the first complete XML element in the buffer,
leaving point at the end of it. If there is no complete XML
element, return `nil'."
(and (catch 'unfinished
(goto-char (point-min))
(jabber-xml-skip-tag-forward)
(> (point) (point-min)))
(xml-parse-region (point-min) (point))))
(defsubst jabber-xml-node-name (node)
"Return the tag associated with NODE.
The tag is a lower-case symbol."

@ -2,5 +2,5 @@
# check" or "make distcheck" to work with earlier versions.
LOG_COMPILER = env top_builddir=$(top_builddir) $(EMACS) -batch -L $(top_builddir) -L $(top_srcdir) -L $(srcdir) -l
TESTS = load-all.el skip-tag-forward.el history.el jabberd.el nick-change-fail.el
TESTS += caps-hash.el
TESTS += caps-hash.el parse-next-stanza.el
dist_noinst_DATA = $(TESTS)

@ -0,0 +1,18 @@
;; Tests for jabber-xml-parse-next-stanza
(require 'jabber-xml)
(defun parse-it (text)
(with-temp-buffer
(insert text)
(jabber-xml-parse-next-stanza)))
(unless (equal
(parse-it "<presence from='foo@example.com/resource' type='unavailable' to='bar@example.com'/>")
'((presence ((from . "foo@example.com/resource") (type . "unavailable") (to . "bar@example.com")))))
(error "Testcase 1 failed"))
(unless (equal
(parse-it "<presence from='foo@example.com/resource' ")
nil)
(error "Testcase 2 failed"))
Loading…
Cancel
Save