@Test
public void testJPEG() throws Exception {

    Metadata metadata = new Metadata();
    metadata.set(Metadata.CONTENT_TYPE, "image/jpeg");
    try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_EXIF.jpg")) {
        parser.parse(stream, new DefaultHandler(), metadata, new ParseContext());
    }
    // Core EXIF/TIFF tags
    assertEquals("3888", metadata.get(Metadata.IMAGE_WIDTH));
    assertEquals("2592", metadata.get(Metadata.IMAGE_LENGTH));
    assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE));
    assertEquals(null, metadata.get(Metadata.SAMPLES_PER_PIXEL));
    assertEquals("6.25E-4", metadata.get(Metadata.EXPOSURE_TIME)); // 1/1600
    assertEquals("5.6", metadata.get(Metadata.F_NUMBER));
    assertEquals("false", metadata.get(Metadata.FLASH_FIRED));
    assertEquals("194.0", metadata.get(Metadata.FOCAL_LENGTH));
    assertEquals("400", metadata.get(Metadata.ISO_SPEED_RATINGS));
    assertEquals("Canon", metadata.get(Metadata.EQUIPMENT_MAKE));
    assertEquals("Canon EOS 40D", metadata.get(Metadata.EQUIPMENT_MODEL));
    assertEquals("Adobe Photoshop CS3 Macintosh", metadata.get(Metadata.SOFTWARE));
    assertEquals(null, metadata.get(Metadata.ORIENTATION)); // Not present
    assertEquals("240.0", metadata.get(Metadata.RESOLUTION_HORIZONTAL));
    assertEquals("240.0", metadata.get(Metadata.RESOLUTION_VERTICAL));
    assertEquals("Inch", metadata.get(Metadata.RESOLUTION_UNIT));
    // Check that EXIF/TIFF tags come through with their raw values too
    // (This may be removed for Tika 1.0, as we support more of them
    //  with explicit Metadata entries)
    assertEquals("Canon EOS 40D", metadata.get("Exif IFD0:Model"));
    // Common tags
    assertEquals("2009-10-02T23:02:49", metadata.get(Metadata.LAST_MODIFIED));
    assertEquals("Date/Time Original for when the photo was taken, unspecified time zone",
            "2009-08-11T09:09:45", metadata.get(TikaCoreProperties.CREATED));
    List<String> keywords = Arrays.asList(metadata.getValues(TikaCoreProperties.SUBJECT));
    assertTrue("'canon-55-250' expected in " + keywords, keywords.contains("canon-55-250"));
    assertTrue("'moscow-birds' expected in " + keywords, keywords.contains("moscow-birds"));
    assertTrue("'serbor' expected in " + keywords, keywords.contains("serbor"));
    assertFalse(keywords.contains("canon-55-250 moscow-birds serbor"));
}