/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CATS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.provider; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Properties; import javax.imageio.ImageIO; import javax.xml.bind.JAXBException; import org.easymock.EasyMock; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.comcast.cats.image.ImageCompareRegionInfo; import com.comcast.cats.image.RegionInfo; import com.comcast.cats.provider.exceptions.ImageCompareException; import com.comcast.cats.provider.factory.impl.ImageCompareProviderFactoryImpl; import com.comcast.cats.provider.impl.ImageCompareProviderImpl; import com.comcast.cats.provider.impl.RegionLocatorProviderImpl; public class ImageCompareProviderImplTest { ImageCompareProviderImpl icProvider = null; VideoProvider videoProvider; BufferedImage refImage = null; BufferedImage currentImage = null; BufferedImage nonMatchingCurrentImage = null; RegionInfo regionInfo1 = null; RegionInfo regionInfo2 = null; ArrayList<RegionInfo> regionInfoList = null; Dimension expectedReferenceDimension; RegionLocatorProviderImpl regionLocatorImpl; private final static String filepathCurrentJPG = "src/test/resources/currentImage.JPG"; private final static String filepathRefJPG = "src/test/resources/RefImage.JPG"; private final static String filepathNonMatchingJPG = "src/test/resources/NonMatchingCurrentImage.JPG"; private final static String filepathRefXML = "src/test/resources/RefImage.xml"; private final static String region1 = "Monica-Face"; private final static String region2 = "Chandler-Face"; private final static String filepathGuideJPG = "src/test/resources/guide.jpg"; private final static String filepathGuideXML = "src/test/resources/guide.xml"; private final static String region_xfinity = "xfinity"; @Before public void setUp() throws Exception { File file1 = new File(filepathRefJPG); try { refImage = ImageIO.read(file1); } catch (IOException e) { e.printStackTrace(); } expectedReferenceDimension = new Dimension(refImage.getWidth(), refImage.getHeight()); File file2 = new File(filepathCurrentJPG); try { currentImage = ImageIO.read(file2); } catch (IOException e) { e.printStackTrace(); } File file3 = new File(filepathNonMatchingJPG); try { nonMatchingCurrentImage = ImageIO.read(file3); } catch (IOException e) { e.printStackTrace(); } regionInfo1 = new ImageCompareRegionInfo(region1,30,30,70,60); regionInfo2 = new ImageCompareRegionInfo(region2,180,85,50,50); regionInfoList = new ArrayList<RegionInfo>(); regionInfoList.add(regionInfo1); regionInfoList.add(regionInfo2); regionLocatorImpl = new RegionLocatorProviderImpl(); videoProvider = EasyMock.createMock( VideoProvider.class ); Properties props = new Properties(); FileInputStream in = new FileInputStream("src/test/resources/test.properties"); props.load(in); icProvider = ( ImageCompareProviderImpl ) ImageCompareProviderFactoryImpl.getProvider( videoProvider ); icProvider = new ImageCompareProviderImpl(getClass(), videoProvider, 10, 10,props ); } @After public void tearDown() throws Exception { icProvider = null; videoProvider = null; refImage = null; currentImage = null; nonMatchingCurrentImage = null; regionInfo1 = null; regionInfo2 = null; regionInfoList = null; regionLocatorImpl = null; } @Test public void testIsImageOnScreenNow() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); try { Assert.assertTrue(icProvider.isImageOnScreenNow(refImage)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsImageOnScreenNowFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); try { Assert.assertFalse(icProvider.isImageOnScreenNow(refImage)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsImageOnScreenNowNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); try { Assert.assertFalse(icProvider.isImageOnScreenNow(null)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsSameImageOnScreenNow() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); Assert.assertTrue(icProvider.isSameImageOnScreenNow(filepathRefJPG)); } @Test public void testIsSameImageOnScreenNowFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.isSameImageOnScreenNow(filepathRefJPG)); } @Test public void testIsSameImageOnScreenNowNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.isSameImageOnScreenNow(null)); } @Test public void testIsRegionOnScreenNowImageCompareRegionInfo() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); RegionInfo regionInfo =null; try { regionInfo = regionLocatorImpl.getRegionInfo(filepathRefXML,region2); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertTrue(icProvider.isRegionOnScreenNow((ImageCompareRegionInfo)regionInfo)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsRegionOnScreenNowImageCompareRegionInfoFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); RegionInfo regionInfo =null; try { regionInfo = regionLocatorImpl.getRegionInfo(filepathRefXML,region2); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertFalse(icProvider.isRegionOnScreenNow((ImageCompareRegionInfo)regionInfo)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsRegionOnScreenNowImageCompareRegionInfoNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); RegionInfo regionInfo =null; try { regionInfo = regionLocatorImpl.getRegionInfo(filepathRefXML,region2); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertFalse(icProvider.isRegionOnScreenNow(null)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testIsRegionOnScreenNowString() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); Assert.assertTrue(icProvider.isRegionOnScreenNow(filepathRefXML,region2)); // Assert.assertTrue(icProvider.isRegionOnScreenNow("kkk.xml",region2)); //resource in jar } @Test public void testIsRegionOnScreenNowStringFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.isRegionOnScreenNow(filepathRefXML,region2)); } @Test public void testIsRegionOnScreenNowStringNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.isRegionOnScreenNow(null,region2)); } @Test public void testIsRegionOnScreenNowStringNullTest1() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.isRegionOnScreenNow(filepathRefXML,null)); } @Test public void testAreAllRegionsOnScreenNowListOfImageCompareRegionInfo() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { listRegionInfo =(ArrayList)regionLocatorImpl.getRegionInfo(filepathRefXML); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertTrue(icProvider.areAllRegionsOnScreenNow((ArrayList<ImageCompareRegionInfo>)listRegionInfo)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testAreAllRegionsOnScreenNowListOfImageCompareRegionInfoFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { listRegionInfo =(ArrayList)regionLocatorImpl.getRegionInfo(filepathRefXML); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertFalse(icProvider.areAllRegionsOnScreenNow((ArrayList<ImageCompareRegionInfo>)listRegionInfo)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testAreAllRegionsOnScreenNowListOfImageCompareRegionInfoNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { Assert.assertFalse(icProvider.areAllRegionsOnScreenNow(listRegionInfo)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testAreAllRegionsOnScreenNowString() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage); EasyMock.replay( videoProvider ); Assert.assertTrue(icProvider.areAllRegionsOnScreenNow(filepathRefXML)); // Assert.assertTrue(icProvider.areAllRegionsOnScreenNow("kkk.xml")); //resource in jar } @Test public void testAreAllRegionsOnScreenNowStringFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.areAllRegionsOnScreenNow(filepathRefXML)); } @Test public void testAreAllRegionsOnScreenNowStringNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); String imgXMLPath = null; Assert.assertFalse(icProvider.areAllRegionsOnScreenNow(imgXMLPath)); } @Test public void testWaitForImageOnScreen() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); try { Assert.assertTrue(icProvider.waitForImageOnScreen(refImage,1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForImageOnScreenFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); try { Assert.assertFalse(icProvider.waitForImageOnScreen(refImage,1000)); } catch ( ImageCompareException e ) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public void testWaitForImageOnScreenNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); try { Assert.assertFalse(icProvider.waitForImageOnScreen(null,1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForSameImage() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertTrue(icProvider.waitForSameImage(filepathRefJPG,1000)); // Assert.assertTrue(icProvider.waitForSameImage("kkk.JPG",1000)); //resource in jar } @Test public void testWaitForSameImageFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.waitForSameImage(filepathRefJPG,1000)); } @Test public void testWaitForSameImageNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage); EasyMock.replay( videoProvider ); String filePath = null; Assert.assertFalse(icProvider.waitForSameImage(filePath,1000)); } @Test public void testWaitForAllRegionsListOfImageCompareRegionInfoLong() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { listRegionInfo =(ArrayList)regionLocatorImpl.getRegionInfo(filepathRefXML); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertTrue(icProvider.waitForAllRegions(listRegionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForAllRegionsListOfImageCompareRegionInfoLongFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { listRegionInfo =(ArrayList)regionLocatorImpl.getRegionInfo(filepathRefXML); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertFalse(icProvider.waitForAllRegions(listRegionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForAllRegionsListOfImageCompareRegionInfoLongNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); ArrayList<ImageCompareRegionInfo> listRegionInfo = null; try { Assert.assertFalse(icProvider.waitForAllRegions(listRegionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForAllRegions() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertTrue(icProvider.waitForAllRegions(filepathRefXML, 1000)); // Assert.assertTrue(icProvider.waitForAllRegions("kkk.xml",1000)); //resource in jar } @Test public void testWaitForAllRegionsFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.waitForAllRegions(filepathRefXML, 1000)); } @Test public void testWaitForAllRegionsNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); String imgXMLPath = null; Assert.assertFalse(icProvider.waitForAllRegions(imgXMLPath, 1000)); } @Test public void testWaitForRegionImageCompareRegionInfoLong() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); ImageCompareRegionInfo regionInfo = null; try { regionInfo =(ImageCompareRegionInfo)regionLocatorImpl.getRegionInfo(filepathRefXML,region2); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertTrue(icProvider.waitForRegion(regionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForRegionImageCompareRegionInfoLongFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); ImageCompareRegionInfo regionInfo = null; try { regionInfo =(ImageCompareRegionInfo)regionLocatorImpl.getRegionInfo(filepathRefXML,region2); } catch (IOException e) { e.printStackTrace(); } try { Assert.assertFalse(icProvider.waitForRegion(regionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForRegionImageCompareRegionInfoLongNull() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); ImageCompareRegionInfo regionInfo = null; try { Assert.assertFalse(icProvider.waitForRegion(regionInfo, 1000)); } catch ( ImageCompareException e ) { Assert.fail(e.getMessage()); } } @Test public void testWaitForRegion() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(currentImage).anyTimes(); EasyMock.replay( videoProvider ); // Assert.assertTrue(icProvider.waitForRegion("kkk.xml",region2, 1000)); //resource in jar Assert.assertTrue(icProvider.waitForRegion(filepathRefXML,region2, 1000)); //resource in filedisk } @Test public void testWaitForRegionFail() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.waitForRegion(filepathRefXML,region2, 1000)); } @Test public void testWaitForRegionNullTest() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); String imgXMLPath = null; Assert.assertFalse(icProvider.waitForRegion(imgXMLPath,region2, 1000)); } @Test public void testWaitForRegionNullTest1() { EasyMock.expect(videoProvider.getVideoImage(expectedReferenceDimension)).andReturn(nonMatchingCurrentImage).anyTimes(); EasyMock.replay( videoProvider ); Assert.assertFalse(icProvider.waitForRegion(filepathRefXML,null, 1000)); } @Test public void testSaveImageRegion() { try { File imgFile = new File( filepathGuideJPG ); icProvider.saveImageRegion( imgFile.getAbsolutePath(), region_xfinity, 143, 67, 30, 33, 85 ); ImageCompareRegionInfo icRegInfo = (ImageCompareRegionInfo) icProvider.getRegionInfo( filepathGuideXML, region_xfinity); Assert.assertNotNull( icRegInfo ); Assert.assertEquals( new Integer(30), icRegInfo.getX() ); } catch ( IOException e ) { Assert.fail( e.getMessage() ); } catch ( JAXBException e ) { Assert.fail( e.getMessage() ); } } @Test public void testSaveImageRegionFail() { boolean testPassed = false; try { icProvider.saveImageRegion( filepathGuideJPG, null, 143, 67, 30, 33 ); } catch (IllegalArgumentException e) { testPassed = true; } catch ( IOException e ) { Assert.fail( e.getMessage() ); } catch ( JAXBException e ) { Assert.fail( e.getMessage() ); } Assert.assertTrue( testPassed ); } }