/*
* Copyright 2015-2017 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.junit.jupiter.api;
import static org.junit.jupiter.api.AssertionTestUtils.assertExpectedAndActualValues;
import static org.junit.jupiter.api.AssertionTestUtils.assertMessageEndsWith;
import static org.junit.jupiter.api.AssertionTestUtils.assertMessageEquals;
import static org.junit.jupiter.api.AssertionTestUtils.assertMessageStartsWith;
import static org.junit.jupiter.api.AssertionTestUtils.expectAssertionFailedError;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.function.Executable;
import org.opentest4j.AssertionFailedError;
/**
* Unit tests for JUnit Jupiter {@link Assertions}.
*
* @since 5.0
*/
class AssertionsAssertEqualsTests {
@Test
void assertEqualsByte() {
byte expected = 1;
byte actual = 1;
assertEquals(expected, actual);
}
@Test
void assertEqualsByteWithUnequalValues() {
byte expected = 1;
byte actual = 2;
try {
assertEquals(expected, actual);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsByteWithUnequalValuesAndMessage() {
byte expected = 1;
byte actual = 2;
try {
assertEquals(expected, actual, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsByteWithUnequalValuesAndMessageSupplier() {
byte expected = 1;
byte actual = 2;
try {
assertEquals(expected, actual, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsShort() {
short expected = 1;
short actual = 1;
assertEquals(expected, actual);
}
@Test
void assertEqualsShortWithUnequalValues() {
short expected = 1;
short actual = 2;
try {
assertEquals(expected, actual);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsShortWithUnequalValuesAndMessage() {
short expected = 1;
short actual = 2;
try {
assertEquals(expected, actual, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsShortWithUnequalValuesAndMessageSupplier() {
short expected = 1;
short actual = 2;
try {
assertEquals(expected, actual, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, expected, actual);
}
}
@Test
void assertEqualsInt() {
assertEquals(1, 1);
}
@Test
void assertEqualsIntWithUnequalValues() {
try {
assertEquals(1, 2);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1, 2);
}
}
@Test
void assertEqualsIntWithUnequalValuesAndMessage() {
try {
assertEquals(1, 2, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1, 2);
}
}
@Test
void assertEqualsIntWithUnequalValuesAndMessageSupplier() {
try {
assertEquals(1, 2, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1, 2);
}
}
@Test
void assertEqualsLong() {
assertEquals(1L, 1L);
}
@Test
void assertEqualsLongWithUnequalValues() {
try {
assertEquals(1L, 2L);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1L, 2L);
}
}
@Test
void assertEqualsLongWithUnequalValuesAndMessage() {
try {
assertEquals(1L, 2L, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1L, 2L);
}
}
@Test
void assertEqualsLongWithUnequalValuesAndMessageSupplier() {
try {
assertEquals(1L, 2L, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1> but was: <2>");
assertExpectedAndActualValues(ex, 1L, 2L);
}
}
@Test
void assertEqualsChar() {
assertEquals('a', 'a');
}
@Test
void assertEqualsCharWithUnequalValues() {
try {
assertEquals('a', 'b');
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <a> but was: <b>");
assertExpectedAndActualValues(ex, 'a', 'b');
}
}
@Test
void assertEqualsCharWithUnequalValuesAndMessage() {
try {
assertEquals('a', 'b', "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <a> but was: <b>");
assertExpectedAndActualValues(ex, 'a', 'b');
}
}
@Test
void assertEqualsCharWithUnequalValuesAndMessageSupplier() {
try {
assertEquals('a', 'b', () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <a> but was: <b>");
assertExpectedAndActualValues(ex, 'a', 'b');
}
}
@Test
void assertEqualsFloat() {
assertEquals(1.0f, 1.0f);
assertEquals(Float.NaN, Float.NaN);
assertEquals(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY);
assertEquals(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY);
assertEquals(Float.MIN_VALUE, Float.MIN_VALUE);
assertEquals(Float.MAX_VALUE, Float.MAX_VALUE);
assertEquals(Float.MIN_NORMAL, Float.MIN_NORMAL);
assertEquals(Double.NaN, Float.NaN);
}
@Test
void assertEqualsFloatWithUnequalValues() {
try {
assertEquals(1.0f, 1.1f);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0f, 1.1f);
}
}
@Test
void assertEqualsFloatWithUnequalValuesAndMessage() {
try {
assertEquals(1.0f, 1.1f, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0f, 1.1f);
}
}
@Test
void assertEqualsFloatWithUnequalValuesAndMessageSupplier() {
try {
assertEquals(1.0f, 1.1f, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0f, 1.1f);
}
}
@Test
void assertEqualsFloatWithDelta() {
assertEquals(0.56f, 0.6f, 0.05f);
assertEquals(0.01f, 0.011f, 0.002f);
assertEquals(Float.NaN, Float.NaN, 0.5f);
}
@Test
void assertEqualsFloatWithIllegalDelta() {
AssertionFailedError e1 = assertThrows(AssertionFailedError.class, () -> assertEquals(0.1f, 0.2f, -0.9f));
assertMessageEndsWith(e1, "positive delta expected but was: <-0.9>");
AssertionFailedError e2 = assertThrows(AssertionFailedError.class, () -> assertEquals(.0f, .0f, -10.5f));
assertMessageEndsWith(e2, "positive delta expected but was: <-10.5>");
AssertionFailedError e3 = assertThrows(AssertionFailedError.class, () -> assertEquals(4.5f, 4.6f, Float.NaN));
assertMessageEndsWith(e3, "positive delta expected but was: <NaN>");
}
@Test
void assertEqualsFloatWithDeltaWithUnequalValues() {
AssertionFailedError e1 = assertThrows(AssertionFailedError.class, () -> assertEquals(0.5f, 0.2f, 0.2f));
assertMessageEndsWith(e1, "expected: <0.5> but was: <0.2>");
AssertionFailedError e2 = assertThrows(AssertionFailedError.class, () -> assertEquals(0.1f, 0.2f, 0.000001f));
assertMessageEndsWith(e2, "expected: <0.1> but was: <0.2>");
AssertionFailedError e3 = assertThrows(AssertionFailedError.class, () -> assertEquals(100.0f, 50.0f, 10.0f));
assertMessageEndsWith(e3, "expected: <100.0> but was: <50.0>");
AssertionFailedError e4 = assertThrows(AssertionFailedError.class, () -> assertEquals(-3.5f, -3.3f, 0.01f));
assertMessageEndsWith(e4, "expected: <-3.5> but was: <-3.3>");
AssertionFailedError e5 = assertThrows(AssertionFailedError.class, () -> assertEquals(+0.0f, -0.001f, .00001f));
assertMessageEndsWith(e5, "expected: <0.0> but was: <-0.001>");
}
@Test
void assertEqualsFloatWithDeltaWithUnequalValuesAndMessage() {
Executable assertion = () -> assertEquals(0.5f, 0.45f, 0.03f, "message");
AssertionFailedError e = assertThrows(AssertionFailedError.class, assertion);
assertMessageStartsWith(e, "message");
assertMessageEndsWith(e, "expected: <0.5> but was: <0.45>");
assertExpectedAndActualValues(e, 0.5f, 0.45f);
}
@Test
void assertEqualsFloatWithDeltaWithUnequalValuesAndMessageSupplier() {
Executable assertion = () -> assertEquals(0.5f, 0.45f, 0.03f, () -> "message");
AssertionFailedError e = assertThrows(AssertionFailedError.class, assertion);
assertMessageStartsWith(e, "message");
assertMessageEndsWith(e, "expected: <0.5> but was: <0.45>");
assertExpectedAndActualValues(e, 0.5f, 0.45f);
}
@Test
void assertEqualsDouble() {
assertEquals(1.0d, 1.0d);
assertEquals(Double.NaN, Double.NaN);
assertEquals(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
assertEquals(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
assertEquals(Double.MIN_VALUE, Double.MIN_VALUE);
assertEquals(Double.MAX_VALUE, Double.MAX_VALUE);
assertEquals(Double.MIN_NORMAL, Double.MIN_NORMAL);
}
@Test
void assertEqualsDoubleWithUnequalValues() {
try {
assertEquals(1.0d, 1.1d);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0d, 1.1d);
}
}
@Test
void assertEqualsDoubleWithUnequalValuesAndMessage() {
try {
assertEquals(1.0d, 1.1d, "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0d, 1.1d);
}
}
@Test
void assertEqualsDoubleWithUnequalValuesAndMessageSupplier() {
try {
assertEquals(1.0d, 1.1d, () -> "message");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "message");
assertMessageEndsWith(ex, "expected: <1.0> but was: <1.1>");
assertExpectedAndActualValues(ex, 1.0d, 1.1d);
}
}
@Test
void assertEqualsDoubleWithDelta() {
assertEquals(0.42d, 0.24d, 0.19d);
assertEquals(0.02d, 0.011d, 0.01d);
assertEquals(Double.NaN, Double.NaN, 0.2d);
}
@Test
void assertEqualsDoubleWithIllegalDelta() {
AssertionFailedError e1 = assertThrows(AssertionFailedError.class, () -> assertEquals(1.1d, 1.11d, -0.5d));
assertMessageEndsWith(e1, "positive delta expected but was: <-0.5>");
AssertionFailedError e2 = assertThrows(AssertionFailedError.class, () -> assertEquals(.55d, .56d, -10.5d));
assertMessageEndsWith(e2, "positive delta expected but was: <-10.5>");
AssertionFailedError e3 = assertThrows(AssertionFailedError.class, () -> assertEquals(1.1d, 1.1d, Double.NaN));
assertMessageEndsWith(e3, "positive delta expected but was: <NaN>");
}
@Test
void assertEqualsDoubleWithDeltaWithUnequalValues() {
AssertionFailedError e1 = assertThrows(AssertionFailedError.class, () -> assertEquals(9.9d, 9.7d, 0.1d));
assertMessageEndsWith(e1, "expected: <9.9> but was: <9.7>");
assertExpectedAndActualValues(e1, 9.9d, 9.7d);
AssertionFailedError e2 = assertThrows(AssertionFailedError.class, () -> assertEquals(0.1d, 0.05d, 0.001d));
assertMessageEndsWith(e2, "expected: <0.1> but was: <0.05>");
assertExpectedAndActualValues(e2, 0.1d, 0.05d);
AssertionFailedError e3 = assertThrows(AssertionFailedError.class, () -> assertEquals(17.11d, 15.11d, 1.1d));
assertMessageEndsWith(e3, "expected: <17.11> but was: <15.11>");
assertExpectedAndActualValues(e3, 17.11d, 15.11d);
AssertionFailedError e4 = assertThrows(AssertionFailedError.class, () -> assertEquals(-7.2d, -5.9d, 1.1d));
assertMessageEndsWith(e4, "expected: <-7.2> but was: <-5.9>");
assertExpectedAndActualValues(e4, -7.2d, -5.9d);
AssertionFailedError e5 = assertThrows(AssertionFailedError.class, () -> assertEquals(+0.0d, -0.001d, .00001d));
assertMessageEndsWith(e5, "expected: <0.0> but was: <-0.001>");
assertExpectedAndActualValues(e5, +0.0d, -0.001d);
}
@Test
void assertEqualsDoubleWithDeltaWithUnequalValuesAndMessage() {
Executable assertion = () -> assertEquals(42.42d, 42.4d, 0.001d, "message");
AssertionFailedError e = assertThrows(AssertionFailedError.class, assertion);
assertMessageStartsWith(e, "message");
assertMessageEndsWith(e, "expected: <42.42> but was: <42.4>");
assertExpectedAndActualValues(e, 42.42d, 42.4d);
}
@Test
void assertEqualsDoubleWithDeltaWithUnequalValuesAndMessageSupplier() {
Executable assertion = () -> assertEquals(0.9d, 10.12d, 5.001d, () -> "message");
AssertionFailedError e = assertThrows(AssertionFailedError.class, assertion);
assertMessageStartsWith(e, "message");
assertMessageEndsWith(e, "expected: <0.9> but was: <10.12>");
assertExpectedAndActualValues(e, 0.9d, 10.12d);
}
@Test
void assertEqualsWithTwoNulls() {
assertEquals(null, null);
}
@Test
void assertEqualsWithSameObject() {
Object foo = new Object();
assertEquals(foo, foo);
}
@Test
void assertEqualsWithEquivalentStrings() {
assertEquals(new String("foo"), new String("foo"));
}
@Test
void assertEqualsWithNullVsObject() {
try {
assertEquals(null, "foo");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <null> but was: <foo>");
assertExpectedAndActualValues(ex, null, "foo");
}
}
@Test
void assertEqualsWithObjectVsNull() {
try {
assertEquals("foo", null);
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageEquals(ex, "expected: <foo> but was: <null>");
assertExpectedAndActualValues(ex, "foo", null);
}
}
@Test
void assertEqualsWithNullVsObjectAndMessageSupplier() {
try {
assertEquals(null, "foo", () -> "test");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "test");
assertMessageEndsWith(ex, "expected: <null> but was: <foo>");
assertExpectedAndActualValues(ex, null, "foo");
}
}
@Test
void assertEqualsWithObjectVsNullAndMessageSupplier() {
try {
assertEquals("foo", null, () -> "test");
expectAssertionFailedError();
}
catch (AssertionFailedError ex) {
assertMessageStartsWith(ex, "test");
assertMessageEndsWith(ex, "expected: <foo> but was: <null>");
assertExpectedAndActualValues(ex, "foo", null);
}
}
@Test
void assertEqualsInvokesEqualsMethodForIdenticalObjects() {
Object obj = new EqualsThrowsExceptionClass();
assertThrows(NumberFormatException.class, () -> assertEquals(obj, obj));
}
private static class EqualsThrowsExceptionClass {
@Override
public boolean equals(Object obj) {
throw new NumberFormatException();
}
}
}