aboutsummaryrefslogtreecommitdiffstats
path: root/camel/tests/mime-filter/test-stripheader.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/tests/mime-filter/test-stripheader.c')
-rw-r--r--camel/tests/mime-filter/test-stripheader.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/camel/tests/mime-filter/test-stripheader.c b/camel/tests/mime-filter/test-stripheader.c
new file mode 100644
index 0000000000..ff5446635b
--- /dev/null
+++ b/camel/tests/mime-filter/test-stripheader.c
@@ -0,0 +1,131 @@
+/*
+ test-stripheader.c
+
+ Test the CamelMimeFilterStripHeader class
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include "camel-test.h"
+
+#include <camel/camel-stream-fs.h>
+#include <camel/camel-stream-mem.h>
+#include <camel/camel-stream-filter.h>
+#include <camel/camel-mime-filter-stripheader.h>
+
+#define d(x) x
+
+#define NUM_CASES 6
+#define CHUNK_SIZE 32
+
+int
+main(int argc, char **argv)
+{
+ CamelStream *source;
+ CamelStream *correct;
+ CamelStreamFilter *filter;
+ CamelMimeFilter *sh;
+ gchar *work;
+ int i;
+ ssize_t comp_progress, comp_correct_chunk, comp_filter_chunk;
+ int comp_i;
+ char comp_correct[CHUNK_SIZE], comp_filter[CHUNK_SIZE];
+
+ camel_test_init(argc, argv);
+
+ for (i = 0; i < NUM_CASES; i++) {
+ work = g_strdup_printf ("Header stripping filter, test case %d", i);
+ camel_test_start (work);
+ g_free (work);
+
+ camel_test_push ("Initializing objects");
+ work = g_strdup_printf ("%s/stripheader-%d.in", SOURCEDIR, i + 1);
+ source = camel_stream_fs_new_with_name (work, 0, O_RDONLY);
+ if (!source) {
+ camel_test_fail ("Failed to open input case in \"%s\"", work);
+ g_free (work);
+ continue;
+ }
+ g_free (work);
+
+ work = g_strdup_printf ("%s/stripheader-%d.out", SOURCEDIR, i + 1);
+ correct = camel_stream_fs_new_with_name (work, 0, O_RDONLY);
+ if (!correct) {
+ camel_test_fail ("Failed to open correct output in \"%s\"", work);
+ g_free (work);
+ continue;
+ }
+ g_free (work);
+
+ filter = camel_stream_filter_new_with_stream (CAMEL_STREAM (source));
+ if (!filter) {
+ camel_test_fail ("Couldn't create CamelStreamFilter??");
+ continue;
+ }
+
+ sh = camel_mime_filter_stripheader_new ("Stripped");
+ if (!sh) {
+ camel_test_fail ("Couldn't create CamelMimeFilterStripHeader??");
+ continue;
+ }
+
+ camel_stream_filter_add (filter, sh);
+ camel_test_pull ();
+
+ camel_test_push ("Running filter and comparing to correct result");
+
+ comp_progress = 0;
+
+ while (1) {
+ comp_correct_chunk = camel_stream_read (correct, comp_correct, CHUNK_SIZE);
+ comp_filter_chunk = 0;
+
+ if (comp_correct_chunk == 0)
+ break;
+
+ while (comp_filter_chunk < comp_correct_chunk) {
+ ssize_t delta;
+
+ delta = camel_stream_read (CAMEL_STREAM (filter),
+ comp_filter + comp_filter_chunk,
+ CHUNK_SIZE - comp_filter_chunk);
+
+ if (delta == 0) {
+ camel_test_fail ("Chunks are different sizes: correct is %d, filter is %d, %d bytes into stream",
+ comp_correct_chunk, comp_filter_chunk, comp_progress);
+ }
+
+ comp_filter_chunk += delta;
+ }
+
+ d(printf ("\n\nCORRECT: >>%.*s<<", comp_correct_chunk, comp_correct);)
+ d(printf ("\nFILTER : >>%.*s<<\n", comp_filter_chunk, comp_filter);)
+
+ for (comp_i = 0; comp_i < comp_filter_chunk; comp_i++) {
+ if (comp_correct[comp_i] != comp_filter[comp_i]) {
+ camel_test_fail ("Difference: correct is %c, filter is %c, %d bytes into stream",
+ comp_correct[comp_i],
+ comp_filter[comp_i],
+ comp_progress + comp_i);
+ }
+ }
+
+ comp_progress += comp_filter_chunk;
+ }
+
+ camel_test_pull ();
+
+ /* inefficient */
+ camel_test_push ("Cleaning up");
+ camel_object_unref (CAMEL_OBJECT (filter));
+ camel_object_unref (CAMEL_OBJECT (correct));
+ camel_object_unref (CAMEL_OBJECT (source));
+ camel_object_unref (CAMEL_OBJECT (sh));
+ camel_test_pull ();
+
+ camel_test_end();
+ }
+
+ return 0;
+}