diff options
Diffstat (limited to 'tests/parser')
-rw-r--r-- | tests/parser/parameterTest.cpp | 31 | ||||
-rw-r--r-- | tests/parser/textTest.cpp | 11 | ||||
-rw-r--r-- | tests/parser/wordEncoderTest.cpp | 17 |
3 files changed, 53 insertions, 6 deletions
diff --git a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp index 12c17444..cf8f8477 100644 --- a/tests/parser/parameterTest.cpp +++ b/tests/parser/parameterTest.cpp @@ -81,6 +81,8 @@ VMIME_TEST_SUITE_BEGIN(parameterTest) #define PARAM_NAME(p, n) (p.getParameterAt(n)->getName()) #define PARAM_CHARSET(p, n) \ (p.getParameterAt(n)->getValue().getCharset().generate()) +#define PARAM_LANG(p, n) \ + (p.getParameterAt(n)->getValue().getLanguage()) #define PARAM_BUFFER(p, n) \ (p.getParameterAt(n)->getValue().getBuffer()) @@ -235,6 +237,16 @@ VMIME_TEST_SUITE_BEGIN(parameterTest) VASSERT_EQ("5.2", "param1", PARAM_NAME(p5, 0)); VASSERT_EQ("5.3", "us-ascii", PARAM_CHARSET(p5, 0)); VASSERT_EQ("5.4", "value1", PARAM_BUFFER(p5, 0)); + + // Language specification + parameterizedHeaderField p6; + p6.parse("X; param1*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A"); + + VASSERT_EQ("6.1", 1, p6.getParameterCount()); + VASSERT_EQ("6.2", "param1", PARAM_NAME(p6, 0)); + VASSERT_EQ("6.3", "us-ascii", PARAM_CHARSET(p6, 0)); + VASSERT_EQ("6.4", "en-us", PARAM_LANG(p6, 0)); + VASSERT_EQ("6.5", "This is ***fun***", PARAM_BUFFER(p6, 0)); } void testGenerate() @@ -370,6 +382,25 @@ VMIME_TEST_SUITE_BEGIN(parameterTest) VASSERT_EQ("4.both", "F: X; param1=\"va lue\"", p4.generate(vmime::generationContext::PARAMETER_VALUE_RFC2231_AND_RFC2047)); + + // Language specification + parameterizedHeaderField p5; + p5.appendParameter(vmime::make_shared <vmime::parameter>("param1", + vmime::word("This is ***fun***", vmime::charset("us-ascii"), "en-us"))); + + VASSERT_EQ("5.no-encoding", "F: X; param1=\"This is ***fun***\"", + p5.generate(vmime::generationContext::PARAMETER_VALUE_NO_ENCODING)); + + VASSERT_EQ("5.rfc2047", "F: X; param1=\"=?us-ascii*en-us?Q?This_is_***fun***?=\"", + p5.generate(vmime::generationContext::PARAMETER_VALUE_RFC2047_ONLY)); + + VASSERT_EQ("5.rfc2231", "F: X; param1*=us-ascii''This%20is%20***fun***", + p5.generate(vmime::generationContext::PARAMETER_VALUE_RFC2231_ONLY)); + + VASSERT_EQ("5.both", "F: X; " + "param1=\"=?us-ascii*en-us?Q?This_is_***fun***?=\";\r\n " + "param1*=us-ascii''This%20is%20***fun***", + p5.generate(vmime::generationContext::PARAMETER_VALUE_RFC2231_AND_RFC2047)); } void testNonStandardEncodedParam() diff --git a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp index f56f972d..58d5bff5 100644 --- a/tests/parser/textTest.cpp +++ b/tests/parser/textTest.cpp @@ -221,12 +221,21 @@ VMIME_TEST_SUITE_BEGIN(textTest) VASSERT_EQ("6", "[text: [[word: charset=iso-8859-1, buffer=Know wh\xe4t? It works!]]]", parseText("=?iso-8859-1?Q?Know_wh=E4t?_It_works!?=")); - // TODO: add more + // With language specifier + VASSERT_EQ("7", "[text: [[word: charset=US-ASCII, buffer=Keith Moore, lang=EN]]]", + parseText("=?US-ASCII*EN?Q?Keith_Moore?=")); } void testGenerate() { // TODO + + // With language specifier + vmime::word wlang1("Émeline", vmime::charset("UTF-8"), "FR"); + VASSERT_EQ("lang1", "=?UTF-8*FR?Q?=C3=89meline?=", wlang1.generate()); + + vmime::word wlang2("Keith Moore", vmime::charset("US-ASCII"), "EN"); + VASSERT_EQ("lang2", "=?US-ASCII*EN?Q?Keith_Moore?=", wlang2.generate()); } void testDisplayForm() diff --git a/tests/parser/wordEncoderTest.cpp b/tests/parser/wordEncoderTest.cpp index 9bc4dcfd..c3c44a87 100644 --- a/tests/parser/wordEncoderTest.cpp +++ b/tests/parser/wordEncoderTest.cpp @@ -32,6 +32,7 @@ VMIME_TEST_SUITE_BEGIN(wordEncoderTest) VMIME_TEST(testGetNextChunk) VMIME_TEST(testGetNextChunk_integral) VMIME_TEST(testIsEncodingNeeded_ascii) + VMIME_TEST(testIsEncodingNeeded_withLanguage) VMIME_TEST(testIsEncodingNeeded_specialChars) VMIME_TEST(testGuessBestEncoding_QP) VMIME_TEST(testGuessBestEncoding_B64) @@ -70,25 +71,31 @@ VMIME_TEST_SUITE_BEGIN(wordEncoderTest) ctx.setInternationalizedEmailSupport(false); VASSERT_FALSE("ascii", vmime::wordEncoder::isEncodingNeeded - (ctx, "ASCII-only buffer", vmime::charset("utf-8"))); + (ctx, "ASCII-only buffer", vmime::charset("utf-8"), "")); VASSERT_TRUE("non-ascii", vmime::wordEncoder::isEncodingNeeded - (ctx, "Buffer with some UTF-8 '\xc3\xa0'", vmime::charset("utf-8"))); + (ctx, "Buffer with some UTF-8 '\xc3\xa0'", vmime::charset("utf-8"), "")); + } + + void testIsEncodingNeeded_withLanguage() + { + VASSERT_TRUE("ascii", vmime::wordEncoder::isEncodingNeeded + (vmime::generationContext::getDefaultContext(), "ASCII-only buffer", vmime::charset("utf-8"), "en")); } void testIsEncodingNeeded_specialChars() { VASSERT_TRUE("rfc2047", vmime::wordEncoder::isEncodingNeeded (vmime::generationContext::getDefaultContext(), - "foo bar =? foo bar", vmime::charset("us-ascii"))); + "foo bar =? foo bar", vmime::charset("us-ascii"), "")); VASSERT_TRUE("new line 1", vmime::wordEncoder::isEncodingNeeded (vmime::generationContext::getDefaultContext(), - "foo bar \n foo bar", vmime::charset("us-ascii"))); + "foo bar \n foo bar", vmime::charset("us-ascii"), "")); VASSERT_TRUE("new line 2", vmime::wordEncoder::isEncodingNeeded (vmime::generationContext::getDefaultContext(), - "foo bar \r foo bar", vmime::charset("us-ascii"))); + "foo bar \r foo bar", vmime::charset("us-ascii"), "")); } void testGuessBestEncoding_QP() |