add panels
This commit is contained in:
+105
@@ -184,6 +184,90 @@ fn window_commands_are_queued_for_the_view() {
|
||||
assert!(drain_window_commands().is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn panel_api_opens_closes_and_toggles_the_same_panel_state() {
|
||||
let workspace = Rc::new(RefCell::new(Workspace::default()));
|
||||
let (api, _keymap) = install_api(workspace);
|
||||
let right = api.right_panel_handle();
|
||||
let bottom = api.bottom_panel_handle();
|
||||
let left = api.left_panel_handle();
|
||||
|
||||
assert!(!left.borrow().is_open());
|
||||
assert!(!right.borrow().is_open());
|
||||
assert!(!bottom.borrow().is_open());
|
||||
|
||||
api.left_panel().open();
|
||||
assert!(left.borrow().is_open());
|
||||
assert!(api.left_panel().is_open());
|
||||
api.left_panel().close();
|
||||
assert!(!left.borrow().is_open());
|
||||
|
||||
api.right_panel().open();
|
||||
assert!(right.borrow().is_open());
|
||||
assert!(api.right_panel().is_open());
|
||||
|
||||
// toggle возвращает новое состояние и не трогает вторую панель.
|
||||
assert!(!api.right_panel().toggle());
|
||||
assert!(!right.borrow().is_open());
|
||||
assert!(api.right_panel().toggle());
|
||||
assert!(right.borrow().is_open());
|
||||
|
||||
api.right_panel().close();
|
||||
assert!(!right.borrow().is_open());
|
||||
|
||||
api.bottom_panel().open();
|
||||
assert!(bottom.borrow().is_open());
|
||||
assert!(!right.borrow().is_open());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lua_script_can_control_panels() {
|
||||
let workspace = Rc::new(RefCell::new(Workspace::default()));
|
||||
let (api, _keymap) = install_api(workspace);
|
||||
let right = api.right_panel_handle();
|
||||
let bottom = api.bottom_panel_handle();
|
||||
let left = api.left_panel_handle();
|
||||
|
||||
let dir = temp_script_dir("panels");
|
||||
let script = dir.join("panels.lua");
|
||||
std::fs::write(
|
||||
&script,
|
||||
r#"
|
||||
app.left_panel:open()
|
||||
assert(app.left_panel:is_open())
|
||||
app.left_panel:close()
|
||||
assert(not app.left_panel:is_open())
|
||||
assert(app.left_panel:toggle() == true)
|
||||
|
||||
app.right_panel:open()
|
||||
assert(app.right_panel:is_open())
|
||||
assert(not app.bottom_panel:is_open())
|
||||
|
||||
app.bottom_panel:open()
|
||||
app.right_panel:toggle()
|
||||
assert(not app.right_panel:is_open())
|
||||
|
||||
assert(app.bottom_panel:toggle() == false)
|
||||
app.bottom_panel:close()
|
||||
assert(not app.bottom_panel:is_open())
|
||||
|
||||
assert(app.right_panel:toggle() == true)
|
||||
"#,
|
||||
)
|
||||
.expect("panels.lua");
|
||||
|
||||
let engine = ScriptEngine::new(api).expect("движок Lua");
|
||||
engine
|
||||
.run_file(&script)
|
||||
.expect("панели должны управляться из Lua");
|
||||
|
||||
assert!(left.borrow().is_open());
|
||||
assert!(right.borrow().is_open());
|
||||
assert!(!bottom.borrow().is_open());
|
||||
|
||||
let _ = std::fs::remove_dir_all(&dir);
|
||||
}
|
||||
|
||||
/// Временный каталог с уникальным именем для Lua-сценариев.
|
||||
fn temp_script_dir(prefix: &str) -> std::path::PathBuf {
|
||||
let dir = std::env::temp_dir().join(format!(
|
||||
@@ -461,6 +545,27 @@ fn lua_key_bindings_receive_keys_while_editor_is_focused(cx: &mut TestAppContext
|
||||
let _ = std::fs::remove_dir_all(&dir);
|
||||
}
|
||||
|
||||
#[gpui_kit::test]
|
||||
fn opened_panels_render_without_panicking(cx: &mut TestAppContext) {
|
||||
cx.update(gpui_kit::init);
|
||||
|
||||
let (app, visual) = cx.add_window_view(|window, cx| MyApp::new(window, cx));
|
||||
|
||||
let api = AppApi::global();
|
||||
api.left_panel().open();
|
||||
api.right_panel().open();
|
||||
api.bottom_panel().open();
|
||||
visual.update(|_window, cx| {
|
||||
app.update(cx, |_, cx| cx.notify());
|
||||
});
|
||||
visual.run_until_parked();
|
||||
|
||||
// Состояние осталось у панелей, которые видит вид.
|
||||
assert!(api.left_panel_handle().borrow().is_open());
|
||||
assert!(api.right_panel_handle().borrow().is_open());
|
||||
assert!(api.bottom_panel_handle().borrow().is_open());
|
||||
}
|
||||
|
||||
#[gpui_kit::test]
|
||||
fn typing_into_editor_updates_active_document(cx: &mut TestAppContext) {
|
||||
cx.update(gpui_kit::init);
|
||||
|
||||
Reference in New Issue
Block a user