From 481d38973052f069237bd4bd8188bc4837da7479 Mon Sep 17 00:00:00 2001 From: Florian Weikert Date: Thu, 26 Nov 2015 11:06:46 +0000 Subject: Created JUnit4-compliant versions of FoundationTestCase, BuildViewTestCase and AnalysisTestCase. These classes allow us to migrate unit tests to JUnit4 one-by-one. -- MOS_MIGRATED_REVID=108778482 --- .../lib/testutil/FoundationTestCaseForJunit4.java | 137 +++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java (limited to 'src/test/java/com/google/devtools/build/lib/testutil') diff --git a/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java b/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java new file mode 100644 index 0000000000..08688b13f6 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/testutil/FoundationTestCaseForJunit4.java @@ -0,0 +1,137 @@ +// Copyright 2014 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 org.junit.Assert.fail; + +import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.events.EventCollector; +import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.events.EventKind; +import com.google.devtools.build.lib.events.Reporter; +import com.google.devtools.build.lib.util.BlazeClock; +import com.google.devtools.build.lib.vfs.FileSystem; +import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; + +import org.junit.After; +import org.junit.Before; + +import java.util.Set; + +/** + * A helper class for implementing tests of the "foundation" library. + */ +public abstract class FoundationTestCaseForJunit4 { + + protected Path rootDirectory; + + protected Path outputBase; + + protected Path actionOutputBase; + + // May be overridden by subclasses: + protected Reporter reporter; + protected EventCollector eventCollector; + protected Scratch scratch; + + // Individual tests can opt-out of this handler if they expect an error, by + // calling reporter.removeHandler(failFastHandler). + protected static final EventHandler failFastHandler = new EventHandler() { + @Override + public void handle(Event event) { + if (EventKind.ERRORS.contains(event.getKind())) { + fail(event.toString()); + } + } + }; + + protected static final EventHandler printHandler = new EventHandler() { + @Override + public void handle(Event event) { + System.out.println(event); + } + }; + + @Before + public final void initializeFileSystemAndDirectories() throws Exception { + scratch = new Scratch(createFileSystem(), "/workspace"); + outputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/"); + rootDirectory = scratch.dir("/workspace"); + scratch.file(rootDirectory.getRelative("WORKSPACE").getPathString()); + actionOutputBase = scratch.dir("/usr/local/google/_blaze_jrluser/FAKEMD5/action_out/"); + } + + @Before + public final void initializeLogging() throws Exception { + eventCollector = new EventCollector(EventKind.ERRORS_AND_WARNINGS); + reporter = new Reporter(eventCollector); + reporter.addHandler(failFastHandler); + } + + @After + public final void clearInterrupts() throws Exception { + Thread.interrupted(); // Clear any interrupt pending against this thread, + // so that we don't cause later tests to fail. + } + + // To be overriden by sub classes if they want to disable loading. + protected boolean isLoadingEnabled() { + return true; + } + + /** + * Creates the file system; override to inject FS behavior. + */ + protected FileSystem createFileSystem() { + return new InMemoryFileSystem(BlazeClock.instance()); + } + + // Mix-in assertions: + + protected void assertNoEvents() { + MoreAsserts.assertNoEvents(eventCollector); + } + + protected Event assertContainsEvent(String expectedMessage) { + return MoreAsserts.assertContainsEvent(eventCollector, + expectedMessage); + } + + protected Event assertContainsEvent(String expectedMessage, Set kinds) { + return MoreAsserts.assertContainsEvent(eventCollector, + expectedMessage, + kinds); + } + + protected void assertContainsEventWithFrequency(String expectedMessage, + int expectedFrequency) { + MoreAsserts.assertContainsEventWithFrequency(eventCollector, expectedMessage, + expectedFrequency); + } + + protected void assertDoesNotContainEvent(String expectedMessage) { + MoreAsserts.assertDoesNotContainEvent(eventCollector, + expectedMessage); + } + + protected Event assertContainsEventWithWordsInQuotes(String... words) { + return MoreAsserts.assertContainsEventWithWordsInQuotes( + eventCollector, words); + } + + protected void assertContainsEventsInOrder(String... expectedMessages) { + MoreAsserts.assertContainsEventsInOrder(eventCollector, expectedMessages); + } +} -- cgit v1.2.3