def test_with_option_dryrun_on_cmdline(self, capsys):
        config = Config(DEFAULT_CONFIG)
        ctx = EchoMockContext(run=Result(), config=config)

        git_clean(ctx, dry_run=True)
        captured = capsys.readouterr()
        expected = "INVOKED: git clean --interactive --dry-run ."
        assert expected in captured.out
    def test_with_invoke_option_dry_on_cmdline(self, capsys):
        config = Config(DEFAULT_CONFIG)
        ctx = EchoMockContext(run=Result(), config=config)
        ctx.config.run.dry = True  # CMDLINE-EMULATION

        git_clean(ctx)
        captured = capsys.readouterr()
        expected = "INVOKED: git clean --interactive --dry-run ."
        assert expected in captured.out
    def test_with_option_force_on_cmdline(self, capsys):
        config = Config(DEFAULT_CONFIG)
        ctx = EchoMockContext(run=Result(), config=config)
        # ctx.config.git_clean.interactive = False

        git_clean(ctx, force=True)
        captured = capsys.readouterr()
        expected = "INVOKED: git clean --interactive --force ."
        assert expected in captured.out
    def test_without_options_if_config_disables_interactive_mode(self, capsys):
        config = Config(DEFAULT_CONFIG)
        ctx = EchoMockContext(run=Result(), config=config)
        ctx.config.git_clean.interactive = False

        git_clean(ctx)
        captured = capsys.readouterr()
        expected = "INVOKED: git clean  ."
        assert expected in captured.out
    def test_with_option_dryrun_in_configfile(self, capsys):
        config = Config(DEFAULT_CONFIG)
        ctx = EchoMockContext(run=Result(), config=config)
        # ctx.config.git_clean.interactive = False
        ctx.config.git_clean.dry_run = True

        git_clean(ctx)
        captured = capsys.readouterr()
        expected = "INVOKED: git clean --interactive --dry-run ."
        assert expected in captured.out
    def test_removes_uncommitted_files(self, mode, tmp_path, capsys,
                                       monkeypatch):
        # -- SETUP:
        setup_workdir(tmp_path, [
            "one.xxx",
            "two.xxx",
        ])
        my_file1 = tmp_path / "one.xxx"
        my_file2 = tmp_path / "two.xxx"
        assert my_file1.exists() and my_file1.is_file()
        assert my_file2.exists() and my_file2.is_file()

        # -- EXECUTE AND VERIFY:
        Path = tmp_path.__class__
        git_clean_dry_run = (mode == "dry_run")
        curdir = Path(".").resolve()
        with cd(str(tmp_path)):
            work_dir = Path(".").resolve()
            not_in_curdir = not tmp_path.samefile(curdir)
            print("WORK_DIR: %s (work_dir is not CURDIR: %s)" %
                  (work_dir, not_in_curdir))
            assert not_in_curdir, "DANGER_ZONE.SANITY_CHECK_BARRIER.saved_you"

            # with capsys.disabled():
            run("git init")
            git_dir = tmp_path / ".git/"
            assert git_dir.is_dir()
            run('git add one.xxx')
            run('git commit -m"INITIAL" one.xxx')
            run("git status")

            config = Config(DEFAULT_CONFIG)
            ctx = Context(config=config)
            ctx.config.run.dry = False
            ctx.config.git_clean.interactive = False
            monkeypatch.setattr("_pytest.capture.DontReadFromInput.read",
                                mock_read_from_stdin)
            git_clean(ctx, force=True, dry_run=git_clean_dry_run)

        assert my_file1.exists(), "OOPS: my_file1 was REMOVED"
        if git_clean_dry_run:
            # -- DRY-RUN MODE:
            captured = capsys.readouterr()
            assert "Would remove two.xxx" in captured.out
            assert my_file2.exists(), "OOPS: my_file2 was REMOVED"
        else:
            assert not my_file2.exists(), "OOPS: my_file2 was NOT_REMOVED"