diff --git a/assertj-core/src/main/java/org/assertj/core/api/InstanceOfAssertFactories.java b/assertj-core/src/main/java/org/assertj/core/api/InstanceOfAssertFactories.java index fd87ab80d7..069b481944 100644 --- a/assertj-core/src/main/java/org/assertj/core/api/InstanceOfAssertFactories.java +++ b/assertj-core/src/main/java/org/assertj/core/api/InstanceOfAssertFactories.java @@ -443,13 +443,6 @@ static InstanceOfAssertFactory> type(Class type) { */ InstanceOfAssertFactory> ARRAY = array(Object[].class); - /** - * {@link InstanceOfAssertFactory} for an two-dimensional array of {@link Object}. - * - * @see #array(Class) - */ - InstanceOfAssertFactory> ARRAY_2D = array2D(Object[][].class); - /** * {@link InstanceOfAssertFactory} for an array of elements. * @@ -464,7 +457,14 @@ static InstanceOfAssertFactory> } /** - * {@link InstanceOfAssertFactory} for an two-dimensional array of elements. + * {@link InstanceOfAssertFactory} for a two-dimensional array of {@link Object}. + * + * @see #array(Class) + */ + InstanceOfAssertFactory> ARRAY_2D = array2D(Object[][].class); + + /** + * {@link InstanceOfAssertFactory} for a two-dimensional array of elements. * * @param the element type. * @param arrayType the element type instance. diff --git a/assertj-core/src/main/java/org/assertj/core/api/ProxifyMethodChangingTheObjectUnderTest.java b/assertj-core/src/main/java/org/assertj/core/api/ProxifyMethodChangingTheObjectUnderTest.java index 20e264471a..708867821c 100644 --- a/assertj-core/src/main/java/org/assertj/core/api/ProxifyMethodChangingTheObjectUnderTest.java +++ b/assertj-core/src/main/java/org/assertj/core/api/ProxifyMethodChangingTheObjectUnderTest.java @@ -55,6 +55,7 @@ import java.util.function.IntPredicate; import java.util.function.LongPredicate; import java.util.function.Predicate; +import java.util.regex.Matcher; import net.bytebuddy.implementation.bind.annotation.FieldValue; import net.bytebuddy.implementation.bind.annotation.RuntimeType; @@ -163,6 +164,7 @@ private static Class actualClass(Object currentAssert) { if (currentAssert instanceof LongAssert) return Long.class; if (currentAssert instanceof LongPredicateAssert) return LongPredicate.class; if (currentAssert instanceof MapAssert) return Map.class; + if (currentAssert instanceof MatcherAssert) return Matcher.class; if (currentAssert instanceof ObjectAssert) return Object.class; if (currentAssert instanceof OffsetDateTimeAssert) return OffsetDateTime.class; if (currentAssert instanceof OffsetTimeAssert) return OffsetTime.class; diff --git a/assertj-core/src/test/java/org/assertj/core/api/InstanceOfAssertFactoriesTest.java b/assertj-core/src/test/java/org/assertj/core/api/InstanceOfAssertFactoriesTest.java index 7e9fb41b96..c49e25f65d 100644 --- a/assertj-core/src/test/java/org/assertj/core/api/InstanceOfAssertFactoriesTest.java +++ b/assertj-core/src/test/java/org/assertj/core/api/InstanceOfAssertFactoriesTest.java @@ -77,6 +77,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.LONG_PREDICATE; import static org.assertj.core.api.InstanceOfAssertFactories.LONG_STREAM; import static org.assertj.core.api.InstanceOfAssertFactories.MAP; +import static org.assertj.core.api.InstanceOfAssertFactories.MATCHER; import static org.assertj.core.api.InstanceOfAssertFactories.OFFSET_DATE_TIME; import static org.assertj.core.api.InstanceOfAssertFactories.OFFSET_TIME; import static org.assertj.core.api.InstanceOfAssertFactories.OPTIONAL; @@ -99,6 +100,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.URL_TYPE; import static org.assertj.core.api.InstanceOfAssertFactories.ZONED_DATE_TIME; import static org.assertj.core.api.InstanceOfAssertFactories.array; +import static org.assertj.core.api.InstanceOfAssertFactories.array2D; import static org.assertj.core.api.InstanceOfAssertFactories.atomicIntegerFieldUpdater; import static org.assertj.core.api.InstanceOfAssertFactories.atomicLongFieldUpdater; import static org.assertj.core.api.InstanceOfAssertFactories.atomicMarkableReference; @@ -121,7 +123,6 @@ import static org.assertj.core.api.InstanceOfAssertFactories.throwable; import static org.assertj.core.api.InstanceOfAssertFactories.type; import static org.assertj.core.test.Maps.mapOf; -import static org.assertj.core.util.Lists.list; import static org.mockito.Mockito.mock; import java.io.ByteArrayInputStream; @@ -168,11 +169,13 @@ import java.util.function.IntPredicate; import java.util.function.LongPredicate; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.DoubleStream; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; +import org.assertj.core.util.Lists; import org.assertj.core.util.Strings; import org.junit.jupiter.api.Test; @@ -321,6 +324,16 @@ void optional_long_factory_should_allow_optional_long_assertions() { result.isPresent(); } + @Test + void matcher_factory_should_allow_matcher_assertions() { + // GIVEN + Object value = Pattern.compile("a*").matcher("aaa"); + // WHEN + MatcherAssert result = assertThat(value).asInstanceOf(MATCHER); + // THEN + result.matches(); + } + @Test void big_decimal_factory_should_allow_big_decimal_assertions() { // GIVEN @@ -641,6 +654,16 @@ void array_factory_should_allow_array_assertions() { result.containsExactly(0, ""); } + @Test + void array_typed_factory_should_allow_array_typed_assertions() { + // GIVEN + Object value = new Integer[] { 0, 1 }; + // WHEN + ObjectArrayAssert result = assertThat(value).asInstanceOf(array(Integer[].class)); + // THEN + result.containsExactly(0, 1); + } + @Test void array_2d_factory_should_allow_2d_array_assertions() { // GIVEN @@ -652,13 +675,13 @@ void array_2d_factory_should_allow_2d_array_assertions() { } @Test - void array_typed_factory_should_allow_array_typed_assertions() { + void array_2d_typed_factory_should_allow_2d_array_typed_assertions() { // GIVEN - Object value = new Integer[] { 0, 1 }; + Object value = new Integer[][] { { 0, 1 }, { 2, 3 } }; // WHEN - ObjectArrayAssert result = assertThat(value).asInstanceOf(array(Integer[].class)); + Object2DArrayAssert result = assertThat(value).asInstanceOf(array2D(Integer[][].class)); // THEN - result.containsExactly(0, 1); + result.hasDimensions(2, 2); } @Test @@ -1055,7 +1078,7 @@ void string_factory_should_allow_string_assertions() { @Test void iterable_factory_should_allow_iterable_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN IterableAssert result = assertThat(value).asInstanceOf(ITERABLE); // THEN @@ -1065,7 +1088,7 @@ void iterable_factory_should_allow_iterable_assertions() { @Test void iterable_typed_factory_should_allow_iterable_typed_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN IterableAssert result = assertThat(value).asInstanceOf(iterable(String.class)); // THEN @@ -1075,7 +1098,7 @@ void iterable_typed_factory_should_allow_iterable_typed_assertions() { @Test void iterator_factory_should_allow_iterator_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie").iterator(); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie").iterator(); // WHEN IteratorAssert result = assertThat(value).asInstanceOf(ITERATOR); // THEN @@ -1085,7 +1108,7 @@ void iterator_factory_should_allow_iterator_assertions() { @Test void iterator_typed_factory_should_allow_iterator_typed_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie").iterator(); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie").iterator(); // WHEN IteratorAssert result = assertThat(value).asInstanceOf(iterator(String.class)); // THEN @@ -1095,7 +1118,7 @@ void iterator_typed_factory_should_allow_iterator_typed_assertions() { @Test void collection_factory_should_allow_collection_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN AbstractCollectionAssert, Object, ObjectAssert> result = assertThat(value).asInstanceOf(COLLECTION); // THEN @@ -1105,7 +1128,7 @@ void collection_factory_should_allow_collection_assertions() { @Test void collection_typed_factory_should_allow_collection_typed_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN AbstractCollectionAssert, String, ObjectAssert> result = assertThat(value).asInstanceOf(collection(String.class)); // THEN @@ -1115,7 +1138,7 @@ void collection_typed_factory_should_allow_collection_typed_assertions() { @Test void list_factory_should_allow_list_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN ListAssert result = assertThat(value).asInstanceOf(LIST); // THEN @@ -1125,7 +1148,7 @@ void list_factory_should_allow_list_assertions() { @Test void list_typed_factory_should_allow_typed_list_assertions() { // GIVEN - Object value = list("Homer", "Marge", "Bart", "Lisa", "Maggie"); + Object value = Lists.list("Homer", "Marge", "Bart", "Lisa", "Maggie"); // WHEN ListAssert result = assertThat(value).asInstanceOf(list(String.class)); // THEN diff --git a/assertj-core/src/test/java/org/assertj/core/api/SoftAssertions_combined_with_asInstanceOf_Test.java b/assertj-core/src/test/java/org/assertj/core/api/SoftAssertions_combined_with_asInstanceOf_Test.java index d26a9382b4..1367763059 100644 --- a/assertj-core/src/test/java/org/assertj/core/api/SoftAssertions_combined_with_asInstanceOf_Test.java +++ b/assertj-core/src/test/java/org/assertj/core/api/SoftAssertions_combined_with_asInstanceOf_Test.java @@ -20,6 +20,8 @@ import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_INTEGER; import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_INTEGER_ARRAY; import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_INTEGER_FIELD_UPDATER; +import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_LONG; +import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_LONG_ARRAY; import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_LONG_FIELD_UPDATER; import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_MARKABLE_REFERENCE; import static org.assertj.core.api.InstanceOfAssertFactories.ATOMIC_REFERENCE; @@ -39,6 +41,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.CHAR_ARRAY; import static org.assertj.core.api.InstanceOfAssertFactories.CHAR_SEQUENCE; import static org.assertj.core.api.InstanceOfAssertFactories.CLASS; +import static org.assertj.core.api.InstanceOfAssertFactories.COLLECTION; import static org.assertj.core.api.InstanceOfAssertFactories.COMPLETABLE_FUTURE; import static org.assertj.core.api.InstanceOfAssertFactories.COMPLETION_STAGE; import static org.assertj.core.api.InstanceOfAssertFactories.DATE; @@ -72,6 +75,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.LONG_PREDICATE; import static org.assertj.core.api.InstanceOfAssertFactories.LONG_STREAM; import static org.assertj.core.api.InstanceOfAssertFactories.MAP; +import static org.assertj.core.api.InstanceOfAssertFactories.MATCHER; import static org.assertj.core.api.InstanceOfAssertFactories.OFFSET_DATE_TIME; import static org.assertj.core.api.InstanceOfAssertFactories.OFFSET_TIME; import static org.assertj.core.api.InstanceOfAssertFactories.OPTIONAL; @@ -91,6 +95,7 @@ import static org.assertj.core.api.InstanceOfAssertFactories.THROWABLE; import static org.assertj.core.api.InstanceOfAssertFactories.URI_TYPE; import static org.assertj.core.api.InstanceOfAssertFactories.URL_TYPE; +import static org.assertj.core.api.InstanceOfAssertFactories.ZONED_DATE_TIME; import static org.assertj.core.util.Lists.list; import static org.assertj.core.util.Maps.newHashMap; import static org.assertj.core.util.Sets.newHashSet; @@ -135,6 +140,7 @@ import java.util.function.IntPredicate; import java.util.function.LongPredicate; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.DoubleStream; import java.util.stream.IntStream; import java.util.stream.LongStream; @@ -187,8 +193,8 @@ public static Stream should_work_with_any_InstanceOfFactory_source() arguments(new AtomicInteger(1), ATOMIC_INTEGER), arguments(new AtomicIntegerArray(5), ATOMIC_INTEGER_ARRAY), arguments(AtomicIntegerFieldUpdater.newUpdater(Data.class, "intField"), ATOMIC_INTEGER_FIELD_UPDATER), - arguments(new AtomicLong(5l), InstanceOfAssertFactories.ATOMIC_LONG), - arguments(new AtomicLongArray(5), InstanceOfAssertFactories.ATOMIC_LONG_ARRAY), + arguments(new AtomicLong(5L), ATOMIC_LONG), + arguments(new AtomicLongArray(5), ATOMIC_LONG_ARRAY), arguments(AtomicLongFieldUpdater.newUpdater(Data.class, "longField"), ATOMIC_LONG_FIELD_UPDATER), arguments(new AtomicMarkableReference<>("", false), ATOMIC_MARKABLE_REFERENCE), arguments(new AtomicReference<>("abc"), ATOMIC_REFERENCE), @@ -210,6 +216,7 @@ public static Stream should_work_with_any_InstanceOfFactory_source() arguments('a', CHARACTER), arguments(Character.valueOf('a'), CHARACTER), arguments(TolkienCharacter.class, CLASS), + arguments(list("foo"), COLLECTION), arguments(completedFuture("foo"), COMPLETABLE_FUTURE), arguments(completionStage, COMPLETION_STAGE), arguments(new Date(), DATE), @@ -245,6 +252,7 @@ public static Stream should_work_with_any_InstanceOfFactory_source() arguments((LongPredicate) l -> l == 0, LONG_PREDICATE), arguments(LongStream.empty(), LONG_STREAM), arguments(newHashMap("k", "v"), MAP), + arguments(Pattern.compile("a*").matcher("aaa"), MATCHER), arguments(OffsetDateTime.now(), OFFSET_DATE_TIME), arguments(OffsetTime.now(), OFFSET_TIME), arguments(Optional.empty(), OPTIONAL), @@ -252,7 +260,7 @@ public static Stream should_work_with_any_InstanceOfFactory_source() arguments(OptionalInt.empty(), OPTIONAL_INT), arguments(OptionalLong.empty(), OPTIONAL_LONG), arguments(Paths.get("."), PATH), - arguments((Predicate) s -> s.isEmpty(), PREDICATE), + arguments((Predicate) String::isEmpty, PREDICATE), arguments(Short.MIN_VALUE, SHORT), arguments(new short[0], SHORT_ARRAY), arguments(new short[0][0], SHORT_2D_ARRAY), @@ -263,7 +271,7 @@ public static Stream should_work_with_any_InstanceOfFactory_source() arguments(new Exception(), THROWABLE), arguments(URI.create("http://localhost"), URI_TYPE), arguments(URI.create("http://localhost").toURL(), URL_TYPE), - arguments(ZonedDateTime.now(), InstanceOfAssertFactories.ZONED_DATE_TIME)); + arguments(ZonedDateTime.now(), ZONED_DATE_TIME)); } static class Data {