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