import pytest from pre_commit_hooks.check_executables_have_shebangs import main @pytest.mark.parametrize( 'content', ( b'#!/bin/bash\nhello world\n', b'#!/usr/bin/env python3.6', b'#!python', '#!☃'.encode(), ), ) def test_has_shebang(content, tmpdir): path = tmpdir.join('path') path.write(content, 'wb') assert main((path.strpath,)) == 0 @pytest.mark.parametrize( 'content', ( b'', b' #!python\n', b'\n#!python\n', b'python\n', '☃'.encode(), ), ) def test_bad_shebang(content, tmpdir, capsys): path = tmpdir.join('path') path.write(content, 'wb') assert main((path.strpath,)) == 1 _, stderr = capsys.readouterr() assert stderr.startswith(f'{path}: marked executable but')