Beispiel #1
0
def change_structure():
    """Change structural rule."""
    menu_file = os.path.join(_data_dir, "Menus", "Change_StructuralRule.json")
    menu = Menu(file=menu_file)
    Settings().print_rules()
    rule = menu.open()
    if rule:
        Rules.change_structure(rule)
Beispiel #2
0
def change_single():
    """Change single rule."""
    menu_file = os.path.join(_data_dir, "Menus", "Change_SingleRule.json")
    rule_menu = Menu(file=menu_file)
    Settings().print_rules()
    rule = rule_menu.open()
    if rule:
        Rules.change_single(rule)
Beispiel #3
0
def remove_name():
    """Remove selected name from Names.json."""
    names_file = os.path.join(_data_dir, "Names.json")
    with open(names_file, "r") as file:
        name_list = json.load(file)
        options = [(name, name) for name in name_list]
    menu = Menu()
    menu.extend(options)
    selection = menu.open()
    if selection:
        Names.remove(selection)
Beispiel #4
0
def view_runs():
    """Handle menu for viewing runs."""
    def set_options(menu, file):
        option_list = [option for option in os.listdir(_runs_dir)]
        label_list = [label for label in option_list]
        menu.options = []
        menu.load(file)
        menu.extend(zip(label_list, option_list))

    menu_file = os.path.join(_data_dir, "Menus", "View_Runs.json")
    view_menu = Menu()
    view_menu.close_after_choice = True
    set_options(view_menu, menu_file)
    run = view_menu.open()
    if run is not None:
        view_run(run)
        set_options(view_menu, menu_file)
 def _select_explosion_child(self, option_keys):
     keys = [(self.tree[str(key)], key) for key in option_keys]
     menu = Menu()
     menu.close_after_choice = True
     menu.extend(keys)
     menu.prompt = self._explosion_message(option_keys[0])
     selection = menu.open()
     if selection is None:
         self._exit = True
         return
     return Key(selection)
Beispiel #6
0
def view_run(run):
    """Display a single run."""
    run_file = os.path.join(_runs_dir, run)
    with open(run_file, "r") as file:
        forest = json.load(file)
    forest_menu = Menu()
    forest_menu.clear_after_print = False

    def display(t):
        return lambda: DisplayTrees.display(t)

    callable_options = map(display, forest.values())
    option_list = zip(forest.keys(), callable_options)
    forest_menu.extend(option_list)
    forest_menu.open()
Beispiel #7
0
def change_multiple():
    """Change multiple rules."""
    rule_file = os.path.join(_data_dir, "Menus", "Change_MultipleRules.json")
    rules_menu = Menu(file=rule_file)
    Settings().print_rules()
    group = rules_menu.open()

    mode_file = os.path.join(_data_dir, "Menus", "Change_RuleMode.json")
    mode_menu = Menu(file=mode_file)
    mode = mode_menu.open()
    if group and mode:
        Rules.change_multiple(group, mode)
Beispiel #8
0
def change_rules():
    """Handle menu for changing rules."""
    menu_file = os.path.join(_data_dir, "Menus", "Change_RulesSuperMenu.json")
    rules_menu = Menu(file=menu_file)
    Settings().print_rules()
    rules_menu.open()
Beispiel #9
0
def main_menu():
    """Handle main menu."""
    menu_file = os.path.join(_data_dir, "Menus", "Main.json")
    main = Menu(file=menu_file)
    Settings().print_rules()
    main.open()
Beispiel #10
0
def delete_runs_confirm():
    """Confirm user wants to delete contents of Runs directory."""
    menu_file = os.path.join(_data_dir, "Menus", "Confirm_DeleteRuns.json")
    menu = Menu(file=menu_file)
    menu.close_after_choice = True
    menu.open()
Beispiel #11
0
def names_menu():
    """Handle menu for viewing/changing names."""
    menu_file = os.path.join(_data_dir, "Menus", "View_Names.json")
    menu = Menu(file=menu_file)
    menu.open()
Beispiel #12
0
class TestMenus(unittest.TestCase):
    def setUp(self):
        self.menu = Menu()
        self.mock_file = os.path.join(current_dir, "../mocks", "Menus",
                                      "TestMenu.json")

    def capture_menu_stdout(self, inputs: list):
        """Helper method for capturing menu outputs.

        :param inputs: a list of ints representing desired menu options.
        (For results, last item should be enough 0s to exit the program.)
        :return: standard output sent during menu call
        """
        with patch("builtins.input", side_effect=inputs):
            with patch("Controllers.Menus.Base.Menu._show_options",
                       new=lambda *args: print("")):
                with patch("sys.stdout",
                           new_callable=io.StringIO) as captured_out:
                    self.menu._separator = ""
                    self.menu.open()
                    return captured_out.getvalue().strip()

    def capture_menu_return_value(self, inputs: list):
        """Helper method for capturing menu return values (and
        eliminating stdout artifacts in the test window)

        :param inputs: a list of ints representing desired menu options.
        (For results, last item should be enough 0s to exit the program.)
        :return: the return value of the selected function.
        """
        with patch("builtins.input", side_effect=inputs):
            with patch("Controllers.Menus.Base.Menu._show_options",
                       new=lambda *args: print("")):
                with patch("sys.stdout", new_callable=io.StringIO):
                    return_value = self.menu.open()
                    return return_value

    def test_menu_starts_with_quit_item(self):
        self.assertEqual("Exit", self.menu.options[0].label)

    def test_menu_options(self):
        test_options = [("wow", lambda *args: print("much wow"))]
        self.menu.extend(test_options)
        output = self.capture_menu_stdout(inputs=[1, 0])
        self.assertEqual("much wow", output)

    def test_basic_lambda_from_file(self):
        self.menu.load(self.mock_file)
        output = self.capture_menu_return_value(inputs=[1])
        self.assertEqual(14, output)

    def test_import_package_using_file(self):
        self.menu.load(self.mock_file)
        result = self.capture_menu_return_value([2])
        self.assertEqual("test", result.prop)

    def test_non_callable_options_return(self):
        self.menu.load(self.mock_file)
        result = self.capture_menu_return_value([3])
        self.assertEqual("TEST_STRING", result)
Beispiel #13
0
 def setUp(self):
     self.menu = Menu()
     self.mock_file = os.path.join(current_dir, "../mocks", "Menus",
                                   "TestMenu.json")