001 /*
002 * Created on Oct 18, 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.error;
016
017 import static java.lang.String.format;
018
019 import static org.fest.util.Arrays.format;
020 import static org.fest.util.Objects.*;
021 import static org.fest.util.Strings.quote;
022
023 import java.util.Arrays;
024
025 import org.fest.assertions.description.Description;
026 import org.fest.util.VisibleForTesting;
027
028 /**
029 * A factory of error messages typically shown when an assertion fails.
030 *
031 * @author Alex Ruiz
032 */
033 public class BasicErrorMessageFactory implements ErrorMessageFactory {
034
035 private final String format;
036 private final Object[] arguments;
037
038 @VisibleForTesting
039 MessageFormatter formatter = MessageFormatter.instance();
040
041 /**
042 * Creates a new </code>{@link BasicErrorMessageFactory}</code>.
043 * @param format the format string.
044 * @param arguments arguments referenced by the format specifiers in the format string.
045 */
046 public BasicErrorMessageFactory(String format, Object... arguments) {
047 this.format = format;
048 this.arguments = arguments;
049 }
050
051 /** {@inheritDoc} */
052 public String create(Description d) {
053 return formatter.format(d, format, arguments);
054 }
055
056 @Override
057 public boolean equals(Object obj) {
058 if (this == obj) return true;
059 if (obj == null) return false;
060 if (getClass() != obj.getClass()) return false;
061 BasicErrorMessageFactory other = (BasicErrorMessageFactory) obj;
062 if (!areEqual(format, other.format)) return false;
063 return Arrays.equals(arguments, other.arguments);
064 }
065
066 @Override
067 public int hashCode() {
068 int result = 1;
069 result = HASH_CODE_PRIME * result + hashCodeFor(format);
070 result = HASH_CODE_PRIME * result + Arrays.hashCode(arguments);
071 return result;
072 }
073
074 @Override
075 public String toString() {
076 return format("%s[format=%s, arguments=%s]", getClass().getSimpleName(), quote(format), format(arguments));
077 }
078
079 }