diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-03-23 16:44:28 +0000 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-03-31 13:01:57 +0100 |
commit | 637c8b2ebe4df64bf2733efb3ca15a2033254f69 (patch) | |
tree | ee01c3a83a2e5e1bcea2c7f7d6631507308c6af7 | |
parent | c75d42181919d270da1c2ef2b9139781dbed1517 (diff) |
stanza: add wocky_stanza_copy
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r-- | tests/wocky-stanza-test.c | 34 | ||||
-rw-r--r-- | wocky/wocky-stanza.c | 14 | ||||
-rw-r--r-- | wocky/wocky-stanza.h | 2 |
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, |