aboutsummaryrefslogtreecommitdiff
path: root/test/html/simplify.tests.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-03 19:19:21 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-03 19:20:00 +0100
commit0b56dfce42c3944cce47e284608e6806f4c839c3 (patch)
tree5f96f9c2908f1c5b00a7192e71d4c192abd7cf47 /test/html/simplify.tests.js
parent627c4a755395e313234bdb1914d168392006c483 (diff)
Move tests to test for easier Mocha usage
Diffstat (limited to 'test/html/simplify.tests.js')
-rw-r--r--test/html/simplify.tests.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/test/html/simplify.tests.js b/test/html/simplify.tests.js
new file mode 100644
index 0000000..ccc5610
--- /dev/null
+++ b/test/html/simplify.tests.js
@@ -0,0 +1,115 @@
+var assert = require("assert");
+
+var _ = require("underscore");
+
+var test = require("../testing").test;
+var html = require("../../lib/html");
+var htmlPaths = require("../../lib/html-paths");
+
+var nonFreshElement = html.nonFreshElement;
+var text = html.text;
+var pathToNodes = html.pathToNodes;
+
+describe("simplify", function() {
+ test("empty text nodes are removed", function() {
+ assert.deepEqual(
+ simplifyNode(text("")),
+ []
+ );
+ });
+
+ test("elements with no children are removed", function() {
+ assert.deepEqual(
+ simplifyNode(nonFreshElement("p", {}, [])),
+ []
+ );
+ });
+
+ test("elements only containing empty nodes are removed", function() {
+ assert.deepEqual(
+ simplifyNode(nonFreshElement("p", {}, [text("")])),
+ []
+ );
+ });
+
+ test("empty children of element are removed", function() {
+ assert.deepEqual(
+ simplifyNode(nonFreshElement("p", {}, [text("Hello"), text("")])),
+ [nonFreshElement("p", {}, [text("Hello")])]
+ );
+ });
+
+ test("successive fresh elements are not collapsed", function() {
+ var path = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: true})
+ ]);
+ var original = concat(
+ pathToNodes(path, [text("Hello")]),
+ pathToNodes(path, [text(" there")])
+ );
+
+ assert.deepEqual(
+ html.simplify(original),
+ original);
+ });
+
+ test("successive plain non-fresh elements are collapsed if they have the same tag name", function() {
+ var path = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: false})
+ ]);
+ assert.deepEqual(
+ html.simplify(concat(
+ pathToNodes(path, [text("Hello")]),
+ pathToNodes(path, [text(" there")])
+ )),
+ pathToNodes(path, [text("Hello"), text(" there")])
+ );
+ });
+
+ test("non-fresh can collapse into preceding fresh element", function() {
+ var freshPath = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: true})]);
+ var nonFreshPath = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: false})]);
+ assert.deepEqual(
+ html.simplify(concat(
+ pathToNodes(freshPath, [text("Hello")]),
+ pathToNodes(nonFreshPath, [text(" there")])
+ )),
+ pathToNodes(freshPath, [text("Hello"), text(" there")])
+ );
+ });
+
+ test("children of collapsed element can collapse with children of another collapsed element", function() {
+ assert.deepEqual(
+ html.simplify([
+ nonFreshElement("blockquote", {}, [nonFreshElement("p", {}, [text("Hello")])]),
+ nonFreshElement("blockquote", {}, [nonFreshElement("p", {}, [text("there")])])
+ ]),
+ [nonFreshElement("blockquote", {}, [nonFreshElement("p", {}, [text("Hello"), text("there")])])]
+ );
+ });
+
+ test("empty elements are removed before collapsing", function() {
+ var freshPath = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: true})]);
+ var nonFreshPath = htmlPaths.elements([
+ htmlPaths.element("p", {}, {fresh: false})]);
+ assert.deepEqual(
+ html.simplify(concat(
+ pathToNodes(nonFreshPath, [text("Hello")]),
+ pathToNodes(freshPath, []),
+ pathToNodes(nonFreshPath, [text(" there")])
+ )),
+ pathToNodes(nonFreshPath, [text("Hello"), text(" there")])
+ );
+ });
+});
+
+function simplifyNode(node) {
+ return html.simplify([node]);
+}
+
+function concat() {
+ return _.flatten(arguments, true);
+}