rspec/rules/S5838/java/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

146 lines
8.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

== Why is this an issue?
AssertJ contains many assertions methods specific to common types. Both versions will test the same things, but the dedicated one will provide a better error message, simplifying the debugging process.
This rule reports an issue when an assertion can be simplified to a dedicated one.
The array below gives a non-exhaustive list of assertion reported by the rule. Code behaving similarly, or with a negation will also be reported.
[frame=all]
[cols="^1,^1"]
|===
|Original|Dedicated
s|Related to Object|
|``++assertThat(getObject()).isEqualTo(null)++``|``++assertThat(getObject()).isNull()++``
|``++assertThat(getBoolean()).isEqualTo(true)++``|``++assertThat(getBoolean()).isTrue()++``
|``++assertThat(getBoolean()).isEqualTo(false)++``|``++assertThat(getBoolean()).isFalse()++``
|``++assertThat(x.equals(y)).isTrue()++``|``++assertThat(x).isEqualTo(y)++``
|``++assertThat(x == y).isTrue()++``|``++assertThat(x).isSameAs(y)++``
|``++assertThat(x == null).isTrue()++``|``++assertThat(x).isNull()++``
|``++assertThat(x.toString()).isEqualTo(y)++``|``++assertThat(x).hasToString(y)++``
|``++assertThat(x.hashCode()).isEqualTo(y.hashCode())++``|``++assertThat(x).hasSameHashCodeAs(y)++``
|``++assertThat(getObject() instanceof MyClass).isTrue()++``|``++assertThat(getObject()).isInstanceOf(MyClass.class)++``
s|Related to ``++Comparable++``|
|``++assertThat(x.compareTo(y)).isZero()++``|``++assertThat(x).isEqualByComparingTo(y)++``
|``++assertThat(x >= y).isTrue()++``|``++assertThat(x).isGreaterThanOrEqualTo(y)++``
|``++assertThat(x > y).isTrue()++``|``++assertThat(x).isGreaterThan(y)++``
|``++assertThat(x <= y).isTrue()++``|``++assertThat(x).isLessThanOrEqualTo(y)++``
|``++assertThat(x < y).isTrue()++``|``++assertThat(x).isLessThan(y)++``
s|Related to ``++String++``|
|``++assertThat(getString().isEmpty()).isTrue()++``|``++assertThat(getString()).isEmpty()++``
|``++assertThat(getString()).hasSize(0)++``|``++assertThat(getString()).isEmpty()++``
|``++assertThat(getString().equals(expected)).isTrue()++``|``++assertThat(getString()).isEqualTo(expected)++``
|``++assertThat(getString().equalsIgnoreCase(expected)).isTrue()++``|``++assertThat(getString()).isEqualToIgnoringCase(expected)++``
|``++assertThat(getString().contains(expected)).isTrue()++``|``++assertThat(getString()).contains(expected)++``
|``++assertThat(getString().startsWith(expected)).isTrue()++``|``++assertThat(getString()).startsWith(expected)++``
|``++assertThat(getString().endsWith(expected)).isTrue()++``|``++assertThat(getString()).endsWith(expected)++``
|``++assertThat(getString().matches(expected)).isTrue()++``|``++assertThat(getString()).matches(expected)++``
|``++assertThat(getString().trim()).isEmpty()++``|``++assertThat(getString()).isBlank()++``
|``++assertThat(getString().length()).isEqualTo(length)++``|``++assertThat(getString()).hasSize(length)++``
|``++assertThat(getString().length()).hasSize(expected.length())++``|``++assertThat(getString()).hasSameSizeAs(expected)++``
s| Related to ``++File++``|
|``++assertThat(getFile()).hasSize(0)++``|``++assertThat(getFile()).isEmpty()++``
|``++assertThat(getFile().length()).isZero()++``|``++assertThat(getFile()).isEmpty()++``
|``++assertThat(getFile().length()).isEqualTo(length)++``|``++assertThat(getFile()).hasSize(length)++``
|``++assertThat(getFile().canRead()).isTrue()++``|``++assertThat(getFile()).canRead()++``
|``++assertThat(getFile().canWrite()).isTrue()++``|``++assertThat(getFile()).canWrite()++``
|``++assertThat(getFile().exists()).isTrue()++``|``++assertThat(getFile()).exists()++``
|``++assertThat(getFile().getName()).isEqualTo(name)++``|``++assertThat(getFile()).hasName(name)++``
|``++assertThat(getFile().getParent()).isEqualTo(pathname)++``|``++assertThat(getFile()).hasParent(pathname)++``
|``++assertThat(getFile().getParentFile()).isNull()++``|``++assertThat(getFile()).hasNoParent()++``
|``++assertThat(getFile().isAbsolute()).isTrue()++``|``++assertThat(getFile()).isAbsolute()++``
|``++assertThat(getFile().isAbsolute()).isFalse()++``|``++assertThat(getFile()).isRelative()++``
|``++assertThat(getFile().isDirectory()).isTrue()++``|``++assertThat(getFile()).isDirectory()++``
|``++assertThat(getFile().isFile()).isTrue()++``|``++assertThat(getFile()).isFile()++``
|``++assertThat(getFile().list()).isEmpty()++``|``++assertThat(getFile()).isEmptyDirectory()++``
s| Related to ``++Path++``|
|``++assertThat(getPath().startsWith(path)).isTrue()++``|``++assertThat(getPath()).startsWithRaw(path)++``
|``++assertThat(getPath().endsWith(path)).isTrue()++``|``++assertThat(getPath()).endsWithRaw(path)++``
|``++assertThat(getPath().getParent()).isEqualTo(name)++``|``++assertThat(getPath()).hasParentRaw(name)++``
|``++assertThat(getPath().getParent()).isNull()++``|``++assertThat(getPath()).hasNoParentRaw()++``
|``++assertThat(getPath().isAbsolute()).isTrue()++``|``++assertThat(getPath()).isAbsolute()++``
|``++assertThat(getPath().isAbsolute()).isFalse()++``|``++assertThat(getPath()).isRelative()++``
s| Related to ``++Array++``|
|``++assertThat(getArray().length).isZero()++``|``++assertThat(getArray()).isEmpty()++``
|``++assertThat(getArray().length).isEqualTo(length)++``|``++assertThat(getArray()).hasSize(length)++``
|``++assertThat(getArray().length).isEqualTo(anotherArray.length)++``|``++assertThat(getArray()).hasSameSizeAs(anotherArray)++``
|``++assertThat(getArray().length).isLessThanOrEqualTo(expression)++``|``++assertThat(getArray()).hasSizeLessThanOrEqualTo(expression)++``
|``++assertThat(getArray().length).isLessThan(expression)++``|``++assertThat(getArray()).hasSizeLessThan(expression)++``
|``++assertThat(getArray().length).isGreaterThan(expression)++``|``++assertThat(getArray()).hasSizeGreaterThan(expression)++``
|``++assertThat(getArray().length).isGreaterThanOrEqualTo(expression)++``|``++assertThat(getArray()).hasSizeGreaterThanOrEqualTo(expression)++``
s|Related to ``++Collection++``|
|``++assertThat(getCollection().isEmpty()).isTrue()++``|``++assertThat(getCollection()).isEmpty()++``
|``++assertThat(getCollection().size()).isZero()++``|``++assertThat(getCollection()).isEmpty()++``
|``++assertThat(getCollection().contains(something)).isTrue()++``|``++assertThat(getCollection()).contains(something)++``
|``++assertThat(getCollection().containsAll(otherCollection)).isTrue()++``|``++assertThat(getCollection()).containsAll(otherCollection)++``
s|Related to ``++Map++``|
|``++assertThat(getMap().size()).isEqualTo(otherMap().size()++``|``++assertThat(getMap()).hasSameSizeAs(otherMap())++``
|``++assertThat(getMap().containsKey(key)).isTrue()++``|``++assertThat(getMap()).containsKey(key)++``
|``++assertThat(getMap().keySet()).contains(key)++``|``++assertThat(getMap()).containsKey(key)++``
|``++assertThat(getMap().keySet()).containsOnlyKey(key)++``|``++assertThat(getMap()).containsOnlyKey(key)++``
|``++assertThat(getMap().containsValue(value)).isTrue()++``|``++assertThat(getMap()).containsValue(value)++``
|``++assertThat(getMap().values()).contains(value)++``|``++assertThat(getMap()).containsValue(value)++``
|``++assertThat(getMap().get(key)).isEqualTo(value)++``|``++assertThat(getMap()).containsEntry(key, value)++``
s|Related to ``++Optional++``|
|``++assertThat(getOptional().isPresent()).isTrue()++``|``++assertThat(getOptional()).isPresent()++``
|``++assertThat(getOptional().get()).isEqualTo(something)++``|``++assertThat(getOptional()).contains(something)++``
|``++assertThat(getOptional().get()).isSameAs(something)++``|``++assertThat(getOptional()).containsSame(something)++``
|===
=== Noncompliant code example
[source,java]
----
assertThat(getObject()).isEqualTo(null); // Noncompliant
assertThat(getObject()).isNotEqualTo(null); // Noncompliant - not listed above but also supported
assertThat(getString().trim()).isEmpty();
assertThat(getFile().canRead()).isTrue();
assertThat(getPath().getParent()).isNull();
----
=== Compliant solution
[source,java]
----
assertThat(getObject()).isNull();
assertThat(getObject()).isNotNull();
assertThat(getString()).isBlank();
assertThat(getFile()).canRead();
assertThat(getPath()).hasNoParentRaw();
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Use XXX instead.
=== Highlighting
assertThat(expression).method()
* Primary: method
* Secondary: expression
endif::env-github,rspecator-view[]