# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals

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('UTF-8'),
))
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('UTF-8'),

))
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('{}: marked executable but'.format(path.strpath))
