diff --git a/javatests/google/registry/testing/LogsSubject.java b/javatests/google/registry/testing/LogsSubject.java index b7d7f74f4..f83b95a61 100644 --- a/javatests/google/registry/testing/LogsSubject.java +++ b/javatests/google/registry/testing/LogsSubject.java @@ -16,11 +16,16 @@ package google.registry.testing; import static com.google.common.truth.Truth.assertAbout; +import com.google.common.collect.ImmutableList; import com.google.common.testing.TestLogHandler; import com.google.common.truth.AbstractVerb.DelegatedVerb; +import com.google.common.truth.Correspondence; import com.google.common.truth.FailureStrategy; import com.google.common.truth.Subject; + import google.registry.testing.TruthChainer.And; + +import java.util.List; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -36,27 +41,43 @@ public class LogsSubject extends Subject { super(strategy, subject); } - public And hasNoLogsAtLevel(Level level) { + private static final Correspondence CONTAINS_CORRESPONDENCE = + new Correspondence() { + @Override + public boolean compare(String actual, String expected) { + return actual.contains(expected); + } + + @Override + public String toString() { + return "contains"; + } + }; + + private List getMessagesAtLevel(Level level) { + ImmutableList.Builder builder = ImmutableList.builder(); for (LogRecord log : actual().getStoredLogRecords()) { if (log.getLevel().equals(level)) { - failWithRawMessage( - "Not true that there are no logs at level %s. Found <%s>.", level, log.getMessage()); + builder.add(log.getMessage()); } } + return builder.build(); + } + + public And hasNoLogsAtLevel(Level level) { + check() + .withFailureMessage("Logs at level %s", level) + .that(getMessagesAtLevel(level)) + .isEmpty(); return new And<>(this); } public And hasLogAtLevelWithMessage(Level level, String message) { - boolean found = false; - for (LogRecord log : actual().getStoredLogRecords()) { - if (log.getLevel().equals(level) && log.getMessage().contains(message)) { - found = true; - break; - } - } - if (!found) { - failWithRawMessage("Found no logs at level %s with message %s.", level, message); - } + check() + .withFailureMessage("Logs at level %s", level) + .that(getMessagesAtLevel(level)) + .comparingElementsUsing(CONTAINS_CORRESPONDENCE) + .contains(message); return new And<>(this); }