* Purple is the legal property of its developers, whose names are too * numerous to list here. Please refer to the COPYRIGHT file distributed * with this source distribution * This program 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 2 of the License, or (at * your option) any later version. * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA #include <queuedoutputstream.h> static const gsize test_bytes_data_len = 5; static const guint8 test_bytes_data[] = "12345"; static const gsize test_bytes_data_len2 = 4; static const guint8 test_bytes_data2[] = "6789"; static const gsize test_bytes_data_len3 = 12; static const guint8 test_bytes_data3[] = "101112131415"; test_queued_output_stream_new(void) { PurpleQueuedOutputStream *queued; output = g_memory_output_stream_new_resizable(); g_assert_nonnull(output); queued = purple_queued_output_stream_new(output); g_assert_true(PURPLE_IS_QUEUED_OUTPUT_STREAM(queued)); g_assert_true(g_output_stream_close( G_OUTPUT_STREAM(queued), NULL, &err)); test_queued_output_stream_push_bytes_async_cb(GObject *source, GAsyncResult *res, gpointer user_data) PurpleQueuedOutputStream *queued = PURPLE_QUEUED_OUTPUT_STREAM(source); gboolean *done = user_data; g_assert_true(purple_queued_output_stream_push_bytes_finish(queued, test_queued_output_stream_push_bytes_async(void) { GMemoryOutputStream *output; PurpleQueuedOutputStream *queued; output = G_MEMORY_OUTPUT_STREAM(g_memory_output_stream_new_resizable()); g_assert_nonnull(output); queued = purple_queued_output_stream_new(G_OUTPUT_STREAM(output)); g_assert_true(PURPLE_IS_QUEUED_OUTPUT_STREAM(queued)); bytes = g_bytes_new_static(test_bytes_data, test_bytes_data_len); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_push_bytes_async_cb, &done); g_main_context_iteration(NULL, TRUE); g_assert_cmpmem(g_memory_output_stream_get_data(output), g_memory_output_stream_get_data_size(output), test_bytes_data, test_bytes_data_len); g_assert_true(g_output_stream_close( G_OUTPUT_STREAM(queued), NULL, &err)); test_queued_output_stream_push_bytes_async_multiple_cb(GObject *source, GAsyncResult *res, gpointer user_data) PurpleQueuedOutputStream *queued = PURPLE_QUEUED_OUTPUT_STREAM(source); g_assert_true(purple_queued_output_stream_push_bytes_finish(queued, test_queued_output_stream_push_bytes_async_multiple(void) { GMemoryOutputStream *output; PurpleQueuedOutputStream *queued; gchar *all_test_bytes_data; output = G_MEMORY_OUTPUT_STREAM(g_memory_output_stream_new_resizable()); g_assert_nonnull(output); queued = purple_queued_output_stream_new(G_OUTPUT_STREAM(output)); g_assert_true(PURPLE_IS_QUEUED_OUTPUT_STREAM(queued)); bytes = g_bytes_new_static(test_bytes_data, test_bytes_data_len); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_push_bytes_async_multiple_cb, bytes = g_bytes_new_static(test_bytes_data2, test_bytes_data_len2); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_push_bytes_async_multiple_cb, bytes = g_bytes_new_static(test_bytes_data3, test_bytes_data_len3); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_push_bytes_async_multiple_cb, g_main_context_iteration(NULL, TRUE); g_assert_cmpint(done, ==, 0); all_test_bytes_data = g_strconcat((const gchar *)test_bytes_data, test_bytes_data2, test_bytes_data3, NULL); g_assert_cmpmem(g_memory_output_stream_get_data(output), g_memory_output_stream_get_data_size(output), all_test_bytes_data, strlen(all_test_bytes_data)); g_free(all_test_bytes_data); g_assert_true(g_output_stream_close( G_OUTPUT_STREAM(queued), NULL, &err)); test_queued_output_stream_push_bytes_async_error_cb(GObject *source, GAsyncResult *res, gpointer user_data) PurpleQueuedOutputStream *queued = PURPLE_QUEUED_OUTPUT_STREAM(source); g_assert_false(purple_queued_output_stream_push_bytes_finish(queued, g_assert_error(err, G_IO_ERROR, G_IO_ERROR_CANCELLED); test_queued_output_stream_push_bytes_async_error(void) { GMemoryOutputStream *output; PurpleQueuedOutputStream *queued; GCancellable *cancellable; output = G_MEMORY_OUTPUT_STREAM(g_memory_output_stream_new_resizable()); g_assert_nonnull(output); queued = purple_queued_output_stream_new(G_OUTPUT_STREAM(output)); g_assert_true(PURPLE_IS_QUEUED_OUTPUT_STREAM(queued)); cancellable = g_cancellable_new(); g_assert_nonnull(cancellable); g_cancellable_cancel(cancellable); g_assert_true(g_cancellable_is_cancelled(cancellable)); bytes = g_bytes_new_static(test_bytes_data, test_bytes_data_len); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, cancellable, test_queued_output_stream_push_bytes_async_error_cb, purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, cancellable, test_queued_output_stream_push_bytes_async_error_cb, purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, cancellable, test_queued_output_stream_push_bytes_async_error_cb, g_main_context_iteration(NULL, TRUE); g_assert_cmpint(done, ==, 0); g_assert_cmpmem(g_memory_output_stream_get_data(output), g_memory_output_stream_get_data_size(output), g_assert_true(g_output_stream_close( G_OUTPUT_STREAM(queued), NULL, &err)); test_queued_output_stream_clear_queue_on_error_cb(GObject *source, GAsyncResult *res, gpointer user_data) PurpleQueuedOutputStream *queued = PURPLE_QUEUED_OUTPUT_STREAM(source); g_assert_false(purple_queued_output_stream_push_bytes_finish(queued, g_assert_error(err, G_IO_ERROR, G_IO_ERROR_CANCELLED); purple_queued_output_stream_clear_queue(queued); test_queued_output_stream_clear_queue_on_error(void) { GMemoryOutputStream *output; PurpleQueuedOutputStream *queued; GCancellable *cancellable; output = G_MEMORY_OUTPUT_STREAM(g_memory_output_stream_new_resizable()); g_assert_nonnull(output); queued = purple_queued_output_stream_new(G_OUTPUT_STREAM(output)); g_assert_true(PURPLE_IS_QUEUED_OUTPUT_STREAM(queued)); cancellable = g_cancellable_new(); g_assert_nonnull(cancellable); g_cancellable_cancel(cancellable); g_assert_true(g_cancellable_is_cancelled(cancellable)); bytes = g_bytes_new_static(test_bytes_data, test_bytes_data_len); purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, cancellable, test_queued_output_stream_clear_queue_on_error_cb, /* Don't set cancellable on these */ purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_clear_queue_on_error_cb, purple_queued_output_stream_push_bytes_async(queued, bytes, G_PRIORITY_DEFAULT, NULL, test_queued_output_stream_clear_queue_on_error_cb, g_main_context_iteration(NULL, TRUE); g_assert_cmpint(done, ==, 0); g_assert_cmpmem(g_memory_output_stream_get_data(output), g_memory_output_stream_get_data_size(output), g_assert_true(g_output_stream_close( G_OUTPUT_STREAM(queued), NULL, &err)); /****************************************************************************** *****************************************************************************/ main(gint argc, gchar **argv) { g_test_init(&argc, &argv, NULL); g_test_set_nonfatal_assertions(); g_test_add_func("/queued-output-stream/new", test_queued_output_stream_new); g_test_add_func("/queued-output-stream/push-bytes-async", test_queued_output_stream_push_bytes_async); g_test_add_func("/queued-output-stream/push-bytes-async-multiple", test_queued_output_stream_push_bytes_async_multiple); g_test_add_func("/queued-output-stream/push-bytes-async-error", test_queued_output_stream_push_bytes_async_error); g_test_add_func("/queued-output-stream/clear-queue-on-error", test_queued_output_stream_clear_queue_on_error);