summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2011-03-23 16:44:28 +0000
committerJonny Lamb <jonny.lamb@collabora.co.uk>2011-03-31 13:01:57 +0100
commit637c8b2ebe4df64bf2733efb3ca15a2033254f69 (patch)
treeee01c3a83a2e5e1bcea2c7f7d6631507308c6af7
parentc75d42181919d270da1c2ef2b9139781dbed1517 (diff)
stanza: add wocky_stanza_copy
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r--tests/wocky-stanza-test.c34
-rw-r--r--wocky/wocky-stanza.c14
-rw-r--r--wocky/wocky-stanza.h2
3 files changed, 50 insertions, 0 deletions
diff --git a/tests/wocky-stanza-test.c b/tests/wocky-stanza-test.c
index 741eb40..cf60d17 100644
--- a/tests/wocky-stanza-test.c
+++ b/tests/wocky-stanza-test.c
@@ -12,6 +12,39 @@
#include "wocky-test-helper.h"
static void
+test_copy (void)
+{
+ WockyStanza *iq, *copy, *expected;
+
+ iq = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_GET, "juliet@example.com", "romeo@example.net",
+ '@', "id", "one",
+ '(', "query",
+ ':', "http://jabber.org/protocol/disco#items",
+ ')',
+ NULL);
+
+ /* just to make sure */
+ expected = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_GET, "juliet@example.com", "romeo@example.net",
+ '@', "id", "one",
+ '(', "query",
+ ':', "http://jabber.org/protocol/disco#items",
+ ')',
+ NULL);
+
+ copy = wocky_stanza_copy (iq);
+ g_assert (copy != NULL);
+
+ test_assert_stanzas_equal (iq, copy);
+ test_assert_stanzas_equal (expected, copy);
+
+ g_object_unref (iq);
+ g_object_unref (copy);
+ g_object_unref (expected);
+}
+
+static void
test_build_iq_result_simple_ack (void)
{
WockyStanza *iq, *reply, *expected;
@@ -729,6 +762,7 @@ main (int argc, char **argv)
int result;
test_init (argc, argv);
+ g_test_add_func ("/xmpp-stanza/copy", test_copy);
g_test_add_func ("/xmpp-stanza/iq-result/build-simple-ack",
test_build_iq_result_simple_ack);
g_test_add_func ("/xmpp-stanza/iq-result/build-complex-reply",
diff --git a/wocky/wocky-stanza.c b/wocky/wocky-stanza.c
index ac0ca08..d84e050 100644
--- a/wocky/wocky-stanza.c
+++ b/wocky/wocky-stanza.c
@@ -28,6 +28,8 @@
#include "wocky-namespaces.h"
#include "wocky-debug.h"
+#include "wocky-node-private.h"
+
G_DEFINE_TYPE(WockyStanza, wocky_stanza, WOCKY_TYPE_NODE_TREE)
/* private structure */
@@ -193,6 +195,18 @@ wocky_stanza_new (const gchar *name,
return result;
}
+WockyStanza *
+wocky_stanza_copy (WockyStanza *old)
+{
+ WockyNode *top;
+
+ top = _wocky_node_copy (wocky_stanza_get_top_node (old));
+
+ return g_object_new (WOCKY_TYPE_STANZA,
+ "top-node", top,
+ NULL);
+}
+
static const gchar *
get_type_name (WockyStanzaType type)
{
diff --git a/wocky/wocky-stanza.h b/wocky/wocky-stanza.h
index b6ec8eb..c637cb1 100644
--- a/wocky/wocky-stanza.h
+++ b/wocky/wocky-stanza.h
@@ -153,6 +153,8 @@ typedef enum
WockyStanza * wocky_stanza_new (const gchar *name, const gchar *ns);
+WockyStanza * wocky_stanza_copy (WockyStanza *old);
+
WockyNode *wocky_stanza_get_top_node (WockyStanza *self);
WockyStanza * wocky_stanza_build (WockyStanzaType type,