diff options
author | Vincent Richard <[email protected]> | 2014-06-30 20:48:42 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2014-06-30 20:48:42 +0000 |
commit | 03a0e36e91070a1bcfb13babaaefec4ea258723e (patch) | |
tree | 4e61cb82e31c9dac38265fac988be87c07ec94fb /tests | |
parent | Allow choosing between encoding modes for parameter values. (diff) | |
download | vmime-03a0e36e91070a1bcfb13babaaefec4ea258723e.tar.gz vmime-03a0e36e91070a1bcfb13babaaefec4ea258723e.zip |
Added support for language specification in RFC-2047 encoded words and RFC-2231 parameter values.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/parser/parameterTest.cpp | 31 | ||||
-rw-r--r-- | tests/parser/textTest.cpp | 11 | ||||
-rw-r--r-- | tests/parser/wordEncoderTest.cpp | 17 | ||||
-rw-r--r-- | tests/testUtils.hpp | 9 |
4 files changed, 61 insertions, 7 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() diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp index 2476787b..367be623 100644 --- a/tests/testUtils.hpp +++ b/tests/testUtils.hpp @@ -119,7 +119,14 @@ inline std::ostream& operator<<(std::ostream& os, const vmime::charset& ch) inline std::ostream& operator<<(std::ostream& os, const vmime::word& w) { - os << "[word: charset=" << w.getCharset().getName() << ", buffer=" << w.getBuffer() << "]"; + os << "[word: charset=" << w.getCharset().getName() + << ", buffer=" << w.getBuffer(); + + if (!w.getLanguage().empty()) + os << ", lang=" << w.getLanguage(); + + os << "]"; + return (os); } |