44import com .applitools .eyes .images .Eyes ;
55import com .applitools .imagetester .lib .Config ;
66
7+ import javax .imageio .ImageIO ;
8+ import java .awt .*;
79import java .awt .image .BufferedImage ;
810import java .io .File ;
11+ import java .io .IOException ;
912
1013public class ImageFileTest extends TestBase {
11- public ImageFileTest (File file , Config conf ) {
12- super (file , conf );
14+
15+ public ImageFileTest (File file , Config config ) {
16+ super (file , config );
1317 }
1418
1519 @ Override
1620 public TestResults run (Eyes eyes ) throws Exception {
17- BufferedImage image = getImage (file ());
21+ File actualFile = prepareImageFile (file ());
22+
23+ BufferedImage image = getImage (actualFile );
1824 eyes .open (appName (), name (), viewport (image ));
1925 eyes .check (
20- file () .getName (),
21- new ImagesCheckSettingsFactory (image , config (), viewport (image )).create ()
26+ actualFile .getName (),
27+ new ImagesCheckSettingsFactory (image , config (), viewport (image )).create ()
2228 );
23- image = null ;
24- return eyes .close (false );
29+ return eyes .close (true );
30+ }
31+
32+ private File prepareImageFile (File inputFile ) throws IOException {
33+ return isTiff (inputFile ) ? convertTiffToPng (inputFile ) : inputFile ;
34+ }
35+
36+ private boolean isTiff (File file ) {
37+ String name = file .getName ().toLowerCase ();
38+ return name .endsWith (".tif" ) || name .endsWith (".tiff" );
39+ }
40+
41+ private File convertTiffToPng (File tiffFile ) throws IOException {
42+ BufferedImage image = readImageAsRgb (tiffFile );
43+ File output = new File (tiffFile .getParent (), replaceExtension (tiffFile .getName (), "png" ));
44+ ImageIO .write (image , "png" , output );
45+ return output ;
46+ }
47+
48+ private BufferedImage readImageAsRgb (File file ) throws IOException {
49+ BufferedImage image = ImageIO .read (file );
50+ if (image == null ) {
51+ throw new IOException ("Unsupported image format or corrupt file: " + file .getAbsolutePath ());
52+ }
53+
54+ if (image .getType () != BufferedImage .TYPE_INT_RGB ) {
55+ BufferedImage rgbImage = new BufferedImage (
56+ image .getWidth (), image .getHeight (), BufferedImage .TYPE_INT_RGB
57+ );
58+ Graphics2D g = rgbImage .createGraphics ();
59+ g .drawImage (image , 0 , 0 , null );
60+ g .dispose ();
61+ return rgbImage ;
62+ }
63+
64+ return image ;
65+ }
66+
67+ private String replaceExtension (String filename , String newExt ) {
68+ int dotIndex = filename .lastIndexOf ('.' );
69+ return (dotIndex == -1 )
70+ ? filename + "." + newExt
71+ : filename .substring (0 , dotIndex ) + "." + newExt ;
2572 }
2673
2774 @ Override
2875 public boolean isEmpty () {
2976 return false ;
3077 }
31- }
78+ }
0 commit comments