jquast / blessed

Blessed is an easy, practical library for making python terminal apps
http://pypi.python.org/pypi/blessed
MIT License
1.18k stars 71 forks source link

4 tests fail #251

Open yurivict opened 1 year ago

yurivict commented 1 year ago
=============================================================================================== FAILURES ================================================================================================
___________________________________________________________________________________ test_number_of_colors_without_tty ___________________________________________________________________________________

    @pytest.mark.skipif(IS_WINDOWS, reason="requires more than 1 tty")
    def test_number_of_colors_without_tty():
        """``number_of_colors`` should return 0 when there's no tty."""
        @as_subprocess
        def child_256_nostyle():
            t = TestTerminal(stream=six.StringIO())
            assert (t.number_of_colors == 0)

        @as_subprocess
        def child_256_forcestyle():
            t = TestTerminal(stream=six.StringIO(), force_styling=True)
            assert (t.number_of_colors == 256)

        @as_subprocess
        def child_8_forcestyle():
            # 'ansi' on freebsd returns 0 colors. We use 'cons25', compatible with its kernel tty.c
            kind = 'cons25' if platform.system().lower() == 'freebsd' else 'ansi'
            t = TestTerminal(kind=kind, stream=six.StringIO(),
                             force_styling=True)
            assert (t.number_of_colors == 8)

        @as_subprocess
        def child_0_forcestyle():
            t = TestTerminal(kind='vt220', stream=six.StringIO(),
                             force_styling=True)
            assert (t.number_of_colors == 0)

>       child_0_forcestyle()

tests/test_core.py:121: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <tests.accessories.as_subprocess object at 0x8757f8eb0>, args = (), kwargs = {}, pid_testrunner = 78657, pid = 79420, master_fd = 11
exc_output = '  File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__\r\n    self....Error: assert 16777216 == 0\r\n +  where 16777216 = <blessed.terminal.Terminal object at 0x8757f8cd0>.number_of_colors'
decoder = <encodings.utf_8.IncrementalDecoder object at 0x8757f8ac0>

    def __call__(self, *args, **kwargs):  # pylint: disable=too-many-locals, too-complex
        if IS_WINDOWS:
            self.func(*args, **kwargs)
            return

        pid_testrunner = os.getpid()
        pid, master_fd = pty.fork()
        if pid == self._CHILD_PID:
            # child process executes function, raises exception
            # if failed, causing a non-zero exit code, using the
            # protected _exit() function of ``os``; to prevent the
            # 'SystemExit' exception from being thrown.
            cov = init_subproc_coverage(
                "@as_subprocess-{pid};{func_name}(*{args}, **{kwargs})"
                .format(pid=os.getpid(), func_name=self.func,
                        args=args, kwargs=kwargs))
            try:
                self.func(*args, **kwargs)
            except Exception:  # pylint: disable=broad-except
                e_type, e_value, e_tb = sys.exc_info()
                o_err = [line.rstrip().encode('utf-8') for line in traceback.format_tb(e_tb)]
                o_err.append(('-=' * 20).encode('ascii'))
                o_err.extend([_exc.rstrip().encode('utf-8') for _exc in
                              traceback.format_exception_only(
                                  e_type, e_value)])
                os.write(sys.__stdout__.fileno(), b'\n'.join(o_err))
                os.close(sys.__stdout__.fileno())
                os.close(sys.__stderr__.fileno())
                os.close(sys.__stdin__.fileno())
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(1)
            else:
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(0)

        # detect rare fork in test runner, when bad bugs happen
        if pid_testrunner != os.getpid():
            print('TEST RUNNER HAS FORKED, {0}=>{1}: EXIT'
                  .format(pid_testrunner, os.getpid()), file=sys.stderr)
            os._exit(1)

        exc_output = six.text_type()
        decoder = codecs.getincrementaldecoder(self.encoding)()
        while True:
            try:
                _exc = os.read(master_fd, 65534)
            except OSError:
                # linux EOF
                break
            if not _exc:
                # bsd EOF
                break
            exc_output += decoder.decode(_exc)

        # parent process asserts exit code is 0, causing test
        # to fail if child process raised an exception/assertion
        pid, status = os.waitpid(pid, 0)
        os.close(master_fd)

        # Display any output written by child process
        # (esp. any AssertionError exceptions written to stderr).
        exc_output_msg = 'Output in child process:\n%s\n%s\n%s' % (
            u'=' * 40, exc_output, u'=' * 40,)
>       assert exc_output == '', exc_output_msg
E       AssertionError: Output in child process:
E       ========================================
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__
E           self.func(*args, **kwargs)
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/test_core.py", line 119, in child_0_forcestyle
E           assert (t.number_of_colors == 0)
E       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
E       AssertionError: assert 16777216 == 0
E        +  where 16777216 = <blessed.terminal.Terminal object at 0x8757f8cd0>.number_of_colors
E       ========================================

tests/accessories.py:131: AssertionError
____________________________________________________________________________________ test_number_of_colors_with_tty _____________________________________________________________________________________

    @pytest.mark.skipif(IS_WINDOWS, reason="requires more than 1 tty")
    def test_number_of_colors_with_tty():
        """test ``number_of_colors`` 0, 8, and 256."""
        @as_subprocess
        def child_256():
            t = TestTerminal()
            assert (t.number_of_colors == 256)

        @as_subprocess
        def child_8():
            # 'ansi' on freebsd returns 0 colors. We use 'cons25', compatible with its kernel tty.c
            kind = 'cons25' if platform.system().lower() == 'freebsd' else 'ansi'
            t = TestTerminal(kind=kind)
            assert (t.number_of_colors == 8)

        @as_subprocess
        def child_0():
            t = TestTerminal(kind='vt220')
            assert (t.number_of_colors == 0)

>       child_0()

tests/test_core.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <tests.accessories.as_subprocess object at 0x8773c4760>, args = (), kwargs = {}, pid_testrunner = 78657, pid = 79493, master_fd = 11
exc_output = '  File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__\r\n    self....Error: assert 16777216 == 0\r\n +  where 16777216 = <blessed.terminal.Terminal object at 0x87cf30970>.number_of_colors'
decoder = <encodings.utf_8.IncrementalDecoder object at 0x8773c4790>

    def __call__(self, *args, **kwargs):  # pylint: disable=too-many-locals, too-complex
        if IS_WINDOWS:
            self.func(*args, **kwargs)
            return

        pid_testrunner = os.getpid()
        pid, master_fd = pty.fork()
        if pid == self._CHILD_PID:
            # child process executes function, raises exception
            # if failed, causing a non-zero exit code, using the
            # protected _exit() function of ``os``; to prevent the
            # 'SystemExit' exception from being thrown.
            cov = init_subproc_coverage(
                "@as_subprocess-{pid};{func_name}(*{args}, **{kwargs})"
                .format(pid=os.getpid(), func_name=self.func,
                        args=args, kwargs=kwargs))
            try:
                self.func(*args, **kwargs)
            except Exception:  # pylint: disable=broad-except
                e_type, e_value, e_tb = sys.exc_info()
                o_err = [line.rstrip().encode('utf-8') for line in traceback.format_tb(e_tb)]
                o_err.append(('-=' * 20).encode('ascii'))
                o_err.extend([_exc.rstrip().encode('utf-8') for _exc in
                              traceback.format_exception_only(
                                  e_type, e_value)])
                os.write(sys.__stdout__.fileno(), b'\n'.join(o_err))
                os.close(sys.__stdout__.fileno())
                os.close(sys.__stderr__.fileno())
                os.close(sys.__stdin__.fileno())
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(1)
            else:
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(0)

        # detect rare fork in test runner, when bad bugs happen
        if pid_testrunner != os.getpid():
            print('TEST RUNNER HAS FORKED, {0}=>{1}: EXIT'
                  .format(pid_testrunner, os.getpid()), file=sys.stderr)
            os._exit(1)

        exc_output = six.text_type()
        decoder = codecs.getincrementaldecoder(self.encoding)()
        while True:
            try:
                _exc = os.read(master_fd, 65534)
            except OSError:
                # linux EOF
                break
            if not _exc:
                # bsd EOF
                break
            exc_output += decoder.decode(_exc)

        # parent process asserts exit code is 0, causing test
        # to fail if child process raised an exception/assertion
        pid, status = os.waitpid(pid, 0)
        os.close(master_fd)

        # Display any output written by child process
        # (esp. any AssertionError exceptions written to stderr).
        exc_output_msg = 'Output in child process:\n%s\n%s\n%s' % (
            u'=' * 40, exc_output, u'=' * 40,)
>       assert exc_output == '', exc_output_msg
E       AssertionError: Output in child process:
E       ========================================
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__
E           self.func(*args, **kwargs)
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/test_core.py", line 145, in child_0
E           assert (t.number_of_colors == 0)
E       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
E       AssertionError: assert 16777216 == 0
E        +  where 16777216 = <blessed.terminal.Terminal object at 0x87cf30970>.number_of_colors
E       ========================================

tests/accessories.py:131: AssertionError
______________________________________________________________________________________ test_truncate_padding[ansi] ______________________________________________________________________________________

all_terms = 'ansi'

    def test_truncate_padding(all_terms):
        """Ensure that terminal.truncate has the correct behaviour for wide characters."""
        @as_subprocess
        def child(kind):
            from blessed import Terminal
            term = Terminal(kind)
            test_right_string = term.blue(u"one" + term.move_right(5) + u"two")
            assert term.truncate(test_right_string, 9) == term.blue(u"one     t")

            test_bs_string = term.blue(u"one\b\b\btwo")
            assert term.truncate(test_bs_string, 3) == term.blue(u"two")

        if all_terms != 'vtwin10':
            # padding doesn't work the same on windows !
>           child(all_terms)

tests/test_sequences.py:716: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <tests.accessories.as_subprocess object at 0x88f1ed2b0>, args = ('ansi',), kwargs = {}, pid_testrunner = 78657, pid = 81368, master_fd = 11
exc_output = '  File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__\r\n    self....=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r\nAssertionError: assert \'onetwo\' == \'one     t\'\r\n  - one     t\r\n  + onetwo'
decoder = <encodings.utf_8.IncrementalDecoder object at 0x88f1ede80>

    def __call__(self, *args, **kwargs):  # pylint: disable=too-many-locals, too-complex
        if IS_WINDOWS:
            self.func(*args, **kwargs)
            return

        pid_testrunner = os.getpid()
        pid, master_fd = pty.fork()
        if pid == self._CHILD_PID:
            # child process executes function, raises exception
            # if failed, causing a non-zero exit code, using the
            # protected _exit() function of ``os``; to prevent the
            # 'SystemExit' exception from being thrown.
            cov = init_subproc_coverage(
                "@as_subprocess-{pid};{func_name}(*{args}, **{kwargs})"
                .format(pid=os.getpid(), func_name=self.func,
                        args=args, kwargs=kwargs))
            try:
                self.func(*args, **kwargs)
            except Exception:  # pylint: disable=broad-except
                e_type, e_value, e_tb = sys.exc_info()
                o_err = [line.rstrip().encode('utf-8') for line in traceback.format_tb(e_tb)]
                o_err.append(('-=' * 20).encode('ascii'))
                o_err.extend([_exc.rstrip().encode('utf-8') for _exc in
                              traceback.format_exception_only(
                                  e_type, e_value)])
                os.write(sys.__stdout__.fileno(), b'\n'.join(o_err))
                os.close(sys.__stdout__.fileno())
                os.close(sys.__stderr__.fileno())
                os.close(sys.__stdin__.fileno())
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(1)
            else:
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(0)

        # detect rare fork in test runner, when bad bugs happen
        if pid_testrunner != os.getpid():
            print('TEST RUNNER HAS FORKED, {0}=>{1}: EXIT'
                  .format(pid_testrunner, os.getpid()), file=sys.stderr)
            os._exit(1)

        exc_output = six.text_type()
        decoder = codecs.getincrementaldecoder(self.encoding)()
        while True:
            try:
                _exc = os.read(master_fd, 65534)
            except OSError:
                # linux EOF
                break
            if not _exc:
                # bsd EOF
                break
            exc_output += decoder.decode(_exc)

        # parent process asserts exit code is 0, causing test
        # to fail if child process raised an exception/assertion
        pid, status = os.waitpid(pid, 0)
        os.close(master_fd)

        # Display any output written by child process
        # (esp. any AssertionError exceptions written to stderr).
        exc_output_msg = 'Output in child process:\n%s\n%s\n%s' % (
            u'=' * 40, exc_output, u'=' * 40,)
>       assert exc_output == '', exc_output_msg
E       AssertionError: Output in child process:
E       ========================================
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__
E           self.func(*args, **kwargs)
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/test_sequences.py", line 709, in child
E           assert term.truncate(test_right_string, 9) == term.blue(u"one     t")
E       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
E       AssertionError: assert 'onetwo' == 'one     t'
E         - one     t
E         + onetwo
E       ========================================

tests/accessories.py:131: AssertionError
_____________________________________________________________________________________ test_truncate_padding[linux] ______________________________________________________________________________________

all_terms = 'linux'

    def test_truncate_padding(all_terms):
        """Ensure that terminal.truncate has the correct behaviour for wide characters."""
        @as_subprocess
        def child(kind):
            from blessed import Terminal
            term = Terminal(kind)
            test_right_string = term.blue(u"one" + term.move_right(5) + u"two")
            assert term.truncate(test_right_string, 9) == term.blue(u"one     t")

            test_bs_string = term.blue(u"one\b\b\btwo")
            assert term.truncate(test_bs_string, 3) == term.blue(u"two")

        if all_terms != 'vtwin10':
            # padding doesn't work the same on windows !
>           child(all_terms)

tests/test_sequences.py:716: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <tests.accessories.as_subprocess object at 0x8760a7370>, args = ('linux',), kwargs = {}, pid_testrunner = 78657, pid = 81375, master_fd = 11
exc_output = '  File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__\r\n    self....x1b[0;10m\'\r\n  - \x1b[34mone     t\x1b[0;10m\r\n  ?         -----\r\n  + \x1b[34monetwo\x1b[0;10m\r\n  ?          ++'
decoder = <encodings.utf_8.IncrementalDecoder object at 0x8760a72b0>

    def __call__(self, *args, **kwargs):  # pylint: disable=too-many-locals, too-complex
        if IS_WINDOWS:
            self.func(*args, **kwargs)
            return

        pid_testrunner = os.getpid()
        pid, master_fd = pty.fork()
        if pid == self._CHILD_PID:
            # child process executes function, raises exception
            # if failed, causing a non-zero exit code, using the
            # protected _exit() function of ``os``; to prevent the
            # 'SystemExit' exception from being thrown.
            cov = init_subproc_coverage(
                "@as_subprocess-{pid};{func_name}(*{args}, **{kwargs})"
                .format(pid=os.getpid(), func_name=self.func,
                        args=args, kwargs=kwargs))
            try:
                self.func(*args, **kwargs)
            except Exception:  # pylint: disable=broad-except
                e_type, e_value, e_tb = sys.exc_info()
                o_err = [line.rstrip().encode('utf-8') for line in traceback.format_tb(e_tb)]
                o_err.append(('-=' * 20).encode('ascii'))
                o_err.extend([_exc.rstrip().encode('utf-8') for _exc in
                              traceback.format_exception_only(
                                  e_type, e_value)])
                os.write(sys.__stdout__.fileno(), b'\n'.join(o_err))
                os.close(sys.__stdout__.fileno())
                os.close(sys.__stderr__.fileno())
                os.close(sys.__stdin__.fileno())
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(1)
            else:
                if cov is not None:
                    cov.stop()
                    cov.save()
                os._exit(0)

        # detect rare fork in test runner, when bad bugs happen
        if pid_testrunner != os.getpid():
            print('TEST RUNNER HAS FORKED, {0}=>{1}: EXIT'
                  .format(pid_testrunner, os.getpid()), file=sys.stderr)
            os._exit(1)

        exc_output = six.text_type()
        decoder = codecs.getincrementaldecoder(self.encoding)()
        while True:
            try:
                _exc = os.read(master_fd, 65534)
            except OSError:
                # linux EOF
                break
            if not _exc:
                # bsd EOF
                break
            exc_output += decoder.decode(_exc)

        # parent process asserts exit code is 0, causing test
        # to fail if child process raised an exception/assertion
        pid, status = os.waitpid(pid, 0)
        os.close(master_fd)

        # Display any output written by child process
        # (esp. any AssertionError exceptions written to stderr).
        exc_output_msg = 'Output in child process:\n%s\n%s\n%s' % (
            u'=' * 40, exc_output, u'=' * 40,)
>       assert exc_output == '', exc_output_msg
E       AssertionError: Output in child process:
E       ========================================
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/accessories.py", line 81, in __call__
E           self.func(*args, **kwargs)
E         File "/usr/ports/devel/py-blessed/work-py39/blessed-1.20.0/tests/test_sequences.py", line 709, in child
E           assert term.truncate(test_right_string, 9) == term.blue(u"one     t")
E       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
E       AssertionError: assert '\x1b[34monetwo\x1b[0;10m' == '\x1b[34mone     t\x1b[0;10m'
E         - one     t
E         ?         -----
E         + onetwo
E         ?          ++
E       ========================================

tests/accessories.py:131: AssertionError
======================================================================================== short test summary info ========================================================================================
SKIPPED [1] tests/test_full_keyboard.py:40: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:85: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:135: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:147: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:159: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:172: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:185: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:199: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:213: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:244: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:284: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:317: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:351: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:379: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:410: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:444: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:478: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:511: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:546: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:581: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:596: TEST_RAW not specified
SKIPPED [1] tests/test_full_keyboard.py:621: TEST_RAW not specified
SKIPPED [1] tests/test_full_keyboard.py:649: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:664: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:684: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:700: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:715: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:727: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:741: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:757: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:769: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:783: Timing-sensitive tests please do not run on build farms.
SKIPPED [1] tests/test_full_keyboard.py:799: Timing-sensitive tests please do not run on build farms.
========================================================================= 4 failed, 381 passed, 33 skipped in 102.03s (0:01:42) =========================================================================
*** Error code 1

Version: 1.20.0 Python-3.9 FreeBSD 13.1

avylove commented 1 year ago

For the first two, it looks like colors for vt220 on might be set for 24bit color, though I can't reproduce it. I think we picked that one expecting it shouldn't have color, so I wonder if we should mock it or try xterm-mono? I assume it's not the COLORTERM environment variable bleeding through since that would break earlier.

@yurivict, can you check this on your system?

>>> from blessed import Terminal
>>> term = Terminal(kind='vt220')
>>> term.number_of_colors
0

For the second two, it looks like move_right() (cuf) isn't working correctly on linux and ansi terminal on FreeBSD. When we test it move_right() we don't assume the terminals support it, so maybe we shouldn't assume it here.

avylove commented 1 year ago

Put in a fix for the second two in the #255. It basically just gates that specific assert if move_right() produces an empty string.

Wondering if we should gate the number_of_colors issues as well. It would basically require checking COLORTERM and curses.tigetnum('colors'). But I'm hesitant to try anything since I can't reproduce the issue and @yurivict hasn't responded. It would be good to know which one is causing it.