]> granicus.if.org Git - neomutt/commitdiff
test: move rfc2047 tests
authorRichard Russon <rich@flatcap.org>
Wed, 1 May 2019 00:07:20 +0000 (01:07 +0100)
committerRichard Russon <rich@flatcap.org>
Wed, 1 May 2019 22:39:00 +0000 (23:39 +0100)
email/rfc2047.c
test/Makefile.autosetup
test/main.c
test/rfc2047/common.c [moved from test/rfc2047.c with 57% similarity]
test/rfc2047/common.h [new file with mode: 0644]
test/rfc2047/rfc2047_decode.c
test/rfc2047/rfc2047_encode.c

index b7ade75863f7f244199584ed0c0ce0592cd7392f..5857cb355cdf75cd28f53ae4881fcc949aee2125 100644 (file)
@@ -625,7 +625,7 @@ static int encode(const char *d, size_t dlen, int col, const char *fromcode,
  */
 void rfc2047_encode(char **pd, const char *specials, int col, const char *charsets)
 {
-  if (!C_Charset || !*pd)
+  if (!C_Charset || !pd || !*pd)
     return;
 
   if (!charsets || !*charsets)
index ff1cb1a626a9621617e8a7251c779f2d17e0cea0..886b8cdb426b4e6f192c096902346909dd2a219c 100644 (file)
@@ -1,7 +1,6 @@
 TEST_OBJS   = test/main.o \
              test/buffer.o \
              test/md5.o \
-             test/rfc2047.o \
              test/address.o \
              test/url.o
 
@@ -361,6 +360,7 @@ REGEX_OBJS  = test/regex/main.o \
                  test/regex/mutt_replacelist_remove.o
 
 RFC2047_OBJS   = test/rfc2047/main.o \
+                 test/rfc2047/common.o \
                  test/rfc2047/rfc2047_decode_addrlist.o \
                  test/rfc2047/rfc2047_decode.o \
                  test/rfc2047/rfc2047_decode_envelope.o \
index e251c900a950fe2511ed711bb9fcd32773b70946..6bb1a988e0a9fde8907ca73456a7c40b74dd7624 100644 (file)
@@ -26,7 +26,6 @@
  * Add your test cases to this list.
  *****************************************************************************/
 #define NEOMUTT_TEST_LIST                                                      \
-  NEOMUTT_TEST_ITEM(test_rfc2047)                                              \
   NEOMUTT_TEST_ITEM(test_md5)                                                  \
   NEOMUTT_TEST_ITEM(test_md5_ctx)                                              \
   NEOMUTT_TEST_ITEM(test_md5_ctx_bytes)                                        \
similarity index 57%
rename from test/rfc2047.c
rename to test/rfc2047/common.c
index baad7c249a27742d8e25fa6200bbd2148032e257..0bf7936105763ac15aef319196b804707f25eeea 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * @file
- * Test code for RFC2047 Encoding
+ * Common code for RFC2047 tests
  *
  * @authors
  * Copyright (C) 2018 Pietro Cerutti <gahr@gahr.ch>
 
 #define TEST_NO_MAIN
 #include "acutest.h"
-
-#include "mutt/charset.h"
-#include "mutt/memory.h"
-#include "mutt/string2.h"
-#include "email/rfc2047.h"
-
+#include "config.h"
 #include <locale.h>
+#include "mutt/mutt.h"
+#include "email/lib.h"
+#include "common.h"
 
-static const struct
-{
-  const char *original; /* the string as received in the original email */
-  const char *decoded;  /* the expected plain-text string               */
-  const char *encoded;  /* the string as it's encoded by NeoMutt        */
-} test_data[] =
-    /* clang-format off */
+// clang-format off
+const struct Rfc2047TestData test_data[] =
 {
   {
     /* The string is split in the middle of a multi-byte sequence */
@@ -77,54 +70,8 @@ static const struct
       "=?UTF-8?Q?Sicherheitsl=C3=BCcke in praktisch allen IT-Systemen?="
     , "Sicherheitslücke in praktisch allen IT-Systemen"
     , "=?utf-8?Q?Sicherheitsl=C3=BCcke?= in praktisch allen IT-Systemen"
-  }
+  },
+  { NULL, NULL, NULL },
 };
-/* clang-format on */
-
-void test_rfc2047(void)
-{
-  if (!TEST_CHECK((setlocale(LC_ALL, "en_US.UTF-8") != NULL) ||
-                  (setlocale(LC_ALL, "C.UTF-8") != NULL)))
-  {
-    TEST_MSG("Cannot set locale to (en_US|C).UTF-8");
-    return;
-  }
-
-  C_Charset = "utf-8";
-
-  for (size_t i = 0; i < mutt_array_size(test_data); ++i)
-  {
-    /* decode the original string */
-    char *s = mutt_str_strdup(test_data[i].original);
-    rfc2047_decode(&s);
-    if (!TEST_CHECK(strcmp(s, test_data[i].decoded) == 0))
-    {
-      TEST_MSG("Iteration: %zu", i);
-      TEST_MSG("Expected : %s", test_data[i].decoded);
-      TEST_MSG("Actual   : %s", s);
-    }
-    FREE(&s);
-
-    /* encode the expected result */
-    s = mutt_str_strdup(test_data[i].decoded);
-    rfc2047_encode(&s, NULL, 0, "utf-8");
-    if (!TEST_CHECK(strcmp(s, test_data[i].encoded) == 0))
-    {
-      TEST_MSG("Iteration: %zu", i);
-      TEST_MSG("Expected : %s", test_data[i].encoded);
-      TEST_MSG("Actual   : %s", s);
-    }
-    FREE(&s);
+// clang-format on
 
-    /* decode the encoded result */
-    s = mutt_str_strdup(test_data[i].encoded);
-    rfc2047_decode(&s);
-    if (!TEST_CHECK(strcmp(s, test_data[i].decoded) == 0))
-    {
-      TEST_MSG("Iteration: %zu", i);
-      TEST_MSG("Expected : %s", test_data[i].decoded);
-      TEST_MSG("Actual   : %s", s);
-    }
-    FREE(&s);
-  }
-}
diff --git a/test/rfc2047/common.h b/test/rfc2047/common.h
new file mode 100644 (file)
index 0000000..d7a4379
--- /dev/null
@@ -0,0 +1,37 @@
+/**
+ * @file
+ * Common code for RFC2047 tests
+ *
+ * @authors
+ * Copyright (C) 2018 Pietro Cerutti <gahr@gahr.ch>
+ *
+ * @copyright
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_NO_MAIN
+#include "acutest.h"
+#include <locale.h>
+#include "mutt/mutt.h"
+#include "email/lib.h"
+
+struct Rfc2047TestData
+{
+  const char *original; // the string as received in the original email
+  const char *decoded;  // the expected plain-text string
+  const char *encoded;  // the string as it's encoded by NeoMutt
+};
+
+extern const struct Rfc2047TestData test_data[];
+
index f9e9ab215d55f4a1daedb8abc2e9d065e2f7128e..6ce9edc467188291ea3fbde4d6afcf662a0f275c 100644 (file)
 #include "mutt/mutt.h"
 #include "email/lib.h"
 #include "address/lib.h"
+#include "common.h"
 
 void test_rfc2047_decode(void)
 {
   // void rfc2047_decode(char **pd);
 
+  if (!TEST_CHECK((setlocale(LC_ALL, "en_US.UTF-8") != NULL) ||
+                  (setlocale(LC_ALL, "C.UTF-8") != NULL)))
+  {
+    TEST_MSG("Cannot set locale to (en_US|C).UTF-8");
+    return;
+  }
+
+  C_Charset = "utf-8";
+
   {
     rfc2047_decode(NULL);
     TEST_CHECK_(1, "rfc2047_decode(NULL)");
@@ -41,4 +51,31 @@ void test_rfc2047_decode(void)
     rfc2047_decode(&pd);
     TEST_CHECK_(1, "rfc2047_decode(&pd)");
   }
+
+  {
+    for (size_t i = 0; test_data[i].original; i++)
+    {
+      /* decode the original string */
+      char *s = mutt_str_strdup(test_data[i].original);
+      rfc2047_decode(&s);
+      if (!TEST_CHECK(strcmp(s, test_data[i].decoded) == 0))
+      {
+        TEST_MSG("Iteration: %zu", i);
+        TEST_MSG("Expected : %s", test_data[i].decoded);
+        TEST_MSG("Actual   : %s", s);
+      }
+      FREE(&s);
+
+      /* decode the encoded result */
+      s = mutt_str_strdup(test_data[i].encoded);
+      rfc2047_decode(&s);
+      if (!TEST_CHECK(strcmp(s, test_data[i].decoded) == 0))
+      {
+        TEST_MSG("Iteration: %zu", i);
+        TEST_MSG("Expected : %s", test_data[i].decoded);
+        TEST_MSG("Actual   : %s", s);
+      }
+      FREE(&s);
+    }
+  }
 }
index 31ba958698a9acdef161461015d3e8c84f56695a..fd632ef0858519a2951ff805abfe84ea81649c58 100644 (file)
 #include "mutt/mutt.h"
 #include "email/lib.h"
 #include "address/lib.h"
+#include "common.h"
 
 void test_rfc2047_encode(void)
 {
   // void rfc2047_encode(char **pd, const char *specials, int col, const char *charsets);
 
+  if (!TEST_CHECK((setlocale(LC_ALL, "en_US.UTF-8") != NULL) ||
+                  (setlocale(LC_ALL, "C.UTF-8") != NULL)))
+  {
+    TEST_MSG("Cannot set locale to (en_US|C).UTF-8");
+    return;
+  }
+
+  C_Charset = "utf-8";
+
   {
     rfc2047_encode(NULL, AddressSpecials, 0, "apple");
     TEST_CHECK_(1, "rfc2047_encode(NULL, AddressSpecials, 0, \"apple\")");
@@ -47,4 +57,20 @@ void test_rfc2047_encode(void)
     rfc2047_encode(&pd, AddressSpecials, 0, NULL);
     TEST_CHECK_(1, "rfc2047_encode(&pd, AddressSpecials, 0, NULL)");
   }
+
+  {
+    for (size_t i = 0; test_data[i].decoded; i++)
+    {
+      /* encode the expected result */
+      char *s = mutt_str_strdup(test_data[i].decoded);
+      rfc2047_encode(&s, NULL, 0, "utf-8");
+      if (!TEST_CHECK(strcmp(s, test_data[i].encoded) == 0))
+      {
+        TEST_MSG("Iteration: %zu", i);
+        TEST_MSG("Expected : %s", test_data[i].encoded);
+        TEST_MSG("Actual   : %s", s);
+      }
+      FREE(&s);
+    }
+  }
 }