/*
* Copyright (c) 2015-2015 Vladimir Schneider <vladimir.schneider@gmail.com>
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*/
package com.vladsch.idea.multimarkdown;
import org.junit.Assert;
import org.junit.ComparisonFailure;
import org.junit.internal.ArrayComparisonFailure;
import java.lang.reflect.Array;
public abstract class OrderedComparisonCriteria<T> extends TypedComparisonCriteria<T> {
public OrderedComparisonCriteria() {
super();
}
@Override
public void arrayEquals(String message, Object expecteds, Object actuals) throws ArrayComparisonFailure {
if (expecteds != actuals) {
String header = message == null ? "" : message + "\n: ";
int expectedsLength = this.assertArraysAreSameLength(expecteds, actuals, header);
for (int i = 0; i < expectedsLength; ++i) {
Object expected = Array.get(expecteds, i);
Object actual = Array.get(actuals, i);
if (this.isArray(expected) && this.isArray(actual)) {
try {
this.arrayEquals(message, expected, actual);
} catch (ArrayComparisonFailure var10) {
//var10.addDimension(i);
//throw var10;
throw new ComparisonFailure(header + "array differed first at element [" + i + "]\n", TestUtils.arrayAsString(expected), TestUtils.arrayAsString(actual));
}
} else {
try {
this.assertElementsEqual(expected, actual);
} catch (AssertionError var11) {
//throw new ArrayComparisonFailure(header, var11, i);
throw new ComparisonFailure(header + "array differed first at element [" + i + "]\n", TestUtils.arrayAsString(expecteds), TestUtils.arrayAsString(actuals));
}
}
}
}
}
private boolean isArray(Object expected) {
return expected != null && expected.getClass().isArray();
}
private int assertArraysAreSameLength(Object expecteds, Object actuals, String header) {
if (expecteds == null) {
Assert.fail(header + "expected array was null");
}
if (actuals == null) {
Assert.fail(header + "actual array was null");
}
int actualsLength = Array.getLength(actuals);
int expectedsLength = Array.getLength(expecteds);
if (actualsLength != expectedsLength) {
throw new ComparisonFailure(header + "array lengths differed, expected.length=" + expectedsLength + " actual.length=" + actualsLength, TestUtils.arrayAsString(expecteds), TestUtils.arrayAsString(actuals));
}
return expectedsLength;
}
}