001 /* 002 * Created on Oct 20, 2010 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 005 * the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 011 * specific language governing permissions and limitations under the License. 012 * 013 * Copyright @2010-2011 the original author or authors. 014 */ 015 package org.fest.assertions.api; 016 017 import java.awt.Dimension; 018 import java.awt.image.BufferedImage; 019 import java.util.Comparator; 020 021 import org.fest.assertions.data.Offset; 022 import org.fest.assertions.internal.Images; 023 import org.fest.util.VisibleForTesting; 024 025 /** 026 * Assertion methods for images. 027 * <p> 028 * To create an instance of this class, invoke <code>{@link Assertions#assertThat(BufferedImage)}</code>. 029 * </p> 030 * 031 * @author Yvonne Wang 032 * @author Alex Ruiz 033 * @author Ansgar Konermann 034 * @author Joel Costigliola 035 */ 036 public class ImageAssert extends AbstractAssert<ImageAssert, BufferedImage> { 037 038 @VisibleForTesting 039 Images images = Images.instance(); 040 041 protected ImageAssert(BufferedImage actual) { 042 super(actual, ImageAssert.class); 043 } 044 045 /** 046 * Verifies that the actual image is equal to the given one. Two images are equal if: 047 * <ol> 048 * <li>they have equal size</li> 049 * <li>the the RGB values of the color at each pixel are equal</li> 050 * </ol> 051 * @param expected the given image to compare the actual image to. 052 * @return {@code this} assertion object. 053 * @throws AssertionError if the actual image is not equal to the given one. 054 */ 055 @Override 056 public ImageAssert isEqualTo(BufferedImage expected) { 057 images.assertEqual(info, actual, expected); 058 return this; 059 } 060 061 /** 062 * Verifies that the actual image is equal to the given one. Two images are equal if: 063 * <ol> 064 * <li>they have the same size</li> 065 * <li>the difference between the RGB values of the color at each pixel is less than or equal to the given offset</li> 066 * </ol> 067 * @param expected the given image to compare the actual image to. 068 * @param offset helps decide if the color of two pixels are similar: two pixels that are identical to the human eye 069 * may still have slightly different color values. For example, by using an offset of 1 we can indicate that 070 * a blue value of 60 is similar to a blue value of 61. 071 * @return {@code this} assertion object. 072 * @throws NullPointerException if the given offset is {@code null}. 073 * @throws AssertionError if the actual image is not equal to the given one. 074 */ 075 public ImageAssert isEqualTo(BufferedImage expected, Offset<Integer> offset) { 076 images.assertEqual(info, actual, expected, offset); 077 return this; 078 } 079 080 /** {@inheritDoc} */ 081 @Override 082 public ImageAssert isNotEqualTo(BufferedImage other) { 083 images.assertNotEqual(info, actual, other); 084 return this; 085 } 086 087 /** 088 * Verifies that the actual image has the given size. 089 * @param expected the expected size of the actual image. 090 * @return {@code this} assertion object. 091 * @throws NullPointerException if the given size is {@code null}. 092 * @throws AssertionError if the size of the actual image is not equal to the given size. 093 */ 094 public ImageAssert hasSize(Dimension expected) { 095 images.assertHasSize(info, actual, expected); 096 return this; 097 } 098 099 @Override 100 public ImageAssert usingComparator(Comparator<?> customComparator) { 101 throw new UnsupportedOperationException("custom Comparator is not supported for image comparison"); 102 } 103 104 @Override 105 public ImageAssert usingDefaultComparator() { 106 super.usingDefaultComparator(); 107 this.images = Images.instance(); 108 return myself; 109 } 110 }