1d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 3d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport android.webkit.MimeTypeMap; 4d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport com.xtremelabs.robolectric.Robolectric; 5d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport com.xtremelabs.robolectric.internal.Implementation; 6d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport com.xtremelabs.robolectric.internal.Implements; 7d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 8d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport java.util.HashMap; 9d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport java.util.Map; 10d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 11d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 12d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 13d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz/** 14d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz * Shadow for {@code MimeTypeMap} that allows custom extension <-> mimetype mapping to be set up by tests. 15d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz */ 16d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz@Implements(MimeTypeMap.class) 17d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzpublic class ShadowMimeTypeMap { 18d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 19d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz Map<String, String> extensionToMimeTypeMap = new HashMap<String, String>(); 20d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz Map<String, String> mimeTypeToExtensionMap = new HashMap<String, String>(); 21d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 22d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz static MimeTypeMap sSingleton = null; 23d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz static Object sSingletonLock = new Object(); 24d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 25d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz @Implementation 26d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public static MimeTypeMap getSingleton() { 27d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz if (sSingleton == null) { 28d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz synchronized (sSingletonLock) { 29d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz if (sSingleton == null) { 30d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz sSingleton = Robolectric.newInstanceOf(MimeTypeMap.class); 31d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 32d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 33d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 34d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 35d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return sSingleton; 36d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 37d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 38d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public static void reset() { 39d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz shadowOf(getSingleton()).clearMappings(); 40d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 41d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 42d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz @Implementation 43d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public String getMimeTypeFromExtension(String extension) { 44d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz if (extensionToMimeTypeMap.containsKey(extension)) 45d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return extensionToMimeTypeMap.get(extension); 46d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 47d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return null; 48d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 49d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 50d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz @Implementation 51d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public String getExtensionFromMimeType(String mimeType) { 52d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz if (mimeTypeToExtensionMap.containsKey(mimeType)) 53d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return mimeTypeToExtensionMap.get(mimeType); 54d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 55d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return null; 56d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 57d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 58d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public void addExtensionMimeTypMapping(String extension, String mimeType) { 59d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz extensionToMimeTypeMap.put(extension, mimeType); 60d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz mimeTypeToExtensionMap.put(mimeType, extension); 61d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 62d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 63d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public void clearMappings() { 64d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz extensionToMimeTypeMap.clear(); 65d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz mimeTypeToExtensionMap.clear(); 66d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 67d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 68d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz @Implementation 69d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public boolean hasExtension(String extension) { 70d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return extensionToMimeTypeMap.containsKey(extension); 71d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 72d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz 73d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz @Implementation 74d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz public boolean hasMimeType(String mimeType) { 75d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz return mimeTypeToExtensionMap.containsKey(mimeType); 76d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz } 77d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz} 78