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

ext.test4j.hamcrest.core.IsEqual Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version
/*  Copyright (c) 2000-2006 hamcrest.org
 */
package ext.test4j.hamcrest.core;

import ext.test4j.hamcrest.BaseMatcher;
import ext.test4j.hamcrest.Description;
import ext.test4j.hamcrest.Factory;
import ext.test4j.hamcrest.Matcher;

import java.lang.reflect.Array;

import org.test4j.tools.commons.PrimitiveHelper;

/**
 * Is the value equal to another value, as tested by the
 * {@link java.lang.Object#equals} invokedMethod?
 */
public class IsEqual extends BaseMatcher {
	private final Object object;

	public IsEqual(T equalArg) {
		object = equalArg;
	}

	public boolean matches(Object arg) {
		return areEqual(arg, object);
	}

	public void describeTo(Description description) {
		description.appendValue(object);
	}

	private static boolean areEqual(Object o1, Object o2) {
		if (o1 == null) {
			return o2 == null;
		} else if (o2 != null && isArray(o1)) {
			return isArray(o2) && areArraysEqual(o1, o2);
		} else {
			if (o1 instanceof Number && o2 instanceof Number) {
				return PrimitiveHelper.doesEqual((Number) o1, (Number) o2);
			} else {
				return o1.equals(o2);
			}
		}
	}

	private static boolean areArraysEqual(Object o1, Object o2) {
		return areArrayLengthsEqual(o1, o2) && areArrayElementsEqual(o1, o2);
	}

	private static boolean areArrayLengthsEqual(Object o1, Object o2) {
		return Array.getLength(o1) == Array.getLength(o2);
	}

	private static boolean areArrayElementsEqual(Object o1, Object o2) {
		for (int i = 0; i < Array.getLength(o1); i++) {
			if (!areEqual(Array.get(o1, i), Array.get(o2, i)))
				return false;
		}
		return true;
	}

	private static boolean isArray(Object o) {
		return o.getClass().isArray();
	}

	/**
	 * Is the value equal to another value, as tested by the
	 * {@link java.lang.Object#equals} invokedMethod?
	 */
	@Factory
	public static  Matcher equalTo(T operand) {
		return new IsEqual(operand);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy