192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki/* 292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Copyright (C) 2011 The Android Open Source Project 392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * 492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * you may not use this file except in compliance with the License. 692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * You may obtain a copy of the License at 792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * 892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * 1092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Unless required by applicable law or agreed to in writing, software 1192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 1292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * See the License for the specific language governing permissions and 1492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * limitations under the License. 1592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki */ 1692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 1792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukipackage com.android.emailcommon.utility; 1892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 1992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukiimport com.android.emailcommon.provider.EmailContent; 2092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 2192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukiimport android.net.Uri; 2292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukiimport android.test.AndroidTestCase; 233555dc03bf2243dc275c9c832702abbee3b64387Jerry Xieimport android.test.suitebuilder.annotation.SmallTest; 2492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 2592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukiimport java.io.File; 2692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 273555dc03bf2243dc275c9c832702abbee3b64387Jerry Xie@SmallTest 2892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onukipublic class AttachmentUtilitiesTests extends AndroidTestCase { 2992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki /** 3092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Test static inferMimeType() 3192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * From the method doc: 3292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * 3392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * <pre> 3492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * |---------------------------------------------------------| 3592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | E X T E N S I O N | 3692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * |---------------------------------------------------------| 3792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | .eml | known(.png) | unknown(.abc) | none | 3892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | M |-----------------------------------------------------------------------| 3992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | I | none | msg/rfc822 | image/png | app/abc | app/oct-str | 4092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | M |-------------| (always | | | | 4192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | E | app/oct-str | overrides | | | | 4292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | T |-------------| | |-----------------------------| 4392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | Y | text/plain | | | text/plain | 4492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | P |-------------| |-------------------------------------------| 4592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * | E | any/type | | any/type | 4692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * |---|-----------------------------------------------------------------------| 4792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * </pre> 4892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * 4992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Also, all results should be in lowercase. 5092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki */ 5192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki public void testInferMimeType() { 5292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String DEFAULT_MIX = "Application/Octet-stream"; 5392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String DEFAULT_LOWER = DEFAULT_MIX.toLowerCase(); 5492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String TEXT_PLAIN = "text/plain"; 5592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String TYPE_IMG_PNG = "image/png"; 5692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_PNG = "myfile.false.pNg"; 5792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_ABC = "myfile.false.aBc"; 5892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_NO_EXT = "myfile"; 5992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 6092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // .eml files always override mime type 6192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("message/rfc822", AttachmentUtilities.inferMimeType("a.eml", null)); 6292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("message/rfc822", AttachmentUtilities.inferMimeType("a.eml", "")); 6392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("message/rfc822", 6492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType("a.eml", DEFAULT_LOWER)); 6592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("message/rfc822", 6692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType("a.eMl", TEXT_PLAIN)); 6792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("message/rfc822", 6892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType("a.eml", TYPE_IMG_PNG)); 6992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 7092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // Non-generic, non-empty mime type; return it 7192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("mime/type", AttachmentUtilities.inferMimeType(FILE_PNG, "Mime/TyPe")); 7292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("mime/type", AttachmentUtilities.inferMimeType(FILE_ABC, "Mime/TyPe")); 7392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("mime/type", 7492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType(FILE_NO_EXT, "Mime/TyPe")); 7592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("mime/type", AttachmentUtilities.inferMimeType(null, "Mime/TyPe")); 7692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("mime/type", AttachmentUtilities.inferMimeType("", "Mime/TyPe")); 7792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 7892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // Recognizable file extension; return known type 7992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("image/png", AttachmentUtilities.inferMimeType(FILE_PNG, null)); 8092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("image/png", AttachmentUtilities.inferMimeType(FILE_PNG, "")); 8192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("image/png", AttachmentUtilities.inferMimeType(FILE_PNG, DEFAULT_MIX)); 8292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("image/png", AttachmentUtilities.inferMimeType(FILE_PNG, TEXT_PLAIN)); 8392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 8492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // Unrecognized and non-empty file extension, non-"text/plain" type; generate mime type 8592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("application/abc", AttachmentUtilities.inferMimeType(FILE_ABC, null)); 8692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("application/abc", AttachmentUtilities.inferMimeType(FILE_ABC, "")); 8792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("application/abc", 8892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType(FILE_ABC, DEFAULT_MIX)); 8992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 9092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // Unrecognized and empty file extension, non-"text/plain" type; return "app/octet-stream" 9192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(DEFAULT_LOWER, AttachmentUtilities.inferMimeType(FILE_NO_EXT, null)); 9292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(DEFAULT_LOWER, AttachmentUtilities.inferMimeType(FILE_NO_EXT, "")); 9392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(DEFAULT_LOWER, 9492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType(FILE_NO_EXT, DEFAULT_MIX)); 9592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(DEFAULT_LOWER, AttachmentUtilities.inferMimeType(null, null)); 9692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(DEFAULT_LOWER, AttachmentUtilities.inferMimeType("", "")); 9792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 9892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // Unrecognized or empty file extension, "text/plain" type; return "text/plain" 9992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(TEXT_PLAIN, AttachmentUtilities.inferMimeType(FILE_ABC, TEXT_PLAIN)); 10092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(TEXT_PLAIN, 10192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.inferMimeType(FILE_NO_EXT, TEXT_PLAIN)); 10292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(TEXT_PLAIN, AttachmentUtilities.inferMimeType(null, TEXT_PLAIN)); 10392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals(TEXT_PLAIN, AttachmentUtilities.inferMimeType("", TEXT_PLAIN)); 10492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki } 10592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 10692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki /** 10792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki * Text extension extractor 10892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki */ 10992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki public void testGetFilenameExtension() { 11092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_NO_EXTENSION = "myfile"; 11192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_EXTENSION = "myfile.pDf"; 11292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki final String FILE_TWO_EXTENSIONS = "myfile.false.AbC"; 11392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 11492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertNull(AttachmentUtilities.getFilenameExtension(null)); 11592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertNull(AttachmentUtilities.getFilenameExtension("")); 11692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertNull(AttachmentUtilities.getFilenameExtension(FILE_NO_EXTENSION)); 11792cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 11892cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("pdf", AttachmentUtilities.getFilenameExtension(FILE_EXTENSION)); 11992cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki assertEquals("abc", AttachmentUtilities.getFilenameExtension(FILE_TWO_EXTENSIONS)); 12092cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki 12192cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // The API makes no claim as to how these are handled (it probably should), 12292cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki // but make sure that they don't crash. 12392cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.getFilenameExtension("filename."); 12492cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki AttachmentUtilities.getFilenameExtension(".extension"); 12592cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki } 12692cbc9369ba7dc80ebd7190bf99b99e9c43b8f66Makoto Onuki} 127