All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fitbur.assertj.internal.FieldByFieldComparator Maven / Gradle / Ivy

There is a newer version: 1.0.0
Show newest version
/**
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * Copyright 2012-2016 the original author or authors.
 */
package com.fitbur.assertj.internal;

import static java.util.Collections.EMPTY_MAP;

import java.util.Comparator;

import com.fitbur.assertj.api.Assertions;
import com.fitbur.assertj.util.introspection.IntrospectionError;

/**
 * Compare Object field by field including private fields unless
 * {@link Assertions#setAllowComparingPrivateFields(boolean)}has been called with false.
 */
public class FieldByFieldComparator implements Comparator {

  private static final int NOT_EQUAL = -1;

  @Override
  public int compare(Object actual, Object other) {
	if (actual == null && other == null) return 0;
	if (actual == null || other == null) return NOT_EQUAL;
	// value returned is not relevant for ordering if objects are not equal.
	return areEqual(actual, other) ? 0 : NOT_EQUAL;
  }

  @SuppressWarnings("unchecked")
  protected boolean areEqual(Object actual, Object other) {
    try {
      return Objects.instance().areEqualToIgnoringGivenFields(actual, other, EMPTY_MAP, EMPTY_MAP);
    } catch (IntrospectionError e) {
      return false;
    }
  }

  @Override
  public String toString() {
	return "field by field comparator on all fields";
  }

}