/* * Copyright 2015 Google Inc. 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.errorprone.bugpatterns.testdata; import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestCase; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.mockito.Mockito; import java.util.HashMap; import java.util.Map; /** Test cases for missing fail */ public class MissingFailNegativeCases extends TestCase { private static final Logger logger = new Logger(); private static final Logger log = new Logger(); private static final Logger thingThatLogs = new Logger(); private boolean foo = true; public void expectedException_withFail() { try { dummyMethod(); Assert.fail(); } catch (Exception expected) {} } @SuppressWarnings("deprecation") // Need to recognize a framework call but don't want a warning. public void expectedException_withFrameworkFail() { try { dummyMethod(); junit.framework.Assert.fail(); } catch (Exception expected) {} } public void expectedException_withStaticFail() { try { dummyMethod(); fail(); } catch (Exception expected) {} } public void expectedException_returnInTry() { try { dummyMethod(); return; } catch (Exception expected) {} } public void expectedException_returnInCatch() { try { dummyMethod(); } catch (Exception expected) { return; } } public void expectedException_returnAfterCatch() { try { dummyMethod(); } catch (Exception expected) {} return; } public void expectedException_throwInCatch() throws Exception { try { dummyMethod(); } catch (Exception expected) { throw new Exception(); } } public void expectedException_throwInTry() throws Exception { boolean foo = false; try { if (foo) { throw new Exception(); } dummyMethod(); } catch (Exception expected) {} } public void expectedException_throwSynonymInCatch() throws Exception { try { dummyMethod(); } catch (Exception expected) { Assert.assertFalse(true); } } public void assertInCatch_testCaseThrowSynonymInCatch() throws Exception { try { dummyMethod(); } catch (Exception e) { assertFalse(true); } } public void expectedException_throwSynonymInTry() throws Exception { boolean foo = false; try { if (foo) { Assert.assertFalse(true); } dummyMethod(); } catch (Exception expected) {} } public void expectedException_assertTrueFalse() throws Exception { try { dummyMethod(); } catch (Exception expected) { Assert.assertTrue(false); } } public void expectedException_assertTrueFalseWithMessage() throws Exception { try { dummyMethod(); } catch (Exception expected) { Assert.assertTrue("This should never happen", false); } } public void expectedException_testCaseAssertTrueFalseWithMessage() throws Exception { try { dummyMethod(); } catch (Exception expected) { assertTrue("This should never happen", false); } } public void assertInCatch_assertTrueFalseWithMessage() throws Exception { try { dummyMethod(); } catch (Exception e) { Assert.assertTrue("This should never happen", false); } } public void expectedException_assertBoxedTrueFalse() throws Exception { try { dummyMethod(); } catch (Exception expected) { Assert.assertTrue(Boolean.FALSE); } } public void expectedException_assertUnequal() throws Exception { try { dummyMethod(); } catch (Exception expected) { Assert.assertEquals(1, 2); } } public void expectedException_testCaseAssertUnequal() throws Exception { try { dummyMethod(); } catch (Exception expected) { assertEquals(1, 2); } } public void expectedException_assertFalse() throws Exception { try { dummyMethod(); } catch (Exception expected) { assert(false); } } @Before public void expectedException_beforeAnnotation() throws Exception { try { dummyMethod(); } catch (Exception expected) {} } @After public void expectedException_afterAnnotation() throws Exception { try { dummyMethod(); } catch (Exception expected) {} } // Don't match setUp methods. public void setUp() throws Exception { try { dummyMethod(); } catch (Exception expected) {} } // Don't match tearDown methods. public void tearDown() throws Exception { try { dummyMethod(); } catch (Exception expected) {} } // Don't match main methods. public static void main(String[] args) throws Exception { try { dummyMethod(); } catch (Exception expected) {} } // Don't match suite methods. public static Test suite() throws Exception { try { dummyMethod(); } catch (Exception expected) {} int x; // Don't return right after catch so as not to trigger that exclusion. return null; } public void expectedException_interruptedException() throws Exception { try { dummyMethod(); } catch (InterruptedException expected) {} } public void expectedException_assertionError() throws Exception { try { dummyMethod(); } catch (AssertionError expected) {} } public void expectedException_assertionFailedError() throws Exception { try { dummyMethod(); } catch (AssertionFailedError expected) {} } public void expectedException_throwable() throws Exception { try { dummyMethod(); } catch (Throwable expected) {} } public void testExpectedException_loopInTestMethod() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); } catch (Exception expected) {} } } public void expectedException_loopInHelperMethod() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); } catch (Exception expected) {} } } public static Map<String, String> assertInCatch_loopInHelperMethod(String... strings) { Map<String, String> map = new HashMap<>(); for (String s : strings) { try { map.put(s, s); } catch (Exception e) { Assert.assertTrue(s.contains("foo")); } } return map; } // prefixed with "test" but private - not a test method. private void testExpectedException_loopInPrivateTestHelperMethod() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); } catch (Exception expected) {} } } // prefixed with "test" but returns - not a test method. public String testExpectedException_loopInReturningTestHelperMethod() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); } catch (Exception expected) {} } return ""; } // Prefixed with "test" to not trigger loop in helper method exclusion. public void testExpectedException_continueInCatch() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); } catch (Exception expected) { continue; } } } // Prefixed with "test" to not trigger loop in helper method exclusion. public void testExpectedException_continueInTry() throws Exception { for (int i = 0; i < 2; i++) { try { dummyMethod(); continue; } catch (Exception expected) { } } } public void expectedException_finally() { try { dummyMethod(); } catch (Exception expected) { } finally {} } public void expectedException_logInCatch() { try { dummyMethod(); } catch (Exception expected) { thingThatLogs.log(); } } public void expectedException_loggerCallInCatch() { try { dummyMethod(); } catch (Exception expected) { logger.info(); } } public void expectedException_logCallInCatch() { try { dummyMethod(); } catch (Exception expected) { log.info(); } } public void assertInCatch_assertLastCallInTry() { try { dummyMethod(); assertDummy(); } catch (Exception e) { assertDummy(); } } public void assertInCatch_fieldAssignmentInCatch() { try { dummyMethod(); } catch (Exception e) { assertDummy(); foo = true; } } public void assertInCatch_assertOnFieldInCatch() { try { dummyMethod(); } catch (Exception e) { Assert.assertTrue(foo); } } public void assertInCatch_assertOnVariableInCatch() { boolean bar = false; try { dummyMethod(); } catch (Exception e) { Assert.assertTrue(bar); } } public void assertInCatch_verifyBeforeCatch() { try { dummyMethod(); Mockito.verify(new Dummy()).dummy(); } catch (Exception e) { assertDummy(); } } public void assertInCatch_noopAssertInCatch() { try { dummyMethod(); } catch (Exception e) { assertTrue(true); } } public void expectedException_failInCatch() { try { dummyMethod(); } catch (Exception expected) { Assert.fail(); } } public void expectedException_whileTrue() { try { while (true) { dummyMethod(); } } catch (Exception expected) {} } public void expectedException_customFail() { try { dummyMethod(); specialFail(); } catch (Exception expected) {} } private static void dummyMethod() throws InterruptedException {} private static void assertDummy() {} private static void specialFail() {} private static class Logger { void log() {}; void info() {}; } private static class Dummy { String dummy() { return ""; } } }