diff options
Diffstat (limited to 'src')
5 files changed, 102 insertions, 65 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java new file mode 100644 index 0000000000..534c173f35 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java @@ -0,0 +1,37 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.testutil; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.Iterables; +import com.google.common.truth.FailureStrategy; +import com.google.common.truth.IterableSubject; +import com.google.common.truth.Subject; +import com.google.devtools.build.lib.events.Event; +import javax.annotation.Nullable; + +/** + * {@link Subject} for {@code Iterable<Event>} that provides an {@link IterableSubject} of {@link + * String} objects as opposed to the harder-to-assert-on {@link Event} objects. + */ +class EventIterableSubject extends Subject<EventIterableSubject, Iterable<Event>> { + EventIterableSubject(FailureStrategy failureStrategy, @Nullable Iterable<Event> actual) { + super(failureStrategy, actual); + } + + IterableSubject hasEventsThat() { + return assertThat(Iterables.transform(actual(), Event::getMessage)); + } +} diff --git a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java new file mode 100644 index 0000000000..fd46f27642 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java @@ -0,0 +1,36 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.testutil; + +import com.google.common.truth.FailureStrategy; +import com.google.common.truth.IterableSubject; +import com.google.common.truth.SubjectFactory; +import com.google.common.truth.Truth; +import com.google.devtools.build.lib.events.Event; + +/** + * {@link SubjectFactory} for {@code Iterable<Event>} objects, providing {@link IterableSubject}s of + * {@link String} objects for easy asserting. + */ +public class EventIterableSubjectFactory + extends SubjectFactory<EventIterableSubject, Iterable<Event>> { + public static IterableSubject assertThatEvents(Iterable<Event> events) { + return Truth.assertAbout(new EventIterableSubjectFactory()).that(events).hasEventsThat(); + } + + @Override + public EventIterableSubject getSubject(FailureStrategy fs, Iterable<Event> eventCollector) { + return new EventIterableSubject(fs, eventCollector); + } +} diff --git a/src/test/java/com/google/devtools/build/lib/testutil/MoreAsserts.java b/src/test/java/com/google/devtools/build/lib/testutil/MoreAsserts.java index 92b00647d6..7564316d1b 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/MoreAsserts.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/MoreAsserts.java @@ -24,7 +24,6 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.devtools.build.lib.events.Event; @@ -53,21 +52,6 @@ public class MoreAsserts { assertThat(comp.compare(expected, actual)).isEqualTo(0); } - public static <T> void assertContentsAnyOrder( - Iterable<? extends T> expected, Iterable<? extends T> actual, - Comparator<? super T> comp) { - assertThat(actual).hasSize(Iterables.size(expected)); - int i = 0; - for (T e : expected) { - for (T a : actual) { - if (comp.compare(e, a) == 0) { - i++; - } - } - } - assertThat(actual).hasSize(i); - } - /** * Scans if an instance of given class is strongly reachable from a given * object. diff --git a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java index df97dc6b06..f3cf5a83d0 100644 --- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java +++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java @@ -15,9 +15,7 @@ package com.google.devtools.build.skyframe; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; -import static com.google.devtools.build.lib.testutil.MoreAsserts.assertContainsEvent; -import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCount; -import static com.google.devtools.build.lib.testutil.MoreAsserts.assertNoEvents; +import static com.google.devtools.build.lib.testutil.EventIterableSubjectFactory.assertThatEvents; import static com.google.devtools.build.skyframe.ErrorInfoSubjectFactory.assertThatErrorInfo; import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory.assertThatEvaluationResult; import static com.google.devtools.build.skyframe.GraphTester.CONCATENATE; @@ -150,16 +148,14 @@ public class MemoizingEvaluatorTest { tester.set("x", new StringValue("y")).setWarning("fizzlepop"); StringValue value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); - assertContainsEvent(eventCollector, "fizzlepop"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("fizzlepop"); initializeReporter(); tester.invalidate(); value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); if (eventsStored()) { - assertContainsEvent(eventCollector, "fizzlepop"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("fizzlepop"); } } @@ -443,9 +439,7 @@ public class MemoizingEvaluatorTest { initializeReporter(); tester.evalAndGet("top"); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "warn-d1"); - assertContainsEvent(eventCollector, "warn-d2"); - assertEventCount(2, eventCollector); + assertThatEvents(eventCollector).containsExactly("warn-d1", "warn-d2"); } } } @@ -467,8 +461,7 @@ public class MemoizingEvaluatorTest { .isEqualTo(topKey.toString()); assertThat(result.getError(topKey).getException()).isInstanceOf(SomeErrorException.class); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "warn-dep"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("warn-dep"); } } } @@ -489,8 +482,7 @@ public class MemoizingEvaluatorTest { .isEqualTo(topKey.toString()); assertThat(result.getError(topKey).getException()).isInstanceOf(SomeErrorException.class); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "warning msg"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("warning msg"); } } } @@ -511,8 +503,7 @@ public class MemoizingEvaluatorTest { .isEqualTo(topKey.toString()); assertThat(result.getError(topKey).getException()).isInstanceOf(SomeErrorException.class); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "warning msg"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("warning msg"); } } } @@ -527,8 +518,7 @@ public class MemoizingEvaluatorTest { initializeReporter(); tester.eval(/*keepGoing=*/false, "t1", "t2"); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "look both ways before crossing"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("look both ways before crossing"); } } } @@ -543,16 +533,14 @@ public class MemoizingEvaluatorTest { initializeReporter(); tester.evalAndGetError("error-value"); if (i == 0 || eventsStored()) { - assertContainsEvent(eventCollector, "don't chew with your mouth open"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("don't chew with your mouth open"); } } initializeReporter(); tester.evalAndGet("warning-value"); if (eventsStored()) { - assertContainsEvent(eventCollector, "don't chew with your mouth open"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("don't chew with your mouth open"); } } @@ -566,17 +554,14 @@ public class MemoizingEvaluatorTest { StringValue value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); - assertContainsEvent(eventCollector, "fizzlepop"); - assertContainsEvent(eventCollector, "just letting you know"); - assertEventCount(2, eventCollector); + assertThatEvents(eventCollector).containsExactly("fizzlepop", "just letting you know"); if (eventsStored()) { // On the rebuild, we only replay warning messages. initializeReporter(); value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); - assertContainsEvent(eventCollector, "fizzlepop"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("fizzlepop"); } } @@ -622,8 +607,7 @@ public class MemoizingEvaluatorTest { "just letting you know"); tester.evalAndGetError("error-value"); - assertContainsEvent(eventCollector, "just letting you know"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("just letting you know"); // Change the progress message. tester.getOrCreate("error-value").setHasTransientError(true).setProgress( @@ -633,15 +617,14 @@ public class MemoizingEvaluatorTest { for (int i = 0; i < 2; i++) { initializeReporter(); tester.evalAndGetError("error-value"); - assertNoEvents(eventCollector); + assertThatEvents(eventCollector).isEmpty(); } // When invalidating errors, we should show the new progress message. initializeReporter(); tester.invalidateTransientErrors(); tester.evalAndGetError("error-value"); - assertContainsEvent(eventCollector, "letting you know more"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("letting you know more"); } @Test @@ -1929,14 +1912,12 @@ public class MemoizingEvaluatorTest { tester.set("x", new StringValue("y")).setWarning("fizzlepop"); StringValue value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); - assertContainsEvent(eventCollector, "fizzlepop"); - assertEventCount(1, eventCollector); + assertThatEvents(eventCollector).containsExactly("fizzlepop"); tester.invalidate(); value = (StringValue) tester.evalAndGet("x"); assertThat(value.getValue()).isEqualTo("y"); // No new events emitted. - assertEventCount(1, eventCollector); } /** @@ -2056,7 +2037,7 @@ public class MemoizingEvaluatorTest { .that(numTopInvocations.get()) .isEqualTo(3); } - assertContainsEvent(eventCollector, warningText); + assertThatEvents(eventCollector).containsExactly(warningText); assertThat(topSignaled.getCount()).isEqualTo(0); assertThat(topRestartedBuild.getCount()).isEqualTo(0); } @@ -3511,10 +3492,11 @@ public class MemoizingEvaluatorTest { assertStringValue(val, tester.evalAndGet( /*keepGoing=*/false, parent)); assertThat(parentEvaluated.get()).isEqualTo(1); if (hasEvent) { - assertContainsEvent(eventCollector, "shmoop"); + assertThatEvents(eventCollector).containsExactly("shmoop"); } else { - assertEventCount(0, eventCollector); + assertThatEvents(eventCollector).isEmpty(); } + eventCollector.clear(); tester.resetPlayedEvents(); tester.getOrCreate(child, /*markAsModified=*/true); @@ -3522,9 +3504,9 @@ public class MemoizingEvaluatorTest { assertStringValue(val, tester.evalAndGet( /*keepGoing=*/false, parent)); assertThat(parentEvaluated.get()).isEqualTo(2); if (hasEvent) { - assertContainsEvent(eventCollector, "shmoop"); + assertThatEvents(eventCollector).containsExactly("shmoop"); } else { - assertEventCount(0, eventCollector); + assertThatEvents(eventCollector).isEmpty(); } } @@ -3548,12 +3530,13 @@ public class MemoizingEvaluatorTest { parentEvaluated, null, null, false, parentVal, ImmutableList.of(child))); assertThat(tester.evalAndGet( /*keepGoing=*/false, parent)).isEqualTo(parentVal); assertThat(parentEvaluated.getCount()).isEqualTo(1); - assertContainsEvent(eventCollector, "bloop"); + assertThatEvents(eventCollector).containsExactly("bloop"); + eventCollector.clear(); tester.resetPlayedEvents(); tester.getOrCreate(child, /*markAsModified=*/ true); tester.invalidate(); assertThat(tester.evalAndGet( /*keepGoing=*/false, parent)).isEqualTo(parentVal); - assertContainsEvent(eventCollector, "bloop"); + assertThatEvents(eventCollector).containsExactly("bloop"); assertThat(parentEvaluated.getCount()).isEqualTo(1); } diff --git a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java index db73be54fe..bc79489dc1 100644 --- a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java +++ b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java @@ -16,7 +16,7 @@ package com.google.devtools.build.skyframe; import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; -import static com.google.devtools.build.lib.testutil.MoreAsserts.assertContainsEvent; +import static com.google.devtools.build.lib.testutil.EventIterableSubjectFactory.assertThatEvents; import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory.assertThatEvaluationResult; import static com.google.devtools.build.skyframe.GraphTester.CONCATENATE; import static org.junit.Assert.fail; @@ -412,8 +412,7 @@ public class ParallelEvaluatorTest { set("a", "a").setWarning("warning on 'a'"); StringValue value = (StringValue) eval(false, GraphTester.toSkyKey("a")); assertThat(value.getValue()).isEqualTo("a"); - assertContainsEvent(storedEventHandler.getEvents(), "warning on 'a'"); - assertThat(storedEventHandler.getEvents()).hasSize(1); + assertThatEvents(storedEventHandler.getEvents()).containsExactly("warning on 'a'"); } /** Regression test: events from already-done value not replayed. */ @@ -498,15 +497,13 @@ public class ParallelEvaluatorTest { evaluator.eval(ImmutableList.of(a)); assertThat(evaluated.get()).isTrue(); assertThat(storedEventHandler.getEvents()).hasSize(2); - assertContainsEvent(storedEventHandler.getEvents(), "boop"); - assertContainsEvent(storedEventHandler.getEvents(), "beep"); + assertThatEvents(storedEventHandler.getEvents()).containsExactly("boop", "beep"); storedEventHandler.clear(); evaluator = makeEvaluator(graph, tester.getSkyFunctionMap(), /*keepGoing=*/ false); evaluated.set(false); evaluator.eval(ImmutableList.of(a)); assertThat(evaluated.get()).isFalse(); - assertThat(storedEventHandler.getEvents()).hasSize(1); - assertContainsEvent(storedEventHandler.getEvents(), "boop"); + assertThatEvents(storedEventHandler.getEvents()).containsExactly("boop"); } @Test |