001 /* 002 * Created on Sep 17, 2007 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 @2007-2009 the original author or authors. 015 */ 016 package org.fest.assertions; 017 018 import static org.fest.util.Strings.concat; 019 import static org.fest.util.Strings.isEmpty; 020 021 /** 022 * Understands a condition to be met by a given <code>{@link Object}</code>. 023 * @param <T> the type of <code>Object</code> this condition accepts. 024 * 025 * @author Yvonne Wang 026 * @author Alex Ruiz 027 */ 028 public abstract class Condition<T> { 029 030 private String description; 031 032 /** 033 * Creates a new <code>{@link Condition}</code>. 034 */ 035 public Condition() {} 036 037 /** 038 * Creates a new <code>{@link Condition}</code>. 039 * @param description the description of this condition. 040 */ 041 public Condition(String description) { 042 as(description); 043 } 044 045 /** 046 * Sets the description of this condition. 047 * @param newDescription the description to set. 048 * @return this condition. 049 */ 050 public final Condition<T> as(String newDescription) { 051 description = newDescription; 052 return this; 053 } 054 055 final String addDescriptionTo(String s) { 056 String descriptionToAdd = description(); 057 if (isEmpty(descriptionToAdd)) descriptionToAdd = getClass().getSimpleName(); 058 return concat(s, ":<", descriptionToAdd, ">"); 059 } 060 061 /** 062 * Returns the description of this condition, if any. 063 * @return the description of this condition. 064 */ 065 public final String description() { return description; } 066 067 /** 068 * Verifies that the given value satisfies this condition. 069 * @param value the value to verify. 070 * @return <code>true</code> if the given value satisfies this condition, <code>false</code> otherwise. 071 */ 072 public abstract boolean matches(T value); 073 }