Releases: google/truth
Truth 0.31
New Subjects
- SortedMapSubject and SortedSetSubject
Changes to existing Subjects and Core classes
- Add GWT support to Java8 subjects
- Lock down some of the Subject infrastructure, making several methods final
- Add
@SafeVarargs
to some methods where appropriate - Depend on Guava 20.
- More use of usingTolerance() for relevant Subjects
- Various failure message improvements
New Extensions
- Protocol Buffers
- Support for lite and heavy (with proto-reflection) protocol buffers
- IterableProtoSubject
For details, see the complete list of included commits.
Truth 0.30
New Subjects
- OptionalSubject (for java.util.Optional, accessible via
Truth8.assertThat(Optional<T>)
)
(see details under "new extensions" below)
Changes to existing Subjects and Core classes
-
Preliminary versions of "Fuzzy Equality" for doubles/floats. See
DoublesSubject
for
new APIs, and we'll be updating the docs on fuzzy equality soon.- Subject implementers should note changes to the Service Provider Interface (SPI) for writing
custom Subject subclasses:getSubject()
->actual()
getDisplaySubject()
->actualAsString()
- If you want to provide a subject-specific string representation of the type being tested, a new
methodactualCustomStringRepresentation()
can be overridden. The deprecated
getDisplaySubject()
andgetSubject()
methods should not be overridden (and will be
deleted in Truth 1.0. The renamed methods arefinal
.
actualAsString()
has logic that not only consumes the string representation (default or custom)
but also honors.named()
and other contextual formatting.
- Subject implementers should note changes to the Service Provider Interface (SPI) for writing
-
More evolution of "Fuzzy" truth - near-value approximation for certain types rather than strict
equality is now supported by way of a "correspondence" mechanism, and the capabilities are
being extended to many existing subjects.-
To use:
assertThat(actualIterable) .comparingElementsUsing(correspondence) .containsExactlyElementsIn(expectedIterable);
Currently supports
containsExactlyElementsIn(Iterable<E>)
,doesNotContain(E)
, and
contains(E)
methods. Subjects forMap
,Iterable
, and theMultimap
types all support
correspondence. For more detail, see the javadoc for IterableSubject.UsingCorrespondence and
Correspondence
-
-
.named()
now supports a varargs/format construction, such as:assertThat(someBooleanFunction()) .named("processed %s(%s)", foo, bar) .isTrue();
This results in a more suitable error message:
Not true that processed foo(bar) <false> is true
as
compared with the default message, and requires less string concatenation where that may prove
awkward
New Extensions
- Add an extension for Java8 types, initially containing a subject for
java.util.Optional
-
Include "com.google.truth.extensions:truth-java8-extension:0.30" in your build dependencies
-
To use:
import static com.google.common.truth.Truth8.assertThat; import java.util.Optional; public class MyTest { @Test public void testOptional() { Optional<String> o = Optional.of("Foo"); assertThat(o).isPresent(); //succeeds assertThat(o).hasValue("Foo"); //succeeds assertThat(o).isEmpty(); // fails } }
-
Fixes
- Fix a missing
@Nullable
in AbstractVerb.that(T) - Various cleanups of code, docs, readme, javadocs, and contribution
Truth 0.29
New Subjects
- AtomicLongMapSubject
Changes to existing Subjects and Core classes
- Preliminary versions of "Fuzzy Equality" for doubles/floats. See
DoublesSubject
for
new APIs, and we'll be updating the docs on fuzzy equality soon. - Prefer
isEqualTo
instead ofequals
since that is a method with a fairly precise
meaning in Java, and we were hijacking it. .equals() shouldn't be called on Subject
implementations. - Multidimensional Array support in
ObjectArraySubject
- Lots of renames and deprecations.
- SPI/API cleanup
- marking a lot of subjects or their methods final, or noting where we can't
- start making parts of the infrastructure more in line with the Open/Closed Principle
(final methods, etc.) - stop storing "failure message" in the
TestVerb
, part 1
New Extensions
-
An extension/contrib submodule, for things we want to ship with Truth,
but which may need to be separate artifacts, mostly due to dependency
issues or general bloat. Including our first entry: RE2JSupport for
MessageLite
protocol buffers is also in extensions, but not released
in 0.29.
Fixes
- Some cleanups of generics
- Message improvements:
- Trim some stack trace of the obvious truth frames, to make it clearer where the
locus of error is. (i.e. who needs to see Subject.failComparing() in the stack trace?) - ThrowableSubject uses string comparision where reasonable (to take advantage of
JUnit'sComparisonFailure
) - fix BooleanSubject's handling of
null
in failure messaging - other message improvements
- Trim some stack trace of the obvious truth frames, to make it clearer where the
Miscellaneous
- Apply
@CheckReturnValue
across a wide range of methods (on by default).- Users are _strongly_ advised to use error-prone in their builds, to ensure
that this is checked, and the compiler errors out when people fail to call the
following chained methods.
- Users are _strongly_ advised to use error-prone in their builds, to ensure
- build and continuous test system fixes
- more recent upstream dependencies
- full formating of the codebase using google-java-format
- various improvements from error-prone
- improvements to the examples
- more flesh out some holes in the tests
Note: various methods are being deprecated in preparation for 1.0. A penultimate
pre-1.0 release will be cut with those deprecated methods intact. Then a 1.0 will
be released with those methods removed. This should give people a chance to
get the 1.0 features and benefits, but have a nice transition phase.