Add ContentType methods for determining file name extenions and type sniffing.

* src/engine/mime/mime-content-type.vala (ContentType): Add ::guess_type
  and ::get_file_name_extension methods, unit tests.
This commit is contained in:
Michael James Gratton 2017-02-14 22:26:14 +11:00
parent 9014e46e42
commit e3d708b8e6
4 changed files with 143 additions and 17 deletions

View file

@ -6,6 +6,7 @@ set(TEST_SRC
main.vala
testcase.vala # Based on same file in libgee, courtesy Julien Peeters
engine/mime-content-type-test.vala
engine/rfc822-mailbox-address-test.vala
engine/rfc822-message-test.vala
engine/rfc822-message-data-test.vala

View file

@ -0,0 +1,56 @@
/*
* Copyright 2016 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.Mime.ContentTypeTest : Gee.TestCase {
public ContentTypeTest() {
base("Geary.Mime.ContentTypeTest");
add_test("get_file_name_extension", get_file_name_extension);
add_test("guess_type_from_name", guess_type_from_name);
add_test("guess_type_from_buf", guess_type_from_buf);
}
}
public void get_file_name_extension() {
assert(new ContentType("image", "jpeg", null).get_file_name_extension() == ".jpeg");
assert(new ContentType("test", "unknown", null).get_file_name_extension() == null);
}
public void guess_type_from_name() {
try {
assert(ContentType.guess_type("test.png", null).is_type("image", "png"));
} catch (Error err) {
assert_not_reached();
}
try {
assert(ContentType.guess_type("foo.test", null).get_mime_type() == ContentType.DEFAULT_CONTENT_TYPE);
} catch (Error err) {
assert_not_reached();
}
}
public void guess_type_from_buf() {
Memory.ByteBuffer png = new Memory.ByteBuffer(
{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a}, 8 // PNG magic
);
Memory.ByteBuffer empty = new Memory.ByteBuffer({0x0}, 1);
try {
assert(ContentType.guess_type(null, png).is_type("image", "png"));
} catch (Error err) {
assert_not_reached();
}
try {
assert(ContentType.guess_type(null, empty).get_mime_type() == ContentType.DEFAULT_CONTENT_TYPE);
} catch (Error err) {
assert_not_reached();
}
}
}

View file

@ -41,6 +41,7 @@ int main(string[] args) {
engine.add_suite(new Geary.IdleManagerTest().get_suite());
engine.add_suite(new Geary.Inet.Test().get_suite());
engine.add_suite(new Geary.JS.Test().get_suite());
engine.add_suite(new Geary.Mime.ContentTypeTest().get_suite());
engine.add_suite(new Geary.RFC822.MailboxAddressTest().get_suite());
engine.add_suite(new Geary.RFC822.MessageTest().get_suite());
engine.add_suite(new Geary.RFC822.MessageDataTest().get_suite());