001    /*
002     * Created on May 2, 2008
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005     * in compliance with 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
010     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011     * or implied. See the License for the specific language governing permissions and limitations under
012     * the License.
013     *
014     * Copyright @2008-2010 the original author or authors.
015     */
016    package org.fest.swing.fixture;
017    
018    import static org.fest.assertions.Assertions.assertThat;
019    import static org.fest.swing.util.Colors.colorFromHexString;
020    
021    import java.awt.Color;
022    
023    import org.fest.assertions.BasicDescription;
024    import org.fest.assertions.Description;
025    
026    /**
027     * Understands state verification of <code>{@link Color}</code>s.
028     *
029     * @author Alex Ruiz
030     */
031    public class ColorFixture {
032    
033      private final Color target;
034      private final Description description;
035    
036      /**
037       * Creates a new </code>{@link ColorFixture}</code>.
038       * @param target the color to manage.
039       * @throws NullPointerException if <code>target</code> is <code>null</code>.
040       */
041      public ColorFixture(Color target) {
042        this(target, (Description)null);
043      }
044    
045      /**
046       * Creates a new </code>{@link ColorFixture}</code>.
047       * @param target the color to manage.
048       * @param description this fixture's description.
049       * @throws NullPointerException if <code>target</code> is <code>null</code>.
050       */
051      public ColorFixture(Color target, String description) {
052        this(target, new BasicDescription(description));
053      }
054    
055      /**
056       * Creates a new </code>{@link ColorFixture}</code>.
057       * @param target the color to manage.
058       * @param description this fixture's description.
059       * @throws NullPointerException if <code>target</code> is <code>null</code>.
060       */
061      public ColorFixture(Color target, Description description) {
062        if (target == null) throw new NullPointerException("The given color should not be null");
063        this.target = target;
064        this.description = description;
065      }
066    
067      /**
068       * Verifies that this fixture's <code>Color</code> is equal to the given color represented by the given hexadecimal
069       * value (e.g. "82A9FF".)
070       * @param hexValue the value representing the color to compare to.
071       * @return this fixture.
072       * @throws NullPointerException if the hexadecimal code is <code>null</code>.
073       * @throws IllegalArgumentException if the hexadecimal code is empty.
074       * @throws NumberFormatException if the hexadecimal code is empty.
075       * @throws AssertionError if this fixture's <code>Color</code> is not equal to the given one.
076       */
077      public ColorFixture requireEqualTo(String hexValue) {
078        return requireEqualTo(colorFromHexString(hexValue));
079      }
080    
081      /**
082       * Verifies that this fixture's <code>Color</code> is equal to the given one.
083       * @param color the given <code>Color</code> to compare to.
084       * @return this fixture.
085       * @throws AssertionError if this fixture's <code>Color</code> is not equal to the given one.
086       */
087      public ColorFixture requireEqualTo(Color color) {
088        assertThat(target).as(description).isEqualTo(color);
089        return this;
090      }
091    
092      /**
093       * Verifies that this fixture's <code>Color</code> is not equal to the given color represented by the given
094       * hexadecimal value (e.g. "82A9FF".)
095       * @param hexValue the value representing the color to compare to.
096       * @return this fixture.
097       * @throws NullPointerException if the hexadecimal code is <code>null</code>.
098       * @throws IllegalArgumentException if the hexadecimal code is empty.
099       * @throws NumberFormatException if the hexadecimal code is empty.
100       * @throws AssertionError if this fixture's <code>Color</code> is equal to the given one.
101       */
102      public ColorFixture requireNotEqualTo(String hexValue) {
103        return requireNotEqualTo(colorFromHexString(hexValue));
104      }
105    
106      /**
107       * Verifies that this fixture's <code>Color</code> is not equal to the given one.
108       * @param color the given <code>Color</code> to compare to.
109       * @return this fixture.
110       * @throws AssertionError if this fixture's <code>Color</code> is equal to the given one.
111       */
112      public ColorFixture requireNotEqualTo(Color color) {
113        assertThat(target).as(description).isNotEqualTo(color);
114        return this;
115      }
116    
117      /**
118       * Returns this fixture's color.
119       * @return this fixture's color.
120       */
121      public Color target() { return target; }
122    
123      /**
124       * Returns this fixture's description.
125       * @return this fixture's description.
126       */
127      public final String description() { return description != null ? description.value() : null; }
128    }