/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.imageio.ImageIO;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import junit.framework.TestCase;
import com.enonic.cms.core.content.binary.BinaryData;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: 9/20/11
* Time: 2:12 PM
*/
public class ContentImageUtilTest
extends TestCase
{
private final int createOriginalImage = 0;
@Test
public void testScale1600Image()
throws Exception
{
final String imageSize = "1600";
BufferedImage image = getImageFromFile( imageSize );
List<BinaryData> scaledImages = ContentImageUtil.createStandardSizeImages( image, "jpg", createFileName( imageSize ) );
assertTrue( image.getWidth() == new Integer( imageSize ) );
assertEquals( "Wrong number of scaled images", 3 + createOriginalImage, scaledImages.size() );
checkCreatedImages( scaledImages, true, true, true, false );
}
@Test
public void testScaleExtraLargeImage()
throws Exception
{
final String imageSize = "2200";
BufferedImage image = getImageFromFile( imageSize );
List<BinaryData> scaledImages = ContentImageUtil.createStandardSizeImages( image, "jpg", createFileName( imageSize ) );
assertTrue( image.getWidth() == new Integer( imageSize ) );
assertEquals( "Wrong number of scaled images", 4 + createOriginalImage, scaledImages.size() );
checkCreatedImages( scaledImages, true, true, true, true );
}
@Test
public void testScaleLargeImage()
throws Exception
{
final String imageSize = "1000";
BufferedImage image = getImageFromFile( imageSize );
List<BinaryData> scaledImages = ContentImageUtil.createStandardSizeImages( image, "jpg", createFileName( imageSize ) );
assertTrue( image.getWidth() == new Integer( imageSize ) );
assertEquals( "Wrong number of scaled images", 2 + createOriginalImage, scaledImages.size() );
checkCreatedImages( scaledImages, true, true, false, false );
}
@Test
public void testScaleMediumImage()
throws Exception
{
final String imageSize = "500";
BufferedImage image = getImageFromFile( imageSize );
List<BinaryData> scaledImages = ContentImageUtil.createStandardSizeImages( image, "jpg", createFileName( imageSize ) );
assertTrue( image.getWidth() == new Integer( imageSize ) );
assertEquals( "Wrong number of scaled images", 1 + createOriginalImage, scaledImages.size() );
checkCreatedImages( scaledImages, true, false, false, false );
}
@Test
public void testScaleSmallImage()
throws Exception
{
final String imageSize = "200";
BufferedImage image = getImageFromFile( imageSize );
List<BinaryData> scaledImages = ContentImageUtil.createStandardSizeImages( image, "jpg", createFileName( imageSize ) );
assertTrue( image.getWidth() == 200 );
assertEquals( "Wrong number of scaled images", 0 + createOriginalImage, scaledImages.size() );
checkCreatedImages( scaledImages, false, false, false, false );
}
private void checkCreatedImages( List<BinaryData> scaledImages, boolean createSmall, boolean createMedium, boolean createLarge,
boolean createExtraLarge )
throws Exception
{
boolean smallCreated = false, mediumCreated = false, largeCreated = false, extraLargeCreated = false;
for ( BinaryData scaledImageData : scaledImages )
{
BufferedImage scaledImage = ImageUtil.readImage( scaledImageData.data );
if ( checkBinaryData( scaledImageData, "small" ) )
{
smallCreated = true;
assertEquals( ContentImageUtil.STANDARD_WIDTH_SIZES[0], scaledImage.getWidth() );
}
if ( checkBinaryData( scaledImageData, "medium" ) )
{
mediumCreated = true;
assertEquals( ContentImageUtil.STANDARD_WIDTH_SIZES[1], scaledImage.getWidth() );
}
if ( checkBinaryData( scaledImageData, "large" ) )
{
largeCreated = true;
assertEquals( ContentImageUtil.STANDARD_WIDTH_SIZES[2], scaledImage.getWidth() );
}
if ( checkBinaryData( scaledImageData, "extra-large" ) )
{
extraLargeCreated = true;
assertEquals( ContentImageUtil.STANDARD_WIDTH_SIZES[3], scaledImage.getWidth() );
}
}
assertEquals( createSmall, smallCreated );
assertEquals( createMedium, mediumCreated );
assertEquals( createLarge, largeCreated );
assertEquals( createExtraLarge, extraLargeCreated );
}
private boolean checkBinaryData( BinaryData scaledImage, String expectedPattern )
{
return scaledImage.fileName.contains( expectedPattern ) && expectedPattern.equals( scaledImage.label );
}
private InputStream loadImage( String fileName )
throws IOException
{
ClassPathResource resource = new ClassPathResource( fileName );
return resource.getInputStream();
}
private String createFileName( String fileName )
{
return ContentImageUtilTest.class.getName().replace( ".", "/" ) + "-" + fileName + "px.jpg";
}
private BufferedImage getImageFromFile( String imageSize )
{
try
{
final String fileName = createFileName( imageSize );
return ImageIO.read( loadImage( fileName ) );
}
catch ( IOException e )
{
fail( "Image not found: " + createFileName( imageSize ) );
}
return null;
}
}