Package com.rf1m.image2css.cmn.service

Source Code of com.rf1m.image2css.cmn.service.DefaultImageConversionServiceTest

/**
*
* Copyright (c) 2011 Matthew D Huckaby. All rights reservered.
* ------------------------------------------------------------------------------------
* Image2Css is licensed under Apache 2.0, please see LICENSE file.
*
* Use of this software indicates you agree to the following as well :
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* This product includes software developed by The Apache Software Foundation (http://www.apache.org/).
* ------------------------------------------------------------------------------------
*/
package com.rf1m.image2css.cmn.service;

import com.rf1m.image2css.domain.CssClass;
import com.rf1m.image2css.ioc.CommonObjectFactory;
import com.rf1m.image2css.cmn.util.bin.Base64Encoder;
import com.rf1m.image2css.cmn.util.file.FileUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import javax.swing.*;
import java.io.BufferedInputStream;
import java.io.File;
import java.net.URL;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnitRunner.class)
public class DefaultImageConversionServiceTest {
    final String cssClassTemplate = "cssClassTemplate";

    @Mock
    CommonObjectFactory commonObjectFactory;

    @Mock
    Base64Encoder base64Encoder;

    @Mock
    FileUtils fileUtils;

    DefaultImageConversionService defaultImageConversionService;

    @Before
    public void before() {
        defaultImageConversionService = spy(new DefaultImageConversionService(fileUtils, base64Encoder, commonObjectFactory, cssClassTemplate));
    }

    @Test
    public void defaultImageConversionServiceShouldConvertFileToBase64EncodedBytes() throws Exception {
        final String filename = "the.file.gif";
        final String fileExtension = "gif";
        final String cssClassName = "the_file_gif";
        final String cssEntry = "cssEntry";
        final String base64EncodedBytes = "base64EncodedBytes";
        final byte[] bytes = {01};

        final File file = mock(File.class);
        final Pair<Integer, Integer> dimension = mock(Pair.class);
        final Pair<String, String> filenameAndExtension = mock(Pair.class);
        final CssClass cssClass = mock(CssClass.class);

        doNothing()
            .when(defaultImageConversionService)
            .validateFile(file);

        doReturn(filenameAndExtension)
            .when(defaultImageConversionService)
            .validateFilenameAndExtension(file);

        when(filenameAndExtension.getLeft())
            .thenReturn(filename);

        when(filenameAndExtension.getRight())
            .thenReturn(fileExtension);

        doReturn(cssClassName)
            .when(defaultImageConversionService)
            .determineCssClassName(filename);

        doReturn(bytes)
            .when(defaultImageConversionService)
            .getFileBytes(file);

        when(base64Encoder.base64EncodeBytes(bytes))
            .thenReturn(base64EncodedBytes);

        doReturn(dimension)
            .when(defaultImageConversionService)
            .getImageDimension(bytes);

        doReturn(cssEntry)
            .when(defaultImageConversionService)
            .determineCssEntry(cssClassName, fileExtension, base64EncodedBytes, dimension);

        when(commonObjectFactory.newCssClass(cssClassName, cssEntry))
            .thenReturn(cssClass);

        final CssClass result = defaultImageConversionService.convert(file);

        assertThat(result, is(cssClass));

        final InOrder inOrder = inOrder(file, defaultImageConversionService, fileUtils, base64Encoder, commonObjectFactory);

        inOrder.verify(defaultImageConversionService, times(1))
            .validateFile(file);

        inOrder.verify(defaultImageConversionService, times(1))
            .validateFilenameAndExtension(file);

        inOrder.verify(defaultImageConversionService, times(1))
            .determineCssClassName(filename);

        inOrder.verify(defaultImageConversionService, times(1))
            .getFileBytes(file);

        inOrder.verify(base64Encoder, times(1))
            .base64EncodeBytes(bytes);

        inOrder.verify(defaultImageConversionService, times(1))
            .getImageDimension(bytes);

        inOrder.verify(defaultImageConversionService, times(1))
            .determineCssEntry(cssClassName, fileExtension, base64EncodedBytes, dimension);

        inOrder.verify(commonObjectFactory, times(1))
            .newCssClass(cssClassName, cssEntry);
    }

    @Test
    public void shouldReturnPairWithLeftWidthAndRightHeightOfImageBasedOnBytes() {
        final Pair<Integer, Integer> dimension = mock(Pair.class);
        final ImageIcon imageIcon = mock(ImageIcon.class);

        final int width = 1;
        final int height = 2;
        final byte[] bytes = {01};

        when(commonObjectFactory.newImageIcon(bytes))
            .thenReturn(imageIcon);

        when(imageIcon.getIconWidth())
            .thenReturn(width);

        when(imageIcon.getIconHeight())
            .thenReturn(height);

        when(commonObjectFactory.newPair(width, height))
            .thenReturn(dimension);

        final Pair<Integer, Integer> result = defaultImageConversionService.getImageDimension(bytes);

        assertThat(result, is(dimension));

        verify(commonObjectFactory, times(1))
            .newImageIcon(bytes);

        verify(imageIcon, times(1))
            .getIconWidth();

        verify(imageIcon, times(1))
            .getIconHeight();

        verify(commonObjectFactory, times(1))
            .newPair(width, height);
    }

    @Test
    public void shouldConvertFilename() {
        final String before = "a\\b/c.d";
        final String expected = "a_b_c_d";

        final String result = defaultImageConversionService.determineCssClassName(before);

        assertThat(result, is(expected));
    }

    @Test
    public void convertUrlShouldConvertFileToBase64EncodedBytes() throws Exception {
        final URL url = new URL("http://a.fsdn.com/sd/topics/android_64.png");
        final String filename = "/sd/topics/android_64.png";
        final String fileExtension = "png";
        final String cssClassName = "android_64_png";
        final String cssEntry = "cssEntry";
        final String base64EncodedBytes = "base64EncodedBytes";
        final byte[] bytes = {01};

        final BufferedInputStream bufferedInputStream = mock(BufferedInputStream.class);
        final Pair<Integer, Integer> dimension = mock(Pair.class);
        final Pair<String, String> filenameAndExtension = mock(Pair.class);
        final CssClass cssClass = mock(CssClass.class);

        doNothing()
            .when(defaultImageConversionService)
            .validateUrl(url);

        doReturn(filenameAndExtension)
            .when(defaultImageConversionService)
            .validateFilenameAndExtension(url);

        when(filenameAndExtension.getLeft())
            .thenReturn(filename);

        when(filenameAndExtension.getRight())
            .thenReturn(fileExtension);

        doReturn(cssClassName)
            .when(defaultImageConversionService)
            .determineCssClassName(filename);

        when(commonObjectFactory.newBufferedInputStream(any(URL.class)))
            .thenReturn(bufferedInputStream);

        doReturn(bytes)
            .when(defaultImageConversionService)
            .readInputStreamToBytes(bufferedInputStream);

        when(base64Encoder.base64EncodeBytes(bytes))
            .thenReturn(base64EncodedBytes);

        doReturn(dimension)
            .when(defaultImageConversionService)
            .getImageDimension(bytes);

        doReturn(cssEntry)
            .when(defaultImageConversionService)
            .determineCssEntry(cssClassName, fileExtension, base64EncodedBytes, dimension);

        when(commonObjectFactory.newCssClass(cssClassName, cssEntry))
            .thenReturn(cssClass);

        final CssClass result = defaultImageConversionService.convert(url);

        assertThat(result, is(cssClass));

        final InOrder inOrder = inOrder(defaultImageConversionService, fileUtils, base64Encoder, commonObjectFactory);

        inOrder.verify(defaultImageConversionService, times(1))
            .validateUrl(url);

        inOrder.verify(defaultImageConversionService, times(1))
            .validateFilenameAndExtension(url);

        inOrder.verify(defaultImageConversionService, times(1))
            .determineCssClassName(filename);

        inOrder.verify(commonObjectFactory, times(1))
            .newBufferedInputStream(any(URL.class));

        inOrder.verify(defaultImageConversionService, times(1))
            .readInputStreamToBytes(bufferedInputStream);

        inOrder.verify(base64Encoder, times(1))
            .base64EncodeBytes(bytes);

        inOrder.verify(defaultImageConversionService, times(1))
            .getImageDimension(bytes);

        inOrder.verify(defaultImageConversionService, times(1))
            .determineCssEntry(cssClassName, fileExtension, base64EncodedBytes, dimension);

        inOrder.verify(commonObjectFactory, times(1))
            .newCssClass(cssClassName, cssEntry);
    }

}
TOP

Related Classes of com.rf1m.image2css.cmn.service.DefaultImageConversionServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.