def check_ask_type(dirname):
        def mock_is_interactive():
            return True

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive)

        calls = []

        def mock_console_input(prompt):
            res = ['-', 'b'][len(calls)]
            calls.append(True)
            return res

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.console_input', mock_console_input)

        args = Args(None, 'test', 'file.py', directory=dirname)
        res = main(args)
        assert res == 0
        assert len(calls) == 2

        project = Project(dirname)

        command = project.project_file.get_value(['commands', 'test'])
        assert len(command.keys()) == 2
        assert command['bokeh_app'] == 'file.py'
        assert command['env_spec'] == 'default'
        out, err = capsys.readouterr()
        assert out == ("Please enter 'b', 'n', or 'c'.\n" +
                       "    A Bokeh app is the project-relative path to a Bokeh script or app directory.\n" +
                       "    A notebook file is the project-relative path to a .ipynb file.\n"
                       "    A command line is any command you might type at the command prompt.\n"
                       "Added a command 'test' to the project. Run it with `anaconda-project run test`.\n")
    def check(dirname):
        def mock_is_interactive():
            return True

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive)

        def mock_console_input(prompt):
            return "c"

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.console_input', mock_console_input)

        def mock_system():
            return "Linux"

        monkeypatch.setattr('platform.system', mock_system)

        args = Args(None, 'test', 'echo hello', directory=dirname)
        res = main(args)
        assert res == 0

        project = Project(dirname)

        command = project.project_file.get_value(['commands', 'test'])
        assert len(command.keys()) == 2
        assert command['unix'] == 'echo hello'
        assert command['env_spec'] == 'default'
    def check_ask_type(dirname):
        def mock_is_interactive():
            return True

        monkeypatch.setattr(
            'anaconda_project.internal.cli.console_utils.stdin_is_interactive',
            mock_is_interactive)

        def mock_console_input(prompt):
            return "b"

        monkeypatch.setattr(
            'anaconda_project.internal.cli.console_utils.console_input',
            mock_console_input)

        args = Args(None, 'test', 'file.py', directory=dirname)
        res = main(args)
        assert res == 0

        project = Project(dirname)

        command = project.project_file.get_value(['commands', 'test'])
        assert len(command.keys()) == 2
        assert command['bokeh_app'] == 'file.py'
        assert command['env_spec'] == 'default'
    def check_problem_add_cmd(dirname):
        args = Args('notebook', 'test', 'file.ipynb', directory=dirname)
        res = main(args)
        assert res == 1

        out, err = capsys.readouterr()
        assert '' == out
        assert (("%s: command 'test' has multiple commands in it, 'notebook' can't go with 'unix'\n" %
                 DEFAULT_PROJECT_FILENAME) + "Unable to add the command.\n") == err
    def check_ask_type(dirname):
        def mock_is_interactive():
            return True

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive)

        def mock_input(prompt):
            raise KeyboardInterrupt('^C')

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils._input', mock_input)

        args = Args(None, 'test', 'file.py', directory=dirname)
        with pytest.raises(SystemExit) as excinfo:
            main(args)
        assert excinfo.value.code == 1

        out, err = capsys.readouterr()
        assert out == ''
        assert err == '\nCanceling\n\n'
    def check_guessing_notebook(dirname):
        args = Args(None, 'test', 'file.ipynb', directory=dirname)
        res = main(args)
        assert res == 0

        project = Project(dirname)

        command = project.project_file.get_value(['commands', 'test'])
        assert command['notebook'] == 'file.ipynb'
        assert command['env_spec'] == 'default'
        assert len(command.keys()) == 2
    def check(dirname):
        def mock_is_interactive():
            return False

        monkeypatch.setattr('anaconda_project.internal.cli.console_utils.stdin_is_interactive', mock_is_interactive)

        args = Args(None, 'test', 'file.py', directory=dirname)
        res = main(args)
        assert res == 1

        out, err = capsys.readouterr()
        assert '' == out
        assert 'Specify the --type option to add this command.\n' == err