geary/test/engine/rfc822/rfc822-part-test.vala
2020-06-30 17:31:07 +10:00

112 lines
4 KiB
Vala

/*
* Copyright 2018 Michael Gratton <mike@vee.net>
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
class Geary.RFC822.PartTest : TestCase {
private const string CR_BODY = "This is an attachment.\n";
private const string CRLF_BODY = "This is an attachment.\r\n";
private const string ICAL_BODY = "BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n";
private const string UTF8_BODY = "Тест.";
public PartTest() {
base("Geary.RFC822.PartTest");
add_test("new_from_minimal_mime_part", new_from_minimal_mime_part);
add_test("new_from_complete_mime_part", new_from_complete_mime_part);
add_test("write_to_buffer_plain", write_to_buffer_plain);
add_test("write_to_buffer_plain_crlf", write_to_buffer_plain_crlf);
add_test("write_to_buffer_plain_ical", write_to_buffer_plain_ical);
add_test("write_to_buffer_plain_utf8", write_to_buffer_plain_utf8);
}
public void new_from_minimal_mime_part() throws GLib.Error {
Part test = new Part(new_part("test/plain", CR_BODY.data));
assert_null(test.content_id, "content_id");
assert_null(test.content_description, "content_description");
assert_null(test.content_disposition, "content_disposition");
}
public void new_from_complete_mime_part() throws GLib.Error {
const string TYPE = "text/plain";
const string ID = "test-id";
const string DESC = "test description";
GMime.Part part = new_part(TYPE, CR_BODY.data);
part.set_content_id(ID);
part.set_content_description(DESC);
part.set_content_disposition(
GMime.ContentDisposition.parse(
Geary.RFC822.get_parser_options(),
"inline"
)
);
Part test = new Part(part);
assert_equal(test.content_type.to_string(), TYPE);
assert_equal(test.content_id, ID);
assert_equal(test.content_description, DESC);
assert_non_null(test.content_disposition, "content_disposition");
assert_equal<Geary.Mime.DispositionType?>(
test.content_disposition.disposition_type, INLINE
);
}
public void write_to_buffer_plain() throws GLib.Error {
Part test = new Part(new_part("text/plain", CR_BODY.data));
Memory.Buffer buf = test.write_to_buffer(Part.EncodingConversion.NONE);
assert_equal(buf.to_string(), CR_BODY);
}
public void write_to_buffer_plain_crlf() throws GLib.Error {
Part test = new Part(new_part("text/plain", CRLF_BODY.data));
Memory.Buffer buf = test.write_to_buffer(Part.EncodingConversion.NONE);
// CRLF should be stripped
assert_equal(buf.to_string(), CR_BODY);
}
public void write_to_buffer_plain_ical() throws GLib.Error {
Part test = new Part(new_part("text/calendar", ICAL_BODY.data));
Memory.Buffer buf = test.write_to_buffer(Part.EncodingConversion.NONE);
// CRLF should not be stripped
assert_equal(buf.to_string(), ICAL_BODY);
}
public void write_to_buffer_plain_utf8() throws GLib.Error {
Part test = new Part(new_part("text/plain", UTF8_BODY.data));
Memory.Buffer buf = test.write_to_buffer(Part.EncodingConversion.NONE);
assert_equal(buf.to_string(), UTF8_BODY);
}
private GMime.Part new_part(string? mime_type,
uint8[] body) {
GMime.Part part = new GMime.Part.with_type("text", "plain");
if (mime_type != null) {
part.set_content_type(GMime.ContentType.parse(
Geary.RFC822.get_parser_options(),
mime_type
));
}
GMime.DataWrapper body_wrapper = new GMime.DataWrapper.with_stream(
new GMime.StreamMem.with_buffer(body),
GMime.ContentEncoding.BINARY
);
part.set_content(body_wrapper);
part.encode(GMime.EncodingConstraint.7BIT);
return part;
}
}