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()
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()
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()
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()