001    /*
002     * Created on Dec 19, 2009
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 @2009-2010 the original author or authors.
015     */
016    package org.fest.swing.fixture;
017    
018    import java.util.regex.Pattern;
019    
020    import javax.swing.JProgressBar;
021    
022    import org.fest.swing.core.*;
023    import org.fest.swing.driver.JProgressBarDriver;
024    import org.fest.swing.exception.ComponentLookupException;
025    import org.fest.swing.exception.WaitTimedOutError;
026    import org.fest.swing.timing.Timeout;
027    
028    /**
029     * Understands functional testing of <code>{@link JProgressBar}</code>s:
030     * <ul>
031     * <li>state verification</li>
032     * <li>property value query</li>
033     * </ul>
034     *
035     * @author Alex Ruiz
036     *
037     * @since 1.2
038     */
039    public class JProgressBarFixture extends ComponentFixture<JProgressBar> implements StateVerificationFixture,
040        JComponentFixture, TextDisplayFixture {
041    
042      private JProgressBarDriver driver;
043    
044      /**
045       * Creates a new <code>{@link JProgressBarFixture}</code>.
046       * @param robot performs simulation of user events on the given <code>JProgressBar</code>.
047       * @param target the <code>JProgressBar</code> to be managed by this fixture.
048       * @throws NullPointerException if <code>robot</code> is <code>null</code>.
049       * @throws NullPointerException if <code>target</code> is <code>null</code>.
050       */
051      public JProgressBarFixture(Robot robot, JProgressBar target) {
052        super(robot, target);
053        createDriver();
054      }
055    
056      /**
057       * Creates a new <code>{@link JProgressBarFixture}</code>.
058       * @param robot performs simulation of user events on a <code>JProgressBar</code>.
059       * @param labelName the name of the <code>JProgressBar</code> to find using the given <code>Robot</code>.
060       * @throws NullPointerException if <code>robot</code> is <code>null</code>.
061       * @throws ComponentLookupException if a matching <code>JProgressBar</code> could not be found.
062       * @throws ComponentLookupException if more than one matching <code>JProgressBar</code> is found.
063       */
064      public JProgressBarFixture(Robot robot, String labelName) {
065        super(robot, labelName, JProgressBar.class);
066        createDriver();
067      }
068    
069      private void createDriver() {
070        driver(new JProgressBarDriver(robot));
071      }
072    
073      /**
074       * Sets the <code>{@link JProgressBarDriver}</code> to be used by this fixture.
075       * @param newDriver the new <code>JProgressBarDriver</code>.
076       * @throws NullPointerException if the given driver is <code>null</code>.
077       */
078      protected final void driver(JProgressBarDriver newDriver) {
079        validateNotNull(newDriver);
080        driver = newDriver;
081      }
082    
083      /**
084       * Asserts that the value of this fixture's <code>{@link JProgressBar}</code> is equal to the given one.
085       * @param value the expected value.
086       * @return this fixture.
087       * @throws AssertionError if the value of this fixture's <code>JProgressBar</code> is not equal to the given one.
088       */
089      public JProgressBarFixture requireValue(int value) {
090        driver.requireValue(target, value);
091        return this;
092      }
093    
094      /**
095       * Asserts that this fixture's <code>{@link JProgressBar}</code> is in determinate mode.
096       * @return this fixture.
097       * @throws AssertionError if this fixture's <code>JProgressBar</code> is not in determinate mode.
098       */
099      public JProgressBarFixture requireDeterminate() {
100        driver.requireDeterminate(target);
101        return this;
102      }
103    
104      /**
105       * Asserts that this fixture's <code>{@link JProgressBar}</code> is in indeterminate mode.
106       * @return this fixture.
107       * @throws AssertionError if this fixture's <code>JProgressBar</code> is not in indeterminate mode.
108       */
109      public JProgressBarFixture requireIndeterminate() {
110        driver.requireIndeterminate(target);
111        return this;
112      }
113    
114      /**
115       * Returns the text of this fixture's <code>{@link JProgressBar}</code>.
116       * @return the text of this fixture's <code>JProgressBar</code>.
117       */
118      public String text() {
119        return driver.textOf(target);
120      }
121    
122      /**
123       * Asserts that the text of this fixture's <code>{@link JProgressBar}</code> is equal to the specified
124       * <code>String</code>.
125       * @param expected the text to match.
126       * @return this fixture.
127       * @throws AssertionError if the text of this fixture's <code>JProgressBar</code> is not equal to the given one.
128       */
129      public JProgressBarFixture requireText(String expected) {
130        driver.requireText(target, expected);
131        return this;
132      }
133    
134      /**
135       * Asserts that the text of this fixture's <code>{@link JProgressBar}</code> matches the given regular expression
136       * pattern.
137       * @param pattern the regular expression pattern to match.
138       * @return this fixture.
139       * @throws AssertionError if the text of this fixture's <code>JProgressBar</code> does not match the given regular
140       * expression pattern.
141       * @throws NullPointerException if the given regular expression pattern is <code>null</code>.
142       */
143      public JProgressBarFixture requireText(Pattern pattern) {
144        driver.requireText(target, pattern);
145        return this;
146      }
147    
148      /**
149       * Asserts that the toolTip in this fixture's <code>{@link JProgressBar}</code> matches the given value.
150       * @param expected the given value. It can be a regular expression.
151       * @return this fixture.
152       * @throws AssertionError if the toolTip in this fixture's <code>JProgressBar</code> does not match the given value.
153       */
154      public JProgressBarFixture requireToolTip(String expected) {
155        driver.requireToolTip(target, expected);
156        return this;
157      }
158    
159      /**
160       * Asserts that the toolTip in this fixture's <code>{@link JProgressBar}</code> matches the given regular expression
161       * pattern.
162       * @param pattern the regular expression pattern to match.
163       * @return this fixture.
164       * @throws NullPointerException if the given regular expression pattern is <code>null</code>.
165       * @throws AssertionError if the toolTip in this fixture's <code>JProgressBar</code> does not match the given regular
166       * expression pattern.
167       */
168      public JProgressBarFixture requireToolTip(Pattern pattern) {
169        driver.requireToolTip(target, pattern);
170        return this;
171      }
172    
173      /**
174       * Asserts that this fixture's <code>{@link JProgressBar}</code> is enabled.
175       * @return this fixture.
176       * @throws AssertionError if this fixture's <code>JProgressBar</code> is disabled.
177       */
178      public JProgressBarFixture requireEnabled() {
179        driver.requireEnabled(target);
180        return this;
181      }
182    
183      /**
184       * Asserts that this fixture's <code>{@link JProgressBar}</code> is enabled.
185       * @param timeout the time this fixture will wait for the component to be enabled.
186       * @return this fixture.
187       * @throws org.fest.swing.exception.WaitTimedOutError if this fixture's <code>JProgressBar</code> is never enabled.
188       */
189      public JProgressBarFixture requireEnabled(Timeout timeout) {
190        driver.requireEnabled(target, timeout);
191        return this;
192      }
193    
194      /**
195       * Asserts that this fixture's <code>{@link JProgressBar}</code> is disabled.
196       * @return this fixture.
197       * @throws AssertionError if this fixture's <code>JProgressBar</code> is enabled.
198       */
199      public JProgressBarFixture requireDisabled() {
200        driver.requireDisabled(target);
201        return this;
202      }
203    
204      /**
205       * Asserts that this fixture's <code>{@link JProgressBar}</code> is visible.
206       * @return this fixture.
207       * @throws AssertionError if this fixture's <code>JProgressBar</code> is not visible.
208       */
209      public JProgressBarFixture requireVisible() {
210        driver.requireVisible(target);
211        return this;
212      }
213    
214      /**
215       * Asserts that this fixture's <code>{@link JProgressBar}</code> is not visible.
216       * @return this fixture.
217       * @throws AssertionError if this fixture's <code>JProgressBar</code> is visible.
218       */
219      public JProgressBarFixture requireNotVisible() {
220        driver.requireNotVisible(target);
221        return this;
222      }
223    
224      /**
225       * Returns the client property stored in this fixture's <code>{@link JProgressBar}</code>, under the given key.
226       * @param key the key to use to retrieve the client property.
227       * @return the value of the client property stored under the given key, or <code>null</code> if the property was
228       * not found.
229       * @throws NullPointerException if the given key is <code>null</code>.
230       */
231      public Object clientProperty(Object key) {
232        return driver.clientProperty(target, key);
233      }
234    
235      /**
236       * Waits until the value of this fixture's <code>{@link JProgressBar}</code> is equal to the given value.
237       * @param value the expected value.
238       * @return this fixture.
239       * @throws IllegalArgumentException if the given value is less than the <code>JProgressBar</code>'s minimum value.
240       * @throws IllegalArgumentException if the given value is greater than the <code>JProgressBar</code>'s maximum value.
241       * @throws WaitTimedOutError if the value of the <code>JProgressBar</code> does not reach the expected value within
242       * 30 seconds.
243       */
244      public JProgressBarFixture waitUntilValueIs(int value) {
245        driver.waitUntilValueIs(target, value);
246        return this;
247      }
248    
249      /**
250       * Waits until the value of this fixture's <code>{@link JProgressBar}</code> is equal to the given value.
251       * @param value the expected value.
252       * @param timeout the amount of time to wait.
253       * @return this fixture.
254       * @throws IllegalArgumentException if the given value is less than the <code>JProgressBar</code>'s minimum value.
255       * @throws IllegalArgumentException if the given value is greater than the <code>JProgressBar</code>'s maximum value.
256       * @throws NullPointerException if the given timeout is <code>null</code>.
257       * @throws WaitTimedOutError if the value of the <code>JProgressBar</code> does not reach the expected value within
258       * the specified timeout.
259       */
260      public JProgressBarFixture waitUntilValueIs(int value, Timeout timeout) {
261        driver.waitUntilValueIs(target, value, timeout);
262        return this;
263      }
264    
265      /**
266       * Waits until the value of this fixture's <code>{@link JProgressBar}</code> is in determinate mode.
267       * @return this fixture.
268       * @throws WaitTimedOutError if the <code>JProgressBar</code> does not reach determinate mode within 30 seconds.
269       */
270      public JProgressBarFixture waitUntilIsDeterminate() {
271        driver.waitUntilIsDeterminate(target);
272        return this;
273      }
274    
275      /**
276       * Waits until the value of this fixture's <code>{@link JProgressBar}</code> is in determinate mode.
277       * @param timeout the amount of time to wait.
278       * @return this fixture.
279       * @throws NullPointerException if the given timeout is <code>null</code>.
280       * @throws WaitTimedOutError if the <code>JProgressBar</code> does not reach determinate mode within the specified
281       * timeout.
282       */
283      public JProgressBarFixture waitUntilIsDeterminate(Timeout timeout) {
284        driver.waitUntilIsDeterminate(target, timeout);
285        return this;
286      }
287    }