def test_configure(temp_dir_cwd, capsys, caplog):
    log_file = Path('file.log')
    stderr_handler, file_handler = logging_.configure(log_file)
    assert isinstance(stderr_handler, logging.StreamHandler)
    assert isinstance(file_handler, logging.FileHandler)
    
    logger = logging.getLogger(__name__)
    logger.info('Fake info')
    logger.debug('Ignored debug')
    logger.setLevel(logging.DEBUG)
    logger.debug('Fake debug')
    
    # stderr
    #
    # - level is INFO
    # - terse format
    expected = 'I: Fake info\n'
    actual = capsys.readouterr()[1]
    assert_text_equals(actual, expected)
    
    # log file
    #
    # - level is DEBUG
    # - long format with fairly unambiguous source
    log_file_content = path_.read(log_file)
    def prefix(log_type, package, module_name):
        return r'{} [0-9]{{4}}-[0-9]{{2}}-[0-9]{{2}} [0-9]{{2}}:[0-9]{{2}}:[0-9]{{2}},[0-9]{{3}} {} \({}:[0-9]+\):'.format(
            log_type, package, module_name
        )
    pattern = dedent('''\
        {}
        Fake info
         
        {}
        Fake debug
        '''
        .format(
            prefix('I', __name__, 'test_logging'),
            prefix('D', __name__, 'test_logging'),
        )
    )
    assert re.match(pattern, log_file_content, re.MULTILINE), 'Actual:{}\n\nExpected to match:\n{}'.format(log_file_content, pattern)
    
def test_read(path, contents):
    with path.open('w') as f:
        f.write(contents)
    assert path_.read(path) == contents