ToStringAssert.java

package io.extact.rms.test.assertj;

import java.util.List;

import org.assertj.core.api.ListAssert;
import org.assertj.core.api.ObjectAssert;
import org.assertj.core.internal.ComparisonStrategy;
import org.assertj.core.internal.Objects;
import org.assertj.core.internal.StandardComparisonStrategy;

public class ToStringAssert {


    // ----------------------------------------------------- using equals strategry

    private static final ComparisonStrategy TO_STRING_STRATEGY = new StandardComparisonStrategy() {
        @Override
        public boolean areEqual(Object actual, Object other) {
            if (actual == other) {
                return true;
            } else if (actual == null || other == null) {
                return false;
            } else {
                return actual.toString().equals(other.toString());
            }
        }
    };


    // ----------------------------------------------------- public methods

    public static <T> ObjectAssert<T> assertThatToString(T actual) {
        return new ObjectToStringComparisonAssert<>(actual);
    }

    public static <E> ListAssert<E> assertThatToString(List<? extends E> actual) {
        return new ListToStringComparisonAssert<>(actual);
    }


    // ----------------------------------------------------- inner classes

    public static class ObjectToStringComparisonAssert<T> extends ObjectAssert<T> {

        public ObjectToStringComparisonAssert(T actual) {
            super(actual);
            this.objects = new Objects(TO_STRING_STRATEGY);
        }
    }

    public static class ListToStringComparisonAssert<ELEMENT> extends ListAssert<ELEMENT> {
        public ListToStringComparisonAssert(List<? extends ELEMENT> actual) {
            super(actual);
            this.usingComparisonStrategy(TO_STRING_STRATEGY);
        }
    }
}