aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/application_test.rs
blob: a513189eb51ee53de901b44079935362ed0d381b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//! ref: composer/tests/Composer/Test/ApplicationTest.php

// These drive the console Application (doRun, command resolution, plugin disabling).
// The tests exercising do_run's script-command registration (a todo!() pending the
// Symfony command-registry model), or a runtime define() of COMPOSER_DEV_WARNING_TIME,
// remain unportable.

use shirabe::command::about_command::AboutCommand;
use shirabe::command::self_update_command::SelfUpdateCommand;
use shirabe::console::application::ApplicationHandle;
use shirabe::util::platform::Platform;
use shirabe_external_packages::symfony::console::command::Command;
use shirabe_external_packages::symfony::console::input::array_input::ArrayInput;
use shirabe_external_packages::symfony::console::input::input_interface::InputInterface;
use shirabe_external_packages::symfony::console::output::buffered_output::BufferedOutput;
use shirabe_external_packages::symfony::console::output::output_interface::OutputInterface;
use shirabe_php_shim::PhpMixed;
use std::cell::RefCell;
use std::rc::Rc;

fn set_up() {
    Platform::put_env("COMPOSER_DISABLE_XDEBUG_WARN", "1");
}

fn tear_down() {
    Platform::clear_env("COMPOSER_DISABLE_XDEBUG_WARN");
}

struct TearDown;

impl Drop for TearDown {
    fn drop(&mut self) {
        tear_down();
    }
}

#[ignore = "no define() setter exists for the COMPOSER_DEV_WARNING_TIME constant (shim defined() is a fixed matches!)"]
#[test]
fn test_dev_warning() {
    let _tear_down = TearDown;
    set_up();

    todo!()
}

#[ignore]
#[test]
fn test_dev_warning_suppressed_for_self_update() {
    let _tear_down = TearDown;
    set_up();

    if Platform::is_windows() {
        // markTestSkipped('Does not run on windows')
        return;
    }

    let application = ApplicationHandle::new("Composer".to_string(), "".to_string()).unwrap();
    let command: Rc<RefCell<dyn Command>> = Rc::new(RefCell::new(SelfUpdateCommand::new()));
    application.add(command).unwrap();

    let output = Rc::new(RefCell::new(BufferedOutput::new(None, false, None)));
    let input: Rc<RefCell<dyn InputInterface>> = Rc::new(RefCell::new(
        ArrayInput::new(
            vec![(PhpMixed::from("command"), PhpMixed::from("self-update"))],
            None,
        )
        .unwrap(),
    ));
    let output_trait: Rc<RefCell<dyn OutputInterface>> = output.clone();
    application.do_run(input, output_trait).unwrap();

    assert_eq!(
        "This instance of Composer does not have the self-update command.\n\
         This could be due to a number of reasons, such as Composer being installed as a system package on your OS, or Composer being installed as a package in the current project.\n",
        output.borrow().fetch().as_str()
    );
}

#[test]
fn test_process_isolation_works_multiple_times() {
    let _tear_down = TearDown;
    set_up();

    let application = ApplicationHandle::new("Composer".to_string(), "".to_string()).unwrap();
    let command: Rc<RefCell<dyn Command>> = Rc::new(RefCell::new(AboutCommand::new()));
    application.add(command).unwrap();

    let input1: Rc<RefCell<dyn InputInterface>> = Rc::new(RefCell::new(
        ArrayInput::new(
            vec![(PhpMixed::from("command"), PhpMixed::from("about"))],
            None,
        )
        .unwrap(),
    ));
    let output1: Rc<RefCell<dyn OutputInterface>> =
        Rc::new(RefCell::new(BufferedOutput::new(None, false, None)));
    assert_eq!(0, application.do_run(input1, output1).unwrap());

    let input2: Rc<RefCell<dyn InputInterface>> = Rc::new(RefCell::new(
        ArrayInput::new(
            vec![(PhpMixed::from("command"), PhpMixed::from("about"))],
            None,
        )
        .unwrap(),
    ));
    let output2: Rc<RefCell<dyn OutputInterface>> =
        Rc::new(RefCell::new(BufferedOutput::new(None, false, None)));
    assert_eq!(0, application.do_run(input2, output2).unwrap());
}

#[ignore = "do_run's script-command registration is a todo!() pending the Symfony command-registry model"]
#[test]
fn test_no_plugins_disables_plugins_when_script_commands_exist() {
    let _tear_down = TearDown;
    set_up();

    todo!()
}

#[ignore = "do_run's script-command registration is a todo!() pending the Symfony command-registry model"]
#[test]
fn test_script_command_takes_priority_over_abbreviated_builtin_command() {
    let _tear_down = TearDown;
    set_up();

    todo!()
}