
import py
import os, sys
from py._io import terminalwriter
import codecs
import pytest

def test_get_terminal_width():
    x = py.io.get_terminal_width
    assert x == terminalwriter.get_terminal_width

def test_getdimensions(monkeypatch):
    fcntl = py.test.importorskip("fcntl")
    import struct
    l = []
    monkeypatch.setattr(fcntl, 'ioctl', lambda *args: l.append(args))
    try:
        terminalwriter._getdimensions()
    except (TypeError, struct.error):
        pass
    assert len(l) == 1
    assert l[0][0] == 1

def test_terminal_width_COLUMNS(monkeypatch):
    """ Dummy test for get_terminal_width
    """
    fcntl = py.test.importorskip("fcntl")
    monkeypatch.setattr(fcntl, 'ioctl', lambda *args: int('x'))
    monkeypatch.setenv('COLUMNS', '42')
    assert terminalwriter.get_terminal_width() == 42
    monkeypatch.delenv('COLUMNS', raising=False)

def test_terminalwriter_defaultwidth_80(monkeypatch):
    monkeypatch.setattr(terminalwriter, '_getdimensions', lambda: 0/0)
    monkeypatch.delenv('COLUMNS', raising=False)
    tw = py.io.TerminalWriter()
    assert tw.fullwidth == 80

def test_terminalwriter_getdimensions_bogus(monkeypatch):
    monkeypatch.setattr(terminalwriter, '_getdimensions', lambda: (10,10))
    monkeypatch.delenv('COLUMNS', raising=False)
    tw = py.io.TerminalWriter()
    assert tw.fullwidth == 80

def test_terminalwriter_getdimensions_emacs(monkeypatch):
    # emacs terminal returns (0,0) but set COLUMNS properly
    monkeypatch.setattr(terminalwriter, '_getdimensions', lambda: (0,0))
    monkeypatch.setenv('COLUMNS', '42')
    tw = py.io.TerminalWriter()
    assert tw.fullwidth == 42

def test_terminalwriter_computes_width(monkeypatch):
    monkeypatch.setattr(terminalwriter, 'get_terminal_width', lambda: 42)
    tw = py.io.TerminalWriter()
    assert tw.fullwidth == 42

def test_terminalwriter_default_instantiation():
    tw = py.io.TerminalWriter(stringio=True)
    assert hasattr(tw, 'stringio')

def test_terminalwriter_dumb_term_no_markup(monkeypatch):
    monkeypatch.setattr(os, 'environ', {'TERM': 'dumb', 'PATH': ''})
    class MyFile:
        closed = False
        def isatty(self):
            return True
    monkeypatch.setattr(sys, 'stdout', MyFile())
    try:
        assert sys.stdout.isatty()
        tw = py.io.TerminalWriter()
        assert not tw.hasmarkup
    finally:
        monkeypatch.undo()

def test_terminalwriter_file_unicode(tmpdir):
    f = py.std.codecs.open(str(tmpdir.join("xyz")), "wb", "utf8")
    tw = py.io.TerminalWriter(file=f)
    assert tw.encoding == "utf8"

def test_unicode_encoding():
    msg = py.builtin._totext('b\u00f6y', 'utf8')
    for encoding in 'utf8', 'latin1':
        l = []
        tw = py.io.TerminalWriter(l.append, encoding=encoding)
        tw.line(msg)
        assert l[0].strip() == msg.encode(encoding)

@pytest.mark.parametrize("encoding", ["ascii"])
def test_unicode_on_file_with_ascii_encoding(tmpdir, monkeypatch, encoding):
    msg = py.builtin._totext('hell\xf6', "latin1")
    #pytest.raises(UnicodeEncodeError, lambda: bytes(msg))
    f = py.std.codecs.open(str(tmpdir.join("x")), "w", encoding)
    tw = py.io.TerminalWriter(f)
    tw.line(msg)
    f.close()
    s = tmpdir.join("x").open("rb").read().strip()
    assert encoding == "ascii"
    assert s == msg.encode("unicode-escape")


win32 = int(sys.platform == "win32")
class TestTerminalWriter:
    def pytest_generate_tests(self, metafunc):
        if "tw" in metafunc.funcargnames:
            metafunc.addcall(id="path", param="path")
            metafunc.addcall(id="stringio", param="stringio")
            metafunc.addcall(id="callable", param="callable")
    def pytest_funcarg__tw(self, request):
        if request.param == "path":
            tmpdir = request.getfuncargvalue("tmpdir")
            p = tmpdir.join("tmpfile")
            f = codecs.open(str(p), 'w+', encoding='utf8')
            tw = py.io.TerminalWriter(f)
            def getlines():
                tw._file.flush()
                return codecs.open(str(p), 'r',
                    encoding='utf8').readlines()
        elif request.param == "stringio":
            tw = py.io.TerminalWriter(stringio=True)
            def getlines():
                tw.stringio.seek(0)
                return tw.stringio.readlines()
        elif request.param == "callable":
            writes = []
            tw = py.io.TerminalWriter(writes.append)
            def getlines():
                io = py.io.TextIO()
                io.write("".join(writes))
                io.seek(0)
                return io.readlines()
        tw.getlines = getlines
        tw.getvalue = lambda: "".join(getlines())
        return tw

    def test_line(self, tw):
        tw.line("hello")
        l = tw.getlines()
        assert len(l) == 1
        assert l[0] == "hello\n"

    def test_line_unicode(self, tw):
        for encoding in 'utf8', 'latin1':
            tw._encoding = encoding
            msg = py.builtin._totext('b\u00f6y', 'utf8')
            tw.line(msg)
            l = tw.getlines()
            assert l[0] == msg + "\n"

    def test_sep_no_title(self, tw):
        tw.sep("-", fullwidth=60)
        l = tw.getlines()
        assert len(l) == 1
        assert l[0] == "-" * (60-win32) + "\n"

    def test_sep_with_title(self, tw):
        tw.sep("-", "hello", fullwidth=60)
        l = tw.getlines()
        assert len(l) == 1
        assert l[0] == "-" * 26 + " hello " + "-" * (27-win32) + "\n"

    @py.test.mark.skipif("sys.platform == 'win32'")
    def test__escaped(self, tw):
        text2 = tw._escaped("hello", (31))
        assert text2.find("hello") != -1

    @py.test.mark.skipif("sys.platform == 'win32'")
    def test_markup(self, tw):
        for bold in (True, False):
            for color in ("red", "green"):
                text2 = tw.markup("hello", **{color: True, 'bold': bold})
                assert text2.find("hello") != -1
        py.test.raises(ValueError, "tw.markup('x', wronkw=3)")
        py.test.raises(ValueError, "tw.markup('x', wronkw=0)")

    def test_line_write_markup(self, tw):
        tw.hasmarkup = True
        tw.line("x", bold=True)
        tw.write("x\n", red=True)
        l = tw.getlines()
        if sys.platform != "win32":
            assert len(l[0]) >= 2, l
            assert len(l[1]) >= 2, l

    def test_attr_fullwidth(self, tw):
        tw.sep("-", "hello", fullwidth=70)
        tw.fullwidth = 70
        tw.sep("-", "hello")
        l = tw.getlines()
        assert len(l[0]) == len(l[1])

    def test_reline(self, tw):
        tw.line("hello")
        tw.hasmarkup = False
        pytest.raises(ValueError, lambda: tw.reline("x"))
        tw.hasmarkup = True
        tw.reline("0 1 2")
        tw.getlines()
        l = tw.getvalue().split("\n")
        assert len(l) == 2
        tw.reline("0 1 3")
        l = tw.getvalue().split("\n")
        assert len(l) == 2
        assert l[1].endswith("0 1 3\r")
        tw.line("so")
        l = tw.getvalue().split("\n")
        assert len(l) == 3
        assert l[-1] == ""
        assert l[1] == ("0 1 2\r0 1 3\rso   ")
        assert l[0] == "hello"


def test_terminal_with_callable_write_and_flush():
    l = set()
    class fil:
        flush = lambda self: l.add("1")
        write = lambda self, x: l.add("1")
        __call__ = lambda self, x: l.add("2")

    tw = py.io.TerminalWriter(fil())
    tw.line("hello")
    assert l == set(["1"])
    del fil.flush
    l.clear()
    tw = py.io.TerminalWriter(fil())
    tw.line("hello")
    assert l == set(["2"])


@pytest.mark.skipif(sys.platform == "win32", reason="win32 has no native ansi")
def test_attr_hasmarkup():
    tw = py.io.TerminalWriter(stringio=True)
    assert not tw.hasmarkup
    tw.hasmarkup = True
    tw.line("hello", bold=True)
    s = tw.stringio.getvalue()
    assert len(s) > len("hello\n")
    assert '\x1b[1m' in s
    assert '\x1b[0m' in s

@pytest.mark.skipif(sys.platform == "win32", reason="win32 has no native ansi")
def test_ansi_print():
    # we have no easy way to construct a file that
    # represents a terminal
    f = py.io.TextIO()
    f.isatty = lambda: True
    py.io.ansi_print("hello", 0x32, file=f)
    text2 = f.getvalue()
    assert text2.find("hello") != -1
    assert len(text2) >= len("hello\n")
    assert '\x1b[50m' in text2
    assert '\x1b[0m' in text2

def test_should_do_markup_PY_COLORS_eq_1(monkeypatch):
    monkeypatch.setitem(os.environ, 'PY_COLORS', '1')
    tw = py.io.TerminalWriter(stringio=True)
    assert tw.hasmarkup
    tw.line("hello", bold=True)
    s = tw.stringio.getvalue()
    assert len(s) > len("hello\n")
    assert '\x1b[1m' in s
    assert '\x1b[0m' in s

def test_should_do_markup_PY_COLORS_eq_0(monkeypatch):
    monkeypatch.setitem(os.environ, 'PY_COLORS', '0')
    f = py.io.TextIO()
    f.isatty = lambda: True
    tw = py.io.TerminalWriter(file=f)
    assert not tw.hasmarkup
    tw.line("hello", bold=True)
    s = f.getvalue()
    assert s == "hello\n"
