def test_window_options(session): yaml_config = loadfixture("workspacebuilder/window_options.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) if has_gte_version('2.3'): sconfig['windows'][0]['options']['pane-border-format'] = ' #P ' builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout('tiled') # fix glitch with pane size p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert w.show_window_option('main-pane-height') == 5 if has_gte_version('2.3'): assert w.show_window_option('pane-border-format') == ' #P ' assert len(s._windows) == window_count window_count += 1 w.select_layout(wconf['layout'])
def test_window_options(session): yaml_config = test_utils.read_config_file( "workspacebuilder/window_options.yaml") s = session sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) if has_gte_version("2.3"): sconfig["windows"][0]["options"]["pane-border-format"] = " #P " builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout("tiled") # fix glitch with pane size p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert w.show_window_option("main-pane-height") == 5 if has_gte_version("2.3"): assert w.show_window_option("pane-border-format") == " #P " assert len(s._windows) == window_count window_count += 1 w.select_layout(wconf["layout"])
def test_automatic_rename_option(session): """With option automatic-rename: on.""" yaml_config = test_utils.read_config_file( "workspacebuilder/window_automatic_rename.yaml") s = session sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() # This should be a command guaranteed to be terminal name across systems portable_command = sconfig["windows"][0]["panes"][0]["shell_command"][0][ "cmd"] # If a command is like "man ls", get the command base name, "ls" if " " in portable_command: portable_command = portable_command.split(" ")[0] builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout("tiled") # fix glitch with pane size p = p assert len(s._windows), window_count assert isinstance(w, Window) assert w.show_window_option("automatic-rename") == "on" assert len(s._windows) == window_count window_count += 1 w.select_layout(wconf["layout"]) assert s.name != "tmuxp" w = s.windows[0] def check_window_name_mismatch() -> bool: session.server._update_windows() return w.name != portable_command assert retry_until(check_window_name_mismatch, 2, interval=0.25) pane_base_index = w.show_window_option("pane-base-index", g=True) w.select_pane(pane_base_index) def check_window_name_match() -> bool: session.server._update_windows() return w.name == portable_command assert retry_until( check_window_name_match, 2, interval=0.25), f"Window name {w.name} should be {portable_command}" w.select_pane("-D") assert retry_until(check_window_name_mismatch, 2, interval=0.25)
def test_pane_order(session): """Pane ordering based on position in config and ``pane_index``. Regression test for https://github.com/tmux-python/tmuxp/issues/15. """ yaml_config = loadfixture("workspacebuilder/pane_ordering.yaml").format( HOME=os.path.realpath(os.path.expanduser('~')) ) # test order of `panes` (and pane_index) above aganist pane_dirs pane_paths = [ '/usr/bin', '/usr', '/usr/sbin', os.path.realpath(os.path.expanduser('~')), ] s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) sconfig = config.trickle(sconfig) builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout('tiled') # fix glitch with pane size p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert len(s._windows) == window_count window_count += 1 for w in session.windows: pane_base_index = w.show_window_option('pane-base-index', g=True) for p_index, p in enumerate(w.list_panes(), start=pane_base_index): assert int(p_index) == int(p.index) # pane-base-index start at base-index, pane_paths always start # at 0 since python list. pane_path = pane_paths[p_index - pane_base_index] while retry(): p.server._update_panes() if p.current_path == pane_path: break assert p.current_path, pane_path
def test_automatic_rename_option(session): """With option automatic-rename: on.""" yaml_config = loadfixture("workspacebuilder/window_automatic_rename.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout('tiled') # fix glitch with pane size p = p assert len(s._windows), window_count assert isinstance(w, Window) assert w.show_window_option('automatic-rename') == 'on' assert len(s._windows) == window_count window_count += 1 w.select_layout(wconf['layout']) assert s.name != 'tmuxp' w = s.windows[0] for _ in range(10): session.server._update_windows() if w.name != 'sh': break time.sleep(.2) assert w.name != 'sh' pane_base_index = w.show_window_option('pane-base-index', g=True) w.select_pane(pane_base_index) for _ in range(10): session.server._update_windows() if w.name == 'sh': break time.sleep(.3) assert w.name == text_type('sh') w.select_pane('-D') for _ in range(10): session.server._update_windows() if w['window_name'] != 'sh': break time.sleep(.2) assert w.name != text_type('sh')
def test_pane_order(session): """Pane ordering based on position in config and ``pane_index``. Regression test for https://github.com/tmux-python/tmuxp/issues/15. """ yaml_config = test_utils.read_config_file( "workspacebuilder/pane_ordering.yaml").format( HOME=os.path.realpath(os.path.expanduser("~"))) # test order of `panes` (and pane_index) above against pane_dirs pane_paths = [ "/usr/bin", "/usr", "/etc", os.path.realpath(os.path.expanduser("~")), ] s = session sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) sconfig = config.trickle(sconfig) builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout("tiled") # fix glitch with pane size assert len(s._windows) == window_count assert isinstance(w, Window) assert len(s._windows) == window_count window_count += 1 for w in session.windows: pane_base_index = w.show_window_option("pane-base-index", g=True) for p_index, p in enumerate(w.list_panes(), start=pane_base_index): assert int(p_index) == int(p.index) # pane-base-index start at base-index, pane_paths always start # at 0 since python list. pane_path = pane_paths[p_index - pane_base_index] def f(): p.server._update_panes() return p.current_path == pane_path assert retry_until(f)
def test_automatic_rename_option(session): """With option automatic-rename: on.""" yaml_config = loadfixture("workspacebuilder/window_automatic_rename.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout('tiled') # fix glitch with pane size p = p assert len(s._windows), window_count assert isinstance(w, Window) assert w.show_window_option('automatic-rename') == 'on' assert len(s._windows) == window_count window_count += 1 w.select_layout(wconf['layout']) assert s.name != 'tmuxp' w = s.windows[0] while retry(): session.server._update_windows() if w.name != 'sh': break assert w.name != 'sh' pane_base_index = w.show_window_option('pane-base-index', g=True) w.select_pane(pane_base_index) while retry(): session.server._update_windows() if w.name == 'sh': break assert w.name == text_type('sh') w.select_pane('-D') while retry(): session.server._update_windows() if w['window_name'] != 'sh': break assert w.name != text_type('sh')
def test_window_index(session): yaml_config = loadfixture("workspacebuilder/window_index.yaml") proc = session.cmd('show-option', '-gv', 'base-index') base_index = int(proc.stdout[0]) name_index_map = {'zero': 0 + base_index, 'one': 1 + base_index, 'five': 5} sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) sconfig = config.trickle(sconfig) builder = WorkspaceBuilder(sconf=sconfig) for window, _ in builder.iter_create_windows(session): expected_index = name_index_map[window['window_name']] assert int(window['window_index']) == expected_index
def test_window_index(session): yaml_config = test_utils.read_config_file( "workspacebuilder/window_index.yaml") proc = session.cmd("show-option", "-gv", "base-index") base_index = int(proc.stdout[0]) name_index_map = {"zero": 0 + base_index, "one": 1 + base_index, "five": 5} sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) sconfig = config.trickle(sconfig) builder = WorkspaceBuilder(sconf=sconfig) for window, _ in builder.iter_create_windows(session): expected_index = name_index_map[window["window_name"]] assert int(window["window_index"]) == expected_index
def test_split_windows(session): yaml_config = loadfixture("workspacebuilder/two_pane.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert len(s._windows) == window_count window_count += 1
def test_window_shell(session): yaml_config = loadfixture("workspacebuilder/window_shell.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) builder = WorkspaceBuilder(sconf=sconfig) for w, wconf in builder.iter_create_windows(s): if 'window_shell' in wconf: assert wconf['window_shell'] == text_type('top') while retry(): session.server._update_windows() if w['window_name'] != 'top': break assert w.name != text_type('top')
def test_split_windows(session): yaml_config = test_utils.read_config_file("workspacebuilder/two_pane.yaml") s = session sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() builder = WorkspaceBuilder(sconf=sconfig) window_count = len(session._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): w.select_layout("tiled") # fix glitch with pane size p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert len(s._windows) == window_count window_count += 1
def test_split_windows_three_pane(session): yaml_config = loadfixture("workspacebuilder/three_pane.yaml") s = session sconfig = kaptan.Kaptan(handler='yaml') sconfig = sconfig.import_config(yaml_config).get() builder = WorkspaceBuilder(sconf=sconfig) window_count = len(s._windows) # current window count assert len(s._windows) == window_count for w, wconf in builder.iter_create_windows(s): for p in builder.iter_create_panes(w, wconf): p = p assert len(s._windows) == window_count assert isinstance(w, Window) assert len(s._windows) == window_count window_count += 1 w.set_window_option('main-pane-height', 50) w.select_layout(wconf['layout'])
def test_window_shell(session): yaml_config = test_utils.read_config_file( "workspacebuilder/window_shell.yaml") s = session sconfig = kaptan.Kaptan(handler="yaml") sconfig = sconfig.import_config(yaml_config).get() sconfig = config.expand(sconfig) builder = WorkspaceBuilder(sconf=sconfig) for w, wconf in builder.iter_create_windows(s): if "window_shell" in wconf: assert wconf["window_shell"] == "top" def f(): session.server._update_windows() return w["window_name"] != "top" retry_until(f) assert w.name != "top"