aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2014-06-30 20:48:42 +0000
committerVincent Richard <[email protected]>2014-06-30 20:48:42 +0000
commit03a0e36e91070a1bcfb13babaaefec4ea258723e (patch)
tree4e61cb82e31c9dac38265fac988be87c07ec94fb /tests
parentAllow choosing between encoding modes for parameter values. (diff)
downloadvmime-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.cpp31
-rw-r--r--tests/parser/textTest.cpp11
-rw-r--r--tests/parser/wordEncoderTest.cpp17
-rw-r--r--tests/testUtils.hpp9
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);
}