sl@0: /* GLib testing framework examples and tests sl@0: * Copyright (C) 2008 Asbjoern Pettersen sl@0: * Portions copyright (c) 2009 Nokia Corporation. All rights reserved. sl@0: * This work is provided "as is"; redistribution and modification sl@0: * in whole or in part, in any medium, physical or electronic is sl@0: * permitted without restriction. sl@0: * sl@0: * This work is distributed in the hope that it will be useful, sl@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of sl@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. sl@0: * sl@0: * In no event shall the authors or contributors be liable for any sl@0: * direct, indirect, incidental, special, exemplary, or consequential sl@0: * damages (including, but not limited to, procurement of substitute sl@0: * goods or services; loss of use, data, or profits; or business sl@0: * interruption) however caused and on any theory of liability, whether sl@0: * in contract, strict liability, or tort (including negligence or sl@0: * otherwise) arising in any way out of the use of this software, even sl@0: * if advised of the possibility of such damage. sl@0: */ sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #ifdef HAVE_UNISTD_H sl@0: #include sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: #include "mrt2_glib2_test.h" sl@0: #endif /*__SYMBIAN32__*/ sl@0: #define DATA_SIZE 1024 sl@0: sl@0: struct MyRawData sl@0: { sl@0: gint length; /* of data */ sl@0: guchar data[DATA_SIZE]; sl@0: }; sl@0: sl@0: /* 100 pre-encoded string from data[] buffer. Data length from 1..100 sl@0: */ sl@0: static const char *ok_100_encode_strs[] = { sl@0: "AA==", sl@0: "AAE=", sl@0: "AAEC", sl@0: "AAECAw==", sl@0: "AAECAwQ=", sl@0: "AAECAwQF", sl@0: "AAECAwQFBg==", sl@0: "AAECAwQFBgc=", sl@0: "AAECAwQFBgcI", sl@0: "AAECAwQFBgcICQ==", sl@0: "AAECAwQFBgcICQo=", sl@0: "AAECAwQFBgcICQoL", sl@0: "AAECAwQFBgcICQoLDA==", sl@0: "AAECAwQFBgcICQoLDA0=", sl@0: "AAECAwQFBgcICQoLDA0O", sl@0: "AAECAwQFBgcICQoLDA0ODw==", sl@0: "AAECAwQFBgcICQoLDA0ODxA=", sl@0: "AAECAwQFBgcICQoLDA0ODxAR", sl@0: "AAECAwQFBgcICQoLDA0ODxAREg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhM=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMU", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRY=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYX", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBk=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBka", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxw=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gIQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCU=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUm", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJyg=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygp", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKis=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKiss", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4v", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDE=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEy", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Ng==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0A=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkM=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNE", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUY=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZH", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSEk=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKSw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0w=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk8=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVI=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFU=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVW", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWVw==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1g=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWg==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWls=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXQ==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV4=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5f", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYA==", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGE=", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFi", sl@0: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiYw==", sl@0: NULL sl@0: }; sl@0: sl@0: static void sl@0: generate_databuffer_for_base64 (struct MyRawData *p) sl@0: { sl@0: int i; sl@0: for (i = 0; i < DATA_SIZE; i++) sl@0: p->data[i] = i; sl@0: } sl@0: sl@0: static void sl@0: test_base64_encode (void) sl@0: { sl@0: int i; sl@0: gint length = 1; sl@0: char *text; sl@0: struct MyRawData myraw; sl@0: sl@0: generate_databuffer_for_base64 (&myraw); sl@0: sl@0: for (i = 0; ok_100_encode_strs[i]; i++) sl@0: { sl@0: length = i + 1; sl@0: text = g_base64_encode (myraw.data, length); sl@0: g_assert_cmpstr (text, ==, ok_100_encode_strs[i]); sl@0: /* printf ("\"%s\",\n",text); */ sl@0: g_free (text); sl@0: } sl@0: } sl@0: sl@0: sl@0: static void sl@0: decode_and_compare (const gchar *datap, sl@0: const struct MyRawData *p) sl@0: { sl@0: guchar *data2; sl@0: gsize len; sl@0: int memcmp_decode; sl@0: sl@0: data2 = g_base64_decode (datap, &len); sl@0: g_assert_cmpint (len, ==, p->length); sl@0: /* g_print ("length: got %d, expected %d\n",len, length); */ sl@0: memcmp_decode = memcmp (p->data, data2, p->length); sl@0: g_assert_cmpint (memcmp_decode, ==, 0); sl@0: g_free (data2); sl@0: } sl@0: sl@0: static void sl@0: test_base64_decode (void) sl@0: { sl@0: int i; sl@0: struct MyRawData myraw; sl@0: sl@0: generate_databuffer_for_base64 (&myraw); sl@0: sl@0: for (i = 0; ok_100_encode_strs[i]; i++) sl@0: { sl@0: myraw.length = i + 1; sl@0: decode_and_compare (ok_100_encode_strs[i], &myraw); sl@0: } sl@0: } sl@0: sl@0: static void sl@0: test_base64_encode_decode (void) sl@0: { sl@0: int i; sl@0: char *text; sl@0: struct MyRawData myraw; sl@0: sl@0: generate_databuffer_for_base64 (&myraw); sl@0: sl@0: for (i = 0; i < DATA_SIZE; i++) sl@0: { sl@0: myraw.length = i + 1; sl@0: text = g_base64_encode (myraw.data, myraw.length); sl@0: sl@0: decode_and_compare (text, &myraw); sl@0: sl@0: g_free (text); sl@0: } sl@0: } sl@0: sl@0: sl@0: int sl@0: main (int argc, sl@0: char *argv[]) sl@0: { sl@0: int retval; sl@0: #ifdef __SYMBIAN32__ sl@0: g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL); sl@0: g_set_print_handler(mrtPrintHandler); sl@0: #endif /*__SYMBIAN32__*/ sl@0: g_test_init (&argc, &argv, NULL); sl@0: sl@0: g_test_add_func ("/misc/base64/encode", test_base64_encode); sl@0: g_test_add_func ("/misc/base64/decode", test_base64_decode); sl@0: g_test_add_func ("/misc/base64/encode_decode", test_base64_encode_decode); sl@0: sl@0: retval = g_test_run(); sl@0: #if __SYMBIAN32__ sl@0: testResultXml("testingbase64"); sl@0: #endif /* EMULATOR */ sl@0: return retval; sl@0: }