>From c74c0fac972ce235954efc56ff540021f9dd0615 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simen=20Heggest=C3=B8yl?=
Date: Sun, 14 Aug 2016 16:03:50 +0200
Subject: [PATCH] Add tests for dom.el
* test/lisp/dom-tests.el: New file with tests for dom.el.
---
test/lisp/dom-tests.el | 195 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 195 insertions(+)
create mode 100644 test/lisp/dom-tests.el
diff --git a/test/lisp/dom-tests.el b/test/lisp/dom-tests.el
new file mode 100644
index 0000000..e3e14b2
--- /dev/null
+++ b/test/lisp/dom-tests.el
@@ -0,0 +1,195 @@
+;;; dom-tests.el --- Tests for dom.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl
+;; Keywords:
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see .
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'dom)
+(require 'ert)
+(require 'subr-x)
+
+(defun dom-test-tree ()
+ "Return a DOM tree for testing."
+ (dom-node "html" nil
+ (dom-node "head" nil
+ (dom-node "title" nil
+ "Test"))
+ (dom-node "body" nil
+ (dom-node "div" '((class . "foo")
+ (style . "color: red;"))
+ (dom-node "p" '((id . "bar"))
+ "foo"))
+ (dom-node "div" '((title . "2nd div"))
+ "bar"))))
+
+(ert-deftest test-dom-tag ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-tag dom) "html"))
+ (should (equal (dom-tag (car (dom-children dom))) "head"))))
+
+(ert-deftest test-dom-attributes ()
+ (let ((dom (dom-test-tree)))
+ (should (null (dom-attributes dom)))
+ (should (equal (dom-attributes (dom-by-class dom "foo"))
+ '((class . "foo") (style . "color: red;"))))))
+
+(ert-deftest test-dom-children ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("head" "body")))
+ (should (equal (dom-tag (dom-children (dom-children dom)))
+ "title"))))
+
+(ert-deftest test-dom-non-text-children ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-children dom) (dom-non-text-children dom)))
+ (should (null (dom-non-text-children
+ (dom-children (dom-children dom)))))))
+
+(ert-deftest test-dom-set-attributes ()
+ (let ((dom (dom-test-tree))
+ (attributes '((xmlns "http://www.w3.org/1999/xhtml"))))
+ (should (null (dom-attributes dom)))
+ (dom-set-attributes dom attributes)
+ (should (equal (dom-attributes dom) attributes))))
+
+(ert-deftest test-dom-set-attribute ()
+ (let ((dom (dom-test-tree))
+ (attr 'xmlns)
+ (value "http://www.w3.org/1999/xhtml"))
+ (should (null (dom-attributes dom)))
+ (dom-set-attribute dom attr value)
+ (should (equal (dom-attr dom attr) value))))
+
+(ert-deftest test-dom-attr ()
+ (let ((dom (dom-test-tree)))
+ (should (null (dom-attr dom 'id)))
+ (should (equal (dom-attr (dom-by-id dom "bar") 'id) "bar"))))
+
+(ert-deftest test-dom-text ()
+ (let ((dom (dom-test-tree)))
+ (should (string-empty-p (dom-text dom)))
+ (should (equal (dom-text (dom-by-tag dom "title")) "Test"))))
+
+(ert-deftest test-dom-texts ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-texts dom) "Test foo bar"))
+ (should (equal (dom-texts dom ", ") "Test, foo, bar"))))
+
+(ert-deftest test-dom-child-by-tag ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-child-by-tag dom "head")
+ (car (dom-children dom))))
+ (should (not (dom-child-by-tag dom "title")))))
+
+(ert-deftest test-dom-by-tag ()
+ (let ((dom (dom-test-tree)))
+ (should (= (length (dom-by-tag dom "div")) 2))
+ (should (null (dom-by-tag dom "article")))))
+
+(ert-deftest test-dom-strings ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-strings dom) '("Test" "foo" "bar")))
+ (should (equal (dom-strings (dom-children dom)) '("Test")))))
+
+(ert-deftest test-dom-by-class ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-tag (dom-by-class dom "foo")) "div"))
+ (should (null (dom-by-class dom "bar")))))
+
+(ert-deftest test-dom-by-style ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-tag (dom-by-style dom "color")) "div"))
+ (should (null (dom-by-style dom "width")))))
+
+(ert-deftest test-dom-by-id ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-tag (dom-by-id dom "bar")) "p"))
+ (should (null (dom-by-id dom "foo")))))
+
+(ert-deftest test-dom-elements ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (dom-elements dom 'class "foo")
+ (dom-by-class dom "foo")))
+ (should (equal (dom-attr (dom-elements dom 'title "2nd") 'title)
+ "2nd div"))))
+
+(ert-deftest test-dom-remove-node ()
+ (let ((dom (dom-test-tree)))
+ (should (not (dom-remove-node dom dom)))
+ (should (= (length (dom-children dom)) 2))
+ (dom-remove-node dom (car (dom-children dom)))
+ (should (= (length (dom-children dom)) 1))
+ (dom-remove-node dom (car (dom-children dom)))
+ (should (null (dom-children dom)))))
+
+(ert-deftest test-dom-parent ()
+ (let ((dom (dom-test-tree)))
+ (should (not (dom-parent dom dom)))
+ (should (equal (dom-parent dom (car (dom-children dom))) dom))))
+
+(ert-deftest test-dom-previous-sibling ()
+ (let ((dom (dom-test-tree)))
+ (should (not (dom-previous-sibling dom dom)))
+ (let ((children (dom-children dom)))
+ (should (equal (dom-previous-sibling dom (cadr children))
+ (car children))))))
+
+(ert-deftest test-dom-append-child ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("head" "body")))
+ (dom-append-child dom (dom-node "feet"))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("head" "body" "feet")))))
+
+(ert-deftest test-dom-add-child-before ()
+ (let ((dom (dom-test-tree)))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("head" "body")))
+ (dom-add-child-before dom (dom-node "neck")
+ (dom-child-by-tag dom "body"))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("head" "neck" "body")))
+ (dom-add-child-before dom (dom-node "hat"))
+ (should (equal (mapcar #'dom-tag (dom-children dom))
+ '("hat" "head" "neck" "body")))))
+
+(ert-deftest test-dom-ensure-node ()
+ (let ((node (dom-node "foo")))
+ (should (equal (dom-ensure-node '("foo")) node))
+ (should (equal (dom-ensure-node '(("foo"))) node))
+ (should (equal (dom-ensure-node '("foo" nil)) node))
+ (should (equal (dom-ensure-node '(("foo") nil)) node))))
+
+(ert-deftest test-dom-pp ()
+ (let ((node (dom-node "foo" nil "")))
+ (with-temp-buffer
+ (dom-pp node)
+ (should (equal (buffer-string) "(\"foo\" nil\n \"\")")))
+ (with-temp-buffer
+ (dom-pp node t)
+ (should (equal (buffer-string) "(\"foo\" nil)")))))
+
+(provide 'dom-tests)
+;;; dom-tests.el ends here
--
2.9.3