Esempio n. 1
0
def test_main(capsys):
    """General stdin processing."""
    try:
        pipe_r, pipe_w = os.pipe()
        config = chromaterm.args_init([])
        main_thread = Thread(target=chromaterm.main, args=(config, 1, pipe_r))

        main_thread.start()
        time.sleep(0.1)  # Any start-up delay
        assert main_thread.is_alive()

        os.write(pipe_w, b'Hello world\n')
        time.sleep(0.1)  # Any processing delay
        assert capsys.readouterr().out == 'Hello world\n'

        os.write(pipe_w, b'Hey there')
        time.sleep(0.1 + chromaterm.WAIT_FOR_SPLIT)  # Include split wait
        assert capsys.readouterr().out == 'Hey there'

        os.write(pipe_w, b'x' * (chromaterm.READ_SIZE + 1))
        time.sleep(0.1 + chromaterm.WAIT_FOR_SPLIT)  # Include split wait
        assert capsys.readouterr().out == 'x' * (chromaterm.READ_SIZE + 1)
    finally:
        os.close(pipe_r)
        os.close(pipe_w)
        main_thread.join()
Esempio n. 2
0
def test_main_reload_config(capsys, monkeypatch):
    """Reload the configuration while the program is running."""
    try:
        with open(TEMP_FILE + '1', 'w') as file:
            file.write('''rules:
            - regex: Hello
              color: f#123123
            - regex: world
              color: b#321321''')

        pipe_r, pipe_w = os.pipe()
        monkeypatch.setattr(sys.stdin, 'fileno', mock_fd_fileno)

        # For deterministic color codes, disable RGB terminal if supported
        os.environ.pop('COLORTERM', None)
        config = chromaterm.args_init(['--config', TEMP_FILE + '1'])
        main_thread = Thread(target=chromaterm.main, args=(config, 1, pipe_r))

        main_thread.start()
        time.sleep(0.1)  # Any start-up delay
        assert main_thread.is_alive()

        os.write(pipe_w, b'Hello world\n')
        expected = [
            '\x1b[38;5;22m', 'Hello', '\x1b[39m', ' ', '\x1b[48;5;52m',
            'world', '\x1b[49m', '\n'
        ]
        time.sleep(0.1)  # Any processing delay
        assert repr(capsys.readouterr().out) == repr(''.join(expected))

        # Create file without the 'world' rule
        os.remove(TEMP_FILE + '1')
        with open(TEMP_FILE + '1', 'w') as file:
            file.write('''rules:
            - regex: Hello
              color: f#123123''')

        # Reload config
        os.kill(os.getpid(), signal.SIGUSR1)

        os.write(pipe_w, b'Hello world\n')
        expected = ['\x1b[38;5;22m', 'Hello', '\x1b[39m', ' world\n']
        time.sleep(0.1)  # Any processing delay
        assert repr(capsys.readouterr().out) == repr(''.join(expected))
    finally:
        os.close(pipe_r)
        os.close(pipe_w)
        os.remove(TEMP_FILE + '1')
        main_thread.join()
Esempio n. 3
0
def test_main_reload_config(capsys):
    """Reload the configuration while the program is running."""
    try:
        with open(TEMP_FILE + '1', 'w') as file:
            file.write('''rules:
            - regex: Hello
              color: f#123123
            - regex: world
              color: b#321321''')

        pipe_r, pipe_w = os.pipe()
        config = chromaterm.args_init(['--config', TEMP_FILE + '1'])
        main_thread = Thread(target=chromaterm.main, args=(config, 1, pipe_r))

        main_thread.start()
        time.sleep(0.1)  # Any start-up delay
        assert main_thread.is_alive()

        os.write(pipe_w, b'Hello world')
        expected = [
            '\x1b[38;5;22m', 'Hello', '\x1b[39m', ' ', '\x1b[48;5;52m',
            'world', '\x1b[49m'
        ]
        time.sleep(0.1)  # Any processing delay
        assert repr(capsys.readouterr().out) == repr(''.join(expected))

        # Create file without the 'world' rule
        os.remove(TEMP_FILE + '1')
        with open(TEMP_FILE + '1', 'w') as file:
            file.write('''rules:
            - regex: Hello
              color: f#123123''')

        # Reload config
        os.kill(os.getpid(), signal.SIGUSR1)

        os.write(pipe_w, b'Hello world')
        expected = ['\x1b[38;5;22m', 'Hello', '\x1b[39m', ' world']
        time.sleep(0.1)  # Any processing delay
        assert repr(capsys.readouterr().out) == repr(''.join(expected))
    finally:
        os.close(pipe_r)
        os.close(pipe_w)
        os.remove(TEMP_FILE + '1')
        main_thread.join()
Esempio n. 4
0
def test_main_decode_error(capsys):
    """Attempt to decode a character that is not UTF-8."""
    try:
        pipe_r, pipe_w = os.pipe()
        config = chromaterm.args_init([])
        main_thread = Thread(target=chromaterm.main, args=(config, 1, pipe_r))

        main_thread.start()
        time.sleep(0.1)  # Any start-up delay
        assert main_thread.is_alive()

        os.write(pipe_w, b'\x80')
        time.sleep(0.1)  # Any processing delay
        assert capsys.readouterr().out == '�'
    finally:
        os.close(pipe_r)
        os.close(pipe_w)
        main_thread.join()