1 package com.atlassian.core.util;
2
3 import org.apache.commons.io.IOUtils;
4
5 import java.io.InputStream;
6
7 import junit.framework.TestCase;
8
9 public class TestImageInfo extends TestCase
10 {
11 public void testCheckJPeg() throws Exception
12 {
13 assertTrue(checkImage("/image.jpg"));
14 }
15
16 public void testCheckPng() throws Exception
17 {
18 assertTrue(checkImage("/image.png"));
19 }
20
21 public void testCheckGif() throws Exception
22 {
23 assertTrue(checkImage("/image.gif"));
24 }
25
26 public void testCheckJPegWithInvalidData() throws Exception
27 {
28 assertFalse(checkImage("/image_invalid.jpg"));
29 }
30
31 public void testAnInvalidPpmFileDoesNotLeadToEndlessLoops() throws Exception
32 {
33 assertFalse(checkImage("/image_invalid.ppm"));
34 }
35
36 public void testPngWithCorruptedMetaData() throws Exception
37 {
38
39 assertTrue(checkImage("/image_corrupted.png"));
40 }
41
42 public void testPngWithJiraTag() throws Exception
43 {
44 assertTrue(checkImage("/image_tagged.png", "jira-system-image-type"));
45 assertFalse(checkImage("/image_tagged.png", "jira-system-image-typex"));
46 assertFalse(checkImage("/image_tagged.png", "jira-system-image-typ"));
47 assertFalse(checkImage("/image_without_comment.png", "jira-system-image-type"));
48 }
49
50 public void testTruncatedPng() throws Exception
51 {
52
53 assertFalse(checkImage("/image_truncated.png", true));
54 }
55
56 private boolean checkImage(String filename)
57 {
58 return checkImage(filename, null);
59 }
60
61 private boolean checkImage(String filename, boolean validatePngMetadata)
62 {
63 return checkImage(filename, null, validatePngMetadata);
64 }
65
66 private boolean checkImage(String filename, String expectedKeyword)
67 {
68 return checkImage(filename, expectedKeyword, false);
69 }
70
71 private boolean checkImage(String filename, String expectedKeyword, boolean validatePngMetadata)
72 {
73 ImageInfo imageInfo = new ImageInfo();
74 if (validatePngMetadata)
75 {
76 imageInfo.setValidatePngMetadata();
77 }
78 InputStream stream = this.getClass().getResourceAsStream(filename);
79 try
80 {
81 if(expectedKeyword != null)
82 {
83 imageInfo.setExpectedPngTextKeyword(expectedKeyword);
84 }
85 imageInfo.setInput(stream);
86 return imageInfo.check();
87 }
88 finally
89 {
90 IOUtils.closeQuietly(stream);
91 }
92 }
93
94 }