summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/test/TestMsgStripRE.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/base/test/TestMsgStripRE.cpp')
-rw-r--r--comm/mailnews/base/test/TestMsgStripRE.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/comm/mailnews/base/test/TestMsgStripRE.cpp b/comm/mailnews/base/test/TestMsgStripRE.cpp
new file mode 100644
index 0000000000..eae217dcb2
--- /dev/null
+++ b/comm/mailnews/base/test/TestMsgStripRE.cpp
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+#include "mozilla/ArrayUtils.h"
+#include "nsCOMPtr.h"
+#include "nsMsgUtils.h"
+#include "nsIPrefService.h"
+#include "nsIPrefBranch.h"
+#include "nsISupportsPrimitives.h"
+#include "nsString.h"
+
+#define STRING_SIZE 255
+struct testInfo {
+ char encodedInput[STRING_SIZE];
+ char expectedOutput[STRING_SIZE];
+ bool expectedDidModify;
+};
+
+int testStripRe(const char* encodedInput, char* expectedOutput,
+ bool expectedDidModify) {
+ // call NS_StripRE with the appropriate args
+ nsCString modifiedSubject;
+ bool didModify;
+ didModify = NS_MsgStripRE(nsDependentCString(encodedInput), modifiedSubject);
+
+ // make sure we got the right results
+ if (didModify != expectedDidModify) return 2;
+
+ if (didModify) {
+ if (strcmp(expectedOutput, modifiedSubject.get())) {
+ return 3;
+ }
+ } else if (strcmp(expectedOutput, encodedInput)) {
+ return 4;
+ }
+
+ // test passed
+ return 0;
+}
+
+// int main(int argc, char** argv)
+TEST(TestMsgStripRE, TestMsgStripREMain)
+{
+ nsresult rv;
+ nsCOMPtr<nsIPrefBranch> prefBranch(
+ do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
+ EXPECT_TRUE(NS_SUCCEEDED(rv));
+
+ // set localizedRe pref, value "SV,ÆØÅ",
+ // \xC3\x86, \xC3\x98 and \xC3\x85 are the UTF-8 encodings of Æ, Ø and Å.
+ rv = prefBranch->SetStringPref("mailnews.localizedRe",
+ "SV,\xC3\x86\xC3\x98\xC3\x85"_ns);
+ EXPECT_TRUE(NS_SUCCEEDED(rv));
+
+ // run our tests
+ struct testInfo testInfoStructs[] = {
+ // Note that re-encoding always happens in UTF-8.
+ {"SV: =?ISO-8859-1?Q?=C6blegr=F8d?=", "=?UTF-8?B?w4ZibGVncsO4ZA==?=",
+ true},
+ {"=?ISO-8859-1?Q?SV=3A=C6blegr=F8d?=", "=?UTF-8?B?w4ZibGVncsO4ZA==?=",
+ true},
+
+ // Note that in the next two tests, the only ISO-8859-1 chars are in the
+ // localizedRe piece, so once they've been stripped, the re-encoding
+ // process simply writes out ASCII rather than an ISO-8859-1 encoded
+ // string with no actual ISO-8859-1 special characters, which seems
+ // reasonable.
+ {"=?ISO-8859-1?Q?=C6=D8=C5=3A_Foo_bar?=", "Foo bar", true},
+ {"=?ISO-8859-1?Q?=C6=D8=C5=3AFoo_bar?=", "Foo bar", true}};
+
+ bool allTestsPassed = true;
+ int result;
+ for (unsigned int i = 0; i < MOZ_ARRAY_LENGTH(testInfoStructs); i++) {
+ result = testStripRe(testInfoStructs[i].encodedInput,
+ testInfoStructs[i].expectedOutput,
+ testInfoStructs[i].expectedDidModify);
+ if (result) {
+ printf("Failed: %s, i=%d | result=%d\n", __FILE__, i, result);
+ allTestsPassed = false;
+ }
+ EXPECT_TRUE(result == 0);
+ }
+
+ if (allTestsPassed) {
+ printf("all tests passed\n");
+ }
+ EXPECT_TRUE(allTestsPassed);
+}