Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.webkit.MimeTypeMap;
      4 import com.xtremelabs.robolectric.Robolectric;
      5 import com.xtremelabs.robolectric.internal.Implementation;
      6 import com.xtremelabs.robolectric.internal.Implements;
      7 
      8 import java.util.HashMap;
      9 import java.util.Map;
     10 
     11 import 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)
     17 public 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