package org.robolectric.shadows;
import android.webkit.MimeTypeMap;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Shadows;
import org.robolectric.TestRunners;
import static org.junit.Assert.*;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowMimeTypeMapTest {
private static final String IMAGE_EXTENSION = "jpg";
private static final String VIDEO_EXTENSION = "mp4";
private static final String VIDEO_MIMETYPE = "video/mp4";
private static final String IMAGE_MIMETYPE = "image/jpeg";
@Test
public void shouldResetStaticStateBetweenTests() throws Exception {
assertFalse(MimeTypeMap.getSingleton().hasExtension(VIDEO_EXTENSION));
shadowOf(MimeTypeMap.getSingleton()).addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
}
@Test
public void shouldResetStaticStateBetweenTests_anotherTime() throws Exception {
assertFalse(MimeTypeMap.getSingleton().hasExtension(VIDEO_EXTENSION));
shadowOf(MimeTypeMap.getSingleton()).addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
}
@Test
public void getSingletonShouldAlwaysReturnSameInstance() {
MimeTypeMap firstInstance = MimeTypeMap.getSingleton();
MimeTypeMap secondInstance = MimeTypeMap.getSingleton();
assertSame(firstInstance, secondInstance);
}
@Test
public void byDefaultThereShouldBeNoMapping() {
assertFalse(MimeTypeMap.getSingleton().hasExtension(VIDEO_EXTENSION));
assertFalse(MimeTypeMap.getSingleton().hasExtension(IMAGE_EXTENSION));
}
@Test
public void addingMappingShouldWorkCorrectly() {
ShadowMimeTypeMap shadowMimeTypeMap = Shadows.shadowOf(MimeTypeMap.getSingleton());
shadowMimeTypeMap.addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
shadowMimeTypeMap.addExtensionMimeTypMapping(IMAGE_EXTENSION, IMAGE_MIMETYPE);
assertTrue(MimeTypeMap.getSingleton().hasExtension(VIDEO_EXTENSION));
assertTrue(MimeTypeMap.getSingleton().hasExtension(IMAGE_EXTENSION));
assertTrue(MimeTypeMap.getSingleton().hasMimeType(VIDEO_MIMETYPE));
assertTrue(MimeTypeMap.getSingleton().hasMimeType(IMAGE_MIMETYPE));
assertEquals(IMAGE_EXTENSION, MimeTypeMap.getSingleton().getExtensionFromMimeType(IMAGE_MIMETYPE));
assertEquals(VIDEO_EXTENSION, MimeTypeMap.getSingleton().getExtensionFromMimeType(VIDEO_MIMETYPE));
assertEquals(IMAGE_MIMETYPE, MimeTypeMap.getSingleton().getMimeTypeFromExtension(IMAGE_EXTENSION));
assertEquals(VIDEO_MIMETYPE, MimeTypeMap.getSingleton().getMimeTypeFromExtension(VIDEO_EXTENSION));
}
@Test
public void clearMappingsShouldRemoveAllMappings() {
ShadowMimeTypeMap shadowMimeTypeMap = Shadows.shadowOf(MimeTypeMap.getSingleton());
shadowMimeTypeMap.addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
shadowMimeTypeMap.addExtensionMimeTypMapping(IMAGE_EXTENSION, IMAGE_MIMETYPE);
shadowMimeTypeMap.clearMappings();
assertFalse(MimeTypeMap.getSingleton().hasExtension(VIDEO_EXTENSION));
assertFalse(MimeTypeMap.getSingleton().hasExtension(IMAGE_EXTENSION));
assertFalse(MimeTypeMap.getSingleton().hasMimeType(VIDEO_MIMETYPE));
assertFalse(MimeTypeMap.getSingleton().hasExtension(IMAGE_MIMETYPE));
}
@Test
public void unknownExtensionShouldProvideNothing() {
ShadowMimeTypeMap shadowMimeTypeMap = Shadows.shadowOf(MimeTypeMap.getSingleton());
shadowMimeTypeMap.addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
shadowMimeTypeMap.addExtensionMimeTypMapping(IMAGE_EXTENSION, IMAGE_MIMETYPE);
assertFalse(MimeTypeMap.getSingleton().hasExtension("foo"));
assertNull(MimeTypeMap.getSingleton().getMimeTypeFromExtension("foo"));
}
@Test
public void unknownMimeTypeShouldProvideNothing() {
ShadowMimeTypeMap shadowMimeTypeMap = Shadows.shadowOf(MimeTypeMap.getSingleton());
shadowMimeTypeMap.addExtensionMimeTypMapping(VIDEO_EXTENSION, VIDEO_MIMETYPE);
shadowMimeTypeMap.addExtensionMimeTypMapping(IMAGE_EXTENSION, IMAGE_MIMETYPE);
assertFalse(MimeTypeMap.getSingleton().hasMimeType("foo/bar"));
assertNull(MimeTypeMap.getSingleton().getExtensionFromMimeType("foo/bar"));
}
}