"""
Should emit:
B017 - on lines 23 and 41
"""
import asyncio
import unittest
import pytest

CONSTANT = True


def something_else() -> None:
    for i in (1, 2, 3):
        print(i)


class Foo:
    pass


class Foobar(unittest.TestCase):
    def evil_raises(self) -> None:
        with self.assertRaises(Exception):
            raise Exception("Evil I say!")

    def also_evil_raises(self) -> None:
        with self.assertRaises(BaseException):
            raise Exception("Evil I say!")

    def context_manager_raises(self) -> None:
        with self.assertRaises(Exception) as ex:
            raise Exception("Context manager is good")
        self.assertEqual("Context manager is good", str(ex.exception))

    def regex_raises(self) -> None:
        with self.assertRaisesRegex(Exception, "Regex is good"):
            raise Exception("Regex is good")

    def raises_with_absolute_reference(self):
        with self.assertRaises(asyncio.CancelledError):
            Foo()


def test_pytest_raises():
    with pytest.raises(Exception):
        raise ValueError("Hello")

    with pytest.raises(Exception), pytest.raises(ValueError):
        raise ValueError("Hello")

    with pytest.raises(Exception, "hello"):
        raise ValueError("This is fine")

    with pytest.raises(Exception, match="hello"):
        raise ValueError("This is also fine")

    with contextlib.nullcontext(), pytest.raises(Exception):
        raise ValueError("Multiple context managers")
