summaryrefslogtreecommitdiff
path: root/Tests/LibIMAP/TestQuotedPrintable.cpp
diff options
context:
space:
mode:
authorLuke <luke.wilde@live.co.uk>2021-07-21 02:03:36 +0100
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-07-24 20:11:28 +0430
commita00b5fc7b720e9fc0f3873a22adf9c610f7c69a0 (patch)
tree41c6f1280df87c2910eadcd27f31de7c6663938b /Tests/LibIMAP/TestQuotedPrintable.cpp
parentc63913b6334f84b6c3da65ce8760a9342163df9a (diff)
downloadserenity-a00b5fc7b720e9fc0f3873a22adf9c610f7c69a0.zip
Tests: Add tests for the quoted printable decoder
Diffstat (limited to 'Tests/LibIMAP/TestQuotedPrintable.cpp')
-rw-r--r--Tests/LibIMAP/TestQuotedPrintable.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/Tests/LibIMAP/TestQuotedPrintable.cpp b/Tests/LibIMAP/TestQuotedPrintable.cpp
new file mode 100644
index 0000000000..e52d542533
--- /dev/null
+++ b/Tests/LibIMAP/TestQuotedPrintable.cpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <AK/CharacterTypes.h>
+#include <LibIMAP/QuotedPrintable.h>
+#include <LibTest/TestCase.h>
+
+TEST_CASE(test_decode)
+{
+ auto decode_equal = [](const char* input, const char* expected) {
+ auto decoded = IMAP::decode_quoted_printable(StringView(input));
+ EXPECT(String::copy(decoded) == String(expected));
+ };
+
+ auto decode_equal_byte_buffer = [](const char* input, const char* expected, size_t expected_length) {
+ auto decoded = IMAP::decode_quoted_printable(StringView(input));
+ EXPECT(decoded == ByteBuffer::copy(expected, expected_length));
+ };
+
+ decode_equal("hello world", "hello world");
+ decode_equal("=3D", "=");
+ decode_equal("hello=\r\n world", "hello world");
+ decode_equal("=68=65=6C=6C=6F=20=\r\n=77=6F=72=6C=64", "hello world");
+
+ // Doesn't mistake hex sequences without a preceding '=' as an escape sequence.
+ decode_equal("4A=4B=4C4D", "4AKL4D");
+
+ // Allows lowercase escape sequences.
+ decode_equal("=4a=4b=4c=4d=4e=4f", "JKLMNO");
+
+ // Bytes for U+1F41E LADY BEETLE
+ decode_equal_byte_buffer("=F0=9F=90=9E", "\xF0\x9F\x90\x9E", 4);
+
+ // Illegal characters. If these aren't escaped, they are simply ignored.
+ // Illegal characters are:
+ // - ASCII control bytes that aren't tab, carriage return or new line
+ // - Any byte above 0x7E
+ StringBuilder illegal_character_builder;
+ for (u16 byte = 0; byte <= 0xFF; ++byte) {
+ if (byte > 0x7E || (is_ascii_control(byte) && byte != '\t' && byte != '\r' && byte != '\n'))
+ illegal_character_builder.append(byte);
+ }
+
+ auto illegal_character_decode = IMAP::decode_quoted_printable(illegal_character_builder.to_string());
+ EXPECT(illegal_character_decode.is_empty());
+}