Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
use warp::{
|
||||
cmd_or_ctrl_shift,
|
||||
features::FeatureFlag,
|
||||
integration_testing::{
|
||||
command_palette::open_command_palette_and_run_action,
|
||||
notebook::{
|
||||
assert_notebook_contents, assert_notebook_id, assert_notebook_not_open,
|
||||
assert_notebook_open, assert_notebook_renders_mermaid_diagram,
|
||||
assert_open_in_warp_banner_open, create_a_personal_notebook,
|
||||
enter_notebook_edit_mode_and_set_markdown, move_notebook_cursor_to_offset,
|
||||
open_notebook,
|
||||
},
|
||||
step::new_step_with_default_assertions,
|
||||
tab::{assert_pane_title, assert_tab_title},
|
||||
terminal::{
|
||||
assert_single_terminal_in_tab_bootstrapped, execute_command_for_single_terminal_in_tab,
|
||||
util::ExpectedExitStatus, wait_until_bootstrapped_single_pane_for_tab,
|
||||
},
|
||||
view_getters::terminal_view,
|
||||
window::{add_and_save_window, close_window, save_active_window_id},
|
||||
},
|
||||
};
|
||||
use warpui::integration::TestStep;
|
||||
|
||||
use super::{new_builder, Builder};
|
||||
|
||||
pub fn test_notebook_pane_tracking() -> Builder {
|
||||
new_builder()
|
||||
.with_step(
|
||||
create_a_personal_notebook("the notebook", "A test notebook")
|
||||
.add_assertion(save_active_window_id("first window")),
|
||||
)
|
||||
.with_step(
|
||||
open_notebook("first window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
// Now, reopen the notebook (from both windows) and verify that it's only opened once.
|
||||
.with_step(
|
||||
open_notebook("first window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open once",
|
||||
assert_notebook_open("the notebook"),
|
||||
),
|
||||
)
|
||||
.with_step(add_and_save_window("second window"))
|
||||
.with_step(
|
||||
open_notebook("second window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open once",
|
||||
assert_notebook_open("the notebook"),
|
||||
),
|
||||
)
|
||||
// Close and then reopen the notebook.
|
||||
.with_step(
|
||||
TestStep::new("Close the open notebook")
|
||||
.with_keystrokes(&[cmd_or_ctrl_shift("w")])
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is closed",
|
||||
assert_notebook_not_open("the notebook"),
|
||||
),
|
||||
)
|
||||
.with_step(open_notebook("second window", "the notebook"))
|
||||
// This must be in a separate step so that the active window is updated.
|
||||
.with_step(
|
||||
TestStep::new("Verify notebook is open in second window")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open in the second window",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
/// This is a regression test for CLD-713.
|
||||
pub fn test_close_notebook_tab() -> Builder {
|
||||
new_builder()
|
||||
.with_step(
|
||||
create_a_personal_notebook("the notebook", "Test Notebook")
|
||||
.add_assertion(save_active_window_id("the window")),
|
||||
)
|
||||
.with_step(
|
||||
open_notebook("the window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
.with_step(
|
||||
TestStep::new("Open a tab with cmd-t")
|
||||
.with_keystrokes(&[cmd_or_ctrl_shift("t")])
|
||||
.add_assertion(|app, window_id| {
|
||||
assert_single_terminal_in_tab_bootstrapped(app, window_id, 1)
|
||||
}),
|
||||
)
|
||||
// Change the tab title so we can identify it.
|
||||
.with_steps(open_command_palette_and_run_action(
|
||||
"Rename the Current Tab",
|
||||
))
|
||||
.with_step(TestStep::new("Set tab title").with_input_string("tab2", Some(&["enter"])))
|
||||
// Refocus the first notebook pane.
|
||||
.with_step(
|
||||
open_notebook("the window", "the notebook")
|
||||
.add_assertion(assert_tab_title(0, "Test Notebook")),
|
||||
)
|
||||
// Close the first tab, and wait for the second to be focused.
|
||||
.with_step(
|
||||
TestStep::new("Close the notebook tab")
|
||||
.with_hover_over_saved_position("close_tab_button:0")
|
||||
.with_click_on_saved_position("close_tab_button:0")
|
||||
.add_assertion(assert_tab_title(0, "tab2")),
|
||||
)
|
||||
.with_step(
|
||||
open_notebook("the window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn test_close_notebook_window() -> Builder {
|
||||
new_builder()
|
||||
.with_step(
|
||||
create_a_personal_notebook("the notebook", "Test Notebook")
|
||||
.add_assertion(save_active_window_id("first window")),
|
||||
)
|
||||
.with_step(
|
||||
open_notebook("first window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
.with_step(add_and_save_window("second window"))
|
||||
// Close the first window
|
||||
.with_step(
|
||||
close_window("first window", 1).add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is closed",
|
||||
assert_notebook_not_open("the notebook"),
|
||||
),
|
||||
)
|
||||
// Reopen the notebook in the remaining window.
|
||||
.with_step(
|
||||
open_notebook("second window", "the notebook")
|
||||
.add_assertion(assert_tab_title(0, "Test Notebook")),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn test_open_in_warp_banner() -> Builder {
|
||||
new_builder()
|
||||
.with_setup(|utils| {
|
||||
std::fs::write(utils.test_dir().join("README.md"), "# Hello, world!")
|
||||
.expect("Couldn't create README.md");
|
||||
})
|
||||
.with_step(wait_until_bootstrapped_single_pane_for_tab(0))
|
||||
.with_step(
|
||||
execute_command_for_single_terminal_in_tab(
|
||||
0,
|
||||
"cat README.md".to_string(),
|
||||
ExpectedExitStatus::Success,
|
||||
(),
|
||||
)
|
||||
.add_assertion(assert_open_in_warp_banner_open(0, 0)),
|
||||
)
|
||||
.with_step(
|
||||
new_step_with_default_assertions("Click Open in Warp banner")
|
||||
.with_click_on_saved_position_fn(|app, window_id| {
|
||||
let view = terminal_view(app, window_id, 0, 0);
|
||||
format!("open_in_warp_banner_button_{}", view.id())
|
||||
}),
|
||||
)
|
||||
.with_step(
|
||||
new_step_with_default_assertions("Wait for Markdown file to open")
|
||||
.add_assertion(assert_pane_title(0, 1, "README.md")),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn test_backspace_inside_rendered_mermaid_block_is_atomic() -> Builder {
|
||||
FeatureFlag::MarkdownMermaid.set_enabled(true);
|
||||
FeatureFlag::EditableMarkdownMermaid.set_enabled(true);
|
||||
|
||||
let markdown = "Before\n```mermaid\ngraph TD\nA --> B\n```\nAfter";
|
||||
let mermaid_block_start = markdown
|
||||
.find("```mermaid")
|
||||
.expect("Mermaid block should exist");
|
||||
let cursor_offset = markdown
|
||||
.find("graph TD")
|
||||
.expect("Mermaid source should exist")
|
||||
+ 3;
|
||||
|
||||
new_builder()
|
||||
.with_step(
|
||||
create_a_personal_notebook("the notebook", "Mermaid Notebook")
|
||||
.add_assertion(save_active_window_id("the window")),
|
||||
)
|
||||
.with_step(
|
||||
open_notebook("the window", "the notebook")
|
||||
.add_named_assertion_with_data_from_prior_step(
|
||||
"Verify notebook is open",
|
||||
assert_notebook_id(0, 0, "the notebook"),
|
||||
),
|
||||
)
|
||||
.with_step(
|
||||
enter_notebook_edit_mode_and_set_markdown(0, 0, markdown)
|
||||
.add_assertion(assert_notebook_contents(0, 0, markdown))
|
||||
.add_assertion(assert_notebook_renders_mermaid_diagram(
|
||||
0,
|
||||
0,
|
||||
mermaid_block_start,
|
||||
)),
|
||||
)
|
||||
.with_step(move_notebook_cursor_to_offset(0, 0, cursor_offset))
|
||||
.with_step(
|
||||
TestStep::new("Backspace from inside rendered Mermaid")
|
||||
.with_keystrokes(&["backspace"])
|
||||
.add_assertion(assert_notebook_contents(0, 0, "Before\nAfter")),
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user