Changeset

9216:ba38a947020e

util.stanza tests: Add tests for maptags() method
author Matthew Wild <mwild1@gmail.com>
date Sun, 19 Aug 2018 21:29:52 +0100
parents 9215:b087b5047f86
children 9217:7df29c5fbb9b
files spec/util_stanza_spec.lua
diffstat 1 files changed, 71 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/spec/util_stanza_spec.lua	Sun Aug 19 14:45:19 2018 +0100
+++ b/spec/util_stanza_spec.lua	Sun Aug 19 21:29:52 2018 +0100
@@ -257,4 +257,75 @@
 		end);
 	end);
 
+	describe("#maptags", function ()
+		it("should work", function ()
+			local s = st.stanza("test")
+				:tag("one"):up()
+				:tag("two"):up()
+				:tag("one"):up()
+				:tag("three"):up();
+
+			local function one_filter(tag)
+				if tag.name == "one" then
+					return nil;
+				end
+				return tag;
+			end
+			assert.equal(4, #s.tags);
+			s:maptags(one_filter);
+			assert.equal(2, #s.tags);
+		end);
+
+		it("should work with multiple consecutive text nodes", function ()
+			local s = st.deserialize({
+				"\n";
+				{
+					"away";
+					name = "show";
+					attr = {};
+				};
+				"\n";
+				{
+					"I am away";
+					name = "status";
+					attr = {};
+				};
+				"\n";
+				{
+					"0";
+					name = "priority";
+					attr = {};
+				};
+				"\n";
+				{
+					name = "c";
+					attr = {
+						xmlns = "http://jabber.org/protocol/caps";
+						node = "http://psi-im.org";
+						hash = "sha-1";
+					};
+				};
+				"\n";
+				"\n";
+				name = "presence";
+				attr = {
+					to = "user@example.com/jflsjfld";
+					from = "room@chat.example.org/nick";
+				};
+			});
+
+			assert.equal(4, #s.tags);
+
+			s:maptags(function (tag) return tag; end);
+			assert.equal(4, #s.tags);
+
+			s:maptags(function (tag)
+				if tag.name == "c" then
+					return nil;
+				end
+				return tag;
+			end);
+			assert.equal(3, #s.tags);
+		end);
+	end);
 end);