History

Comment out the tests

Piotr Osiewicz committed 2 years ago

Commit 01ecbec1 parent ddbd5cf1 file · +675 −675Browse files

Unified · Split

crates/search2/src/project_search.rs+675−675
@@ -2140,711 +2140,711 @@ impl ToolbarItemView for ProjectSearchBar { · 2139 unmodified lines
2140 }2140 }
2141}2141}
2142 2142
2143#[cfg(test)]2143// #[cfg(test)]
2144pub mod tests {2144// pub mod tests {
2145 use super::*;2145// use super::*;
2146 use editor::DisplayPoint;2146// use editor::DisplayPoint;
2147 use gpui::{color::Color, executor::Deterministic, TestAppContext};2147// use gpui::{color::Color, executor::Deterministic, TestAppContext};
2148 use project::FakeFs;2148// use project::FakeFs;
2149 use semantic_index::semantic_index_settings::SemanticIndexSettings;2149// use semantic_index::semantic_index_settings::SemanticIndexSettings;
2150 use serde_json::json;2150// use serde_json::json;
2151 use settings::SettingsStore;2151// use settings::SettingsStore;
2152 use std::sync::Arc;2152// use std::sync::Arc;
2153 use theme::ThemeSettings;2153// use theme::ThemeSettings;
2154 2154
2155 #[gpui::test]2155// #[gpui::test]
2156 async fn test_project_search(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) {2156// async fn test_project_search(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) {
2157 init_test(cx);2157// init_test(cx);
2158 2158
2159 let fs = FakeFs::new(cx.background_executor());2159// let fs = FakeFs::new(cx.background_executor());
2160 fs.insert_tree(2160// fs.insert_tree(
2161 "/dir",2161// "/dir",
2162 json!({2162// json!({
2163 "one.rs": "const ONE: usize = 1;",2163// "one.rs": "const ONE: usize = 1;",
2164 "two.rs": "const TWO: usize = one::ONE + one::ONE;",2164// "two.rs": "const TWO: usize = one::ONE + one::ONE;",
2165 "three.rs": "const THREE: usize = one::ONE + two::TWO;",2165// "three.rs": "const THREE: usize = one::ONE + two::TWO;",
2166 "four.rs": "const FOUR: usize = one::ONE + three::THREE;",2166// "four.rs": "const FOUR: usize = one::ONE + three::THREE;",
2167 }),2167// }),
2168 )2168// )
2169 .await;2169// .await;
2170 let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;2170// let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
2171 let search = cx.add_model(|cx| ProjectSearch::new(project, cx));2171// let search = cx.add_model(|cx| ProjectSearch::new(project, cx));
2172 let search_view = cx2172// let search_view = cx
2173 .add_window(|cx| ProjectSearchView::new(search.clone(), cx, None))2173// .add_window(|cx| ProjectSearchView::new(search.clone(), cx, None))
2174 .root(cx);2174// .root(cx);
2175 2175
2176 search_view.update(cx, |search_view, cx| {2176// search_view.update(cx, |search_view, cx| {
2177 search_view2177// search_view
2178 .query_editor2178// .query_editor
2179 .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));2179// .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));
2180 search_view.search(cx);2180// search_view.search(cx);
2181 });2181// });
2182 deterministic.run_until_parked();2182// deterministic.run_until_parked();
2183 search_view.update(cx, |search_view, cx| {2183// search_view.update(cx, |search_view, cx| {
2184 assert_eq!(2184// assert_eq!(
2185 search_view2185// search_view
2186 .results_editor2186// .results_editor
2187 .update(cx, |editor, cx| editor.display_text(cx)),2187// .update(cx, |editor, cx| editor.display_text(cx)),
2188 "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;"2188// "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;"
2189 );2189// );
2190 assert_eq!(2190// assert_eq!(
2191 search_view2191// search_view
2192 .results_editor2192// .results_editor
2193 .update(cx, |editor, cx| editor.all_text_background_highlights(cx)),2193// .update(cx, |editor, cx| editor.all_text_background_highlights(cx)),
2194 &[2194// &[
2195 (2195// (
2196 DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35),2196// DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35),
2197 Color::red()2197// Color::red()
2198 ),2198// ),
2199 (2199// (
2200 DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40),2200// DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40),
2201 Color::red()2201// Color::red()
2202 ),2202// ),
2203 (2203// (
2204 DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9),2204// DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9),
2205 Color::red()2205// Color::red()
2206 )2206// )
2207 ]2207// ]
2208 );2208// );
2209 assert_eq!(search_view.active_match_index, Some(0));2209// assert_eq!(search_view.active_match_index, Some(0));
2210 assert_eq!(2210// assert_eq!(
2211 search_view2211// search_view
2212 .results_editor2212// .results_editor
2213 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),2213// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2214 [DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35)]2214// [DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35)]
2215 );2215// );
2216
2217 search_view.select_match(Direction::Next, cx);
2218 });
2219
2220 search_view.update(cx, |search_view, cx| {
2221 assert_eq!(search_view.active_match_index, Some(1));
2222 assert_eq!(
2223 search_view
2224 .results_editor
2225 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2226 [DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40)]
2227 );
2228 search_view.select_match(Direction::Next, cx);
2229 });
2230
2231 search_view.update(cx, |search_view, cx| {
2232 assert_eq!(search_view.active_match_index, Some(2));
2233 assert_eq!(
2234 search_view
2235 .results_editor
2236 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2237 [DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9)]
2238 );
2239 search_view.select_match(Direction::Next, cx);
2240 });
2241
2242 search_view.update(cx, |search_view, cx| {
2243 assert_eq!(search_view.active_match_index, Some(0));
2244 assert_eq!(
2245 search_view
2246 .results_editor
2247 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2248 [DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35)]
2249 );
2250 search_view.select_match(Direction::Prev, cx);
2251 });
2252
2253 search_view.update(cx, |search_view, cx| {
2254 assert_eq!(search_view.active_match_index, Some(2));
2255 assert_eq!(
2256 search_view
2257 .results_editor
2258 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2259 [DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9)]
2260 );
2261 search_view.select_match(Direction::Prev, cx);
2262 });
2263
2264 search_view.update(cx, |search_view, cx| {
2265 assert_eq!(search_view.active_match_index, Some(1));
2266 assert_eq!(
2267 search_view
2268 .results_editor
2269 .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2270 [DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40)]
2271 );
2272 });
2273 }
2274 2216
2275 #[gpui::test]2217// search_view.select_match(Direction::Next, cx);
2276 async fn test_project_search_focus(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) {2218// });
2277 init_test(cx);
2278
2279 let fs = FakeFs::new(cx.background_executor());
2280 fs.insert_tree(
2281 "/dir",
2282 json!({
2283 "one.rs": "const ONE: usize = 1;",
2284 "two.rs": "const TWO: usize = one::ONE + one::ONE;",
2285 "three.rs": "const THREE: usize = one::ONE + two::TWO;",
2286 "four.rs": "const FOUR: usize = one::ONE + three::THREE;",
2287 }),
2288 )
2289 .await;
2290 let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
2291 let window = cx.add_window(|cx| Workspace::test_new(project, cx));
2292 let workspace = window.root(cx);
2293
2294 let active_item = cx.read(|cx| {
2295 workspace
2296 .read(cx)
2297 .active_pane()
2298 .read(cx)
2299 .active_item()
2300 .and_then(|item| item.downcast::<ProjectSearchView>())
2301 });
2302 assert!(
2303 active_item.is_none(),
2304 "Expected no search panel to be active, but got: {active_item:?}"
2305 );
2306 2219
2307 workspace.update(cx, |workspace, cx| {2220// search_view.update(cx, |search_view, cx| {
2308 ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)2221// assert_eq!(search_view.active_match_index, Some(1));
2309 });2222// assert_eq!(
2223// search_view
2224// .results_editor
2225// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2226// [DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40)]
2227// );
2228// search_view.select_match(Direction::Next, cx);
2229// });
2310 2230
2311 let Some(search_view) = cx.read(|cx| {2231// search_view.update(cx, |search_view, cx| {
2312 workspace2232// assert_eq!(search_view.active_match_index, Some(2));
2313 .read(cx)2233// assert_eq!(
2314 .active_pane()2234// search_view
2315 .read(cx)2235// .results_editor
2316 .active_item()2236// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2317 .and_then(|item| item.downcast::<ProjectSearchView>())2237// [DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9)]
2318 }) else {2238// );
2319 panic!("Search view expected to appear after new search event trigger")2239// search_view.select_match(Direction::Next, cx);
2320 };2240// });
2321 let search_view_id = search_view.id();
2322 2241
2323 cx.spawn(|mut cx| async move {2242// search_view.update(cx, |search_view, cx| {
2324 window.dispatch_action(search_view_id, &ToggleFocus, &mut cx);2243// assert_eq!(search_view.active_match_index, Some(0));
2325 })2244// assert_eq!(
2326 .detach();2245// search_view
2327 deterministic.run_until_parked();2246// .results_editor
2328 search_view.update(cx, |search_view, cx| {2247// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2329 assert!(2248// [DisplayPoint::new(2, 32)..DisplayPoint::new(2, 35)]
2330 search_view.query_editor.is_focused(cx),2249// );
2331 "Empty search view should be focused after the toggle focus event: no results panel to focus on",2250// search_view.select_match(Direction::Prev, cx);
2332 );2251// });
2333 });
2334 2252
2335 search_view.update(cx, |search_view, cx| {2253// search_view.update(cx, |search_view, cx| {
2336 let query_editor = &search_view.query_editor;2254// assert_eq!(search_view.active_match_index, Some(2));
2337 assert!(2255// assert_eq!(
2338 query_editor.is_focused(cx),2256// search_view
2339 "Search view should be focused after the new search view is activated",2257// .results_editor
2340 );2258// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2341 let query_text = query_editor.read(cx).text(cx);2259// [DisplayPoint::new(5, 6)..DisplayPoint::new(5, 9)]
2342 assert!(2260// );
2343 query_text.is_empty(),2261// search_view.select_match(Direction::Prev, cx);
2344 "New search query should be empty but got '{query_text}'",2262// });
2345 );
2346 let results_text = search_view
2347 .results_editor
2348 .update(cx, |editor, cx| editor.display_text(cx));
2349 assert!(
2350 results_text.is_empty(),
2351 "Empty search view should have no results but got '{results_text}'"
2352 );
2353 });
2354 2263
2355 search_view.update(cx, |search_view, cx| {2264// search_view.update(cx, |search_view, cx| {
2356 search_view.query_editor.update(cx, |query_editor, cx| {2265// assert_eq!(search_view.active_match_index, Some(1));
2357 query_editor.set_text("sOMETHINGtHATsURELYdOESnOTeXIST", cx)2266// assert_eq!(
2358 });2267// search_view
2359 search_view.search(cx);2268// .results_editor
2360 });2269// .update(cx, |editor, cx| editor.selections.display_ranges(cx)),
2361 deterministic.run_until_parked();2270// [DisplayPoint::new(2, 37)..DisplayPoint::new(2, 40)]
2362 search_view.update(cx, |search_view, cx| {2271// );
2363 let results_text = search_view2272// });
2364 .results_editor2273// }
2365 .update(cx, |editor, cx| editor.display_text(cx));
2366 assert!(
2367 results_text.is_empty(),
2368 "Search view for mismatching query should have no results but got '{results_text}'"
2369 );
2370 assert!(
2371 search_view.query_editor.is_focused(cx),
2372 "Search view should be focused after mismatching query had been used in search",
2373 );
2374 });
2375 cx.spawn(
2376 |mut cx| async move { window.dispatch_action(search_view_id, &ToggleFocus, &mut cx) },
2377 )
2378 .detach();
2379 deterministic.run_until_parked();
2380 search_view.update(cx, |search_view, cx| {
2381 assert!(
2382 search_view.query_editor.is_focused(cx),
2383 "Search view with mismatching query should be focused after the toggle focus event: still no results panel to focus on",
2384 );
2385 });
2386 2274
2387 search_view.update(cx, |search_view, cx| {2275// #[gpui::test]
2388 search_view2276// async fn test_project_search_focus(deterministic: Arc<Deterministic>, cx: &mut TestAppContext) {
2389 .query_editor2277// init_test(cx);
2390 .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));2278
2391 search_view.search(cx);2279// let fs = FakeFs::new(cx.background_executor());
2392 });2280// fs.insert_tree(
2393 deterministic.run_until_parked();2281// "/dir",
2394 search_view.update(cx, |search_view, cx| {2282// json!({
2395 assert_eq!(2283// "one.rs": "const ONE: usize = 1;",
2396 search_view2284// "two.rs": "const TWO: usize = one::ONE + one::ONE;",
2397 .results_editor2285// "three.rs": "const THREE: usize = one::ONE + two::TWO;",
2398 .update(cx, |editor, cx| editor.display_text(cx)),2286// "four.rs": "const FOUR: usize = one::ONE + three::THREE;",
2399 "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;",2287// }),
2400 "Search view results should match the query"2288// )
2401 );2289// .await;
2402 assert!(2290// let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
2403 search_view.results_editor.is_focused(cx),2291// let window = cx.add_window(|cx| Workspace::test_new(project, cx));
2404 "Search view with mismatching query should be focused after search results are available",2292// let workspace = window.root(cx);
2405 );2293
2406 });2294// let active_item = cx.read(|cx| {
2407 cx.spawn(|mut cx| async move {2295// workspace
2408 window.dispatch_action(search_view_id, &ToggleFocus, &mut cx);2296// .read(cx)
2409 })2297// .active_pane()
2410 .detach();2298// .read(cx)
2411 deterministic.run_until_parked();2299// .active_item()
2412 search_view.update(cx, |search_view, cx| {2300// .and_then(|item| item.downcast::<ProjectSearchView>())
2413 assert!(2301// });
2414 search_view.results_editor.is_focused(cx),2302// assert!(
2415 "Search view with matching query should still have its results editor focused after the toggle focus event",2303// active_item.is_none(),
2416 );2304// "Expected no search panel to be active, but got: {active_item:?}"
2417 });2305// );
2418 2306
2419 workspace.update(cx, |workspace, cx| {2307// workspace.update(cx, |workspace, cx| {
2420 ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)2308// ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)
2421 });2309// });
2422 deterministic.run_until_parked();
2423 let Some(search_view_2) = cx.read(|cx| {
2424 workspace
2425 .read(cx)
2426 .active_pane()
2427 .read(cx)
2428 .active_item()
2429 .and_then(|item| item.downcast::<ProjectSearchView>())
2430 }) else {
2431 panic!("Search view expected to appear after new search event trigger")
2432 };
2433 let search_view_id_2 = search_view_2.id();
2434 assert_ne!(
2435 search_view_2, search_view,
2436 "New search view should be open after `workspace::NewSearch` event"
2437 );
2438 2310
2439 search_view.update(cx, |search_view, cx| {2311// let Some(search_view) = cx.read(|cx| {
2440 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO", "First search view should not have an updated query");2312// workspace
2441 assert_eq!(2313// .read(cx)
2442 search_view2314// .active_pane()
2443 .results_editor2315// .read(cx)
2444 .update(cx, |editor, cx| editor.display_text(cx)),2316// .active_item()
2445 "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;",2317// .and_then(|item| item.downcast::<ProjectSearchView>())
2446 "Results of the first search view should not update too"2318// }) else {
2447 );2319// panic!("Search view expected to appear after new search event trigger")
2448 assert!(2320// };
2449 !search_view.query_editor.is_focused(cx),2321// let search_view_id = search_view.id();
2450 "Focus should be moved away from the first search view"2322
2451 );2323// cx.spawn(|mut cx| async move {
2452 });2324// window.dispatch_action(search_view_id, &ToggleFocus, &mut cx);
2325// })
2326// .detach();
2327// deterministic.run_until_parked();
2328// search_view.update(cx, |search_view, cx| {
2329// assert!(
2330// search_view.query_editor.is_focused(cx),
2331// "Empty search view should be focused after the toggle focus event: no results panel to focus on",
2332// );
2333// });
2453 2334
2454 search_view_2.update(cx, |search_view_2, cx| {2335// search_view.update(cx, |search_view, cx| {
2455 assert_eq!(2336// let query_editor = &search_view.query_editor;
2456 search_view_2.query_editor.read(cx).text(cx),2337// assert!(
2457 "two",2338// query_editor.is_focused(cx),
2458 "New search view should get the query from the text cursor was at during the event spawn (first search view's first result)"2339// "Search view should be focused after the new search view is activated",
2459 );2340// );
2460 assert_eq!(2341// let query_text = query_editor.read(cx).text(cx);
2461 search_view_22342// assert!(
2462 .results_editor2343// query_text.is_empty(),
2463 .update(cx, |editor, cx| editor.display_text(cx)),2344// "New search query should be empty but got '{query_text}'",
2464 "",2345// );
2465 "No search results should be in the 2nd view yet, as we did not spawn a search for it"2346// let results_text = search_view
2466 );2347// .results_editor
2467 assert!(2348// .update(cx, |editor, cx| editor.display_text(cx));
2468 search_view_2.query_editor.is_focused(cx),2349// assert!(
2469 "Focus should be moved into query editor fo the new window"2350// results_text.is_empty(),
2470 );2351// "Empty search view should have no results but got '{results_text}'"
2471 });2352// );
2353// });
2472 2354
2473 search_view_2.update(cx, |search_view_2, cx| {2355// search_view.update(cx, |search_view, cx| {
2474 search_view_22356// search_view.query_editor.update(cx, |query_editor, cx| {
2475 .query_editor2357// query_editor.set_text("sOMETHINGtHATsURELYdOESnOTeXIST", cx)
2476 .update(cx, |query_editor, cx| query_editor.set_text("FOUR", cx));2358// });
2477 search_view_2.search(cx);2359// search_view.search(cx);
2478 });2360// });
2479 deterministic.run_until_parked();2361// deterministic.run_until_parked();
2480 search_view_2.update(cx, |search_view_2, cx| {2362// search_view.update(cx, |search_view, cx| {
2481 assert_eq!(2363// let results_text = search_view
2482 search_view_22364// .results_editor
2483 .results_editor2365// .update(cx, |editor, cx| editor.display_text(cx));
2484 .update(cx, |editor, cx| editor.display_text(cx)),2366// assert!(
2485 "\n\nconst FOUR: usize = one::ONE + three::THREE;",2367// results_text.is_empty(),
2486 "New search view with the updated query should have new search results"2368// "Search view for mismatching query should have no results but got '{results_text}'"
2487 );2369// );
2488 assert!(2370// assert!(
2489 search_view_2.results_editor.is_focused(cx),2371// search_view.query_editor.is_focused(cx),
2490 "Search view with mismatching query should be focused after search results are available",2372// "Search view should be focused after mismatching query had been used in search",
2491 );2373// );
2492 });2374// });
2375// cx.spawn(
2376// |mut cx| async move { window.dispatch_action(search_view_id, &ToggleFocus, &mut cx) },
2377// )
2378// .detach();
2379// deterministic.run_until_parked();
2380// search_view.update(cx, |search_view, cx| {
2381// assert!(
2382// search_view.query_editor.is_focused(cx),
2383// "Search view with mismatching query should be focused after the toggle focus event: still no results panel to focus on",
2384// );
2385// });
2493 2386
2494 cx.spawn(|mut cx| async move {2387// search_view.update(cx, |search_view, cx| {
2495 window.dispatch_action(search_view_id_2, &ToggleFocus, &mut cx);2388// search_view
2496 })2389// .query_editor
2497 .detach();2390// .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));
2498 deterministic.run_until_parked();2391// search_view.search(cx);
2499 search_view_id_2.update(cx, |search_view_2, cx| {2392// });
2500 assert!(2393// deterministic.run_until_parked();
2501 search_view_2.results_editor.is_focused(cx),2394// search_view.update(cx, |search_view, cx| {
2502 "Search view with matching query should switch focus to the results editor after the toggle focus event",2395// assert_eq!(
2503 );2396// search_view
2504 });2397// .results_editor
2505 }2398// .update(cx, |editor, cx| editor.display_text(cx)),
2399// "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;",
2400// "Search view results should match the query"
2401// );
2402// assert!(
2403// search_view.results_editor.is_focused(cx),
2404// "Search view with mismatching query should be focused after search results are available",
2405// );
2406// });
2407// cx.spawn(|mut cx| async move {
2408// window.dispatch_action(search_view_id, &ToggleFocus, &mut cx);
2409// })
2410// .detach();
2411// deterministic.run_until_parked();
2412// search_view.update(cx, |search_view, cx| {
2413// assert!(
2414// search_view.results_editor.is_focused(cx),
2415// "Search view with matching query should still have its results editor focused after the toggle focus event",
2416// );
2417// });
2506 2418
2507 #[gpui::test]2419// workspace.update(cx, |workspace, cx| {
2508 async fn test_new_project_search_in_directory(2420// ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)
2509 deterministic: Arc<Deterministic>,2421// });
2510 cx: &mut TestAppContext,2422// deterministic.run_until_parked();
2511 ) {2423// let Some(search_view_2) = cx.read(|cx| {
2512 init_test(cx);2424// workspace
2513 2425// .read(cx)
2514 let fs = FakeFs::new(cx.background_executor());2426// .active_pane()
2515 fs.insert_tree(2427// .read(cx)
2516 "/dir",2428// .active_item()
2517 json!({2429// .and_then(|item| item.downcast::<ProjectSearchView>())
2518 "a": {2430// }) else {
2519 "one.rs": "const ONE: usize = 1;",2431// panic!("Search view expected to appear after new search event trigger")
2520 "two.rs": "const TWO: usize = one::ONE + one::ONE;",2432// };
2521 },2433// let search_view_id_2 = search_view_2.id();
2522 "b": {2434// assert_ne!(
2523 "three.rs": "const THREE: usize = one::ONE + two::TWO;",2435// search_view_2, search_view,
2524 "four.rs": "const FOUR: usize = one::ONE + three::THREE;",2436// "New search view should be open after `workspace::NewSearch` event"
2525 },2437// );
2526 }),2438
2527 )2439// search_view.update(cx, |search_view, cx| {
2528 .await;2440// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO", "First search view should not have an updated query");
2529 let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;2441// assert_eq!(
2530 let worktree_id = project.read_with(cx, |project, cx| {2442// search_view
2531 project.worktrees(cx).next().unwrap().read(cx).id()2443// .results_editor
2532 });2444// .update(cx, |editor, cx| editor.display_text(cx)),
2533 let workspace = cx2445// "\n\nconst THREE: usize = one::ONE + two::TWO;\n\n\nconst TWO: usize = one::ONE + one::ONE;",
2534 .add_window(|cx| Workspace::test_new(project, cx))2446// "Results of the first search view should not update too"
2535 .root(cx);2447// );
2536 2448// assert!(
2537 let active_item = cx.read(|cx| {2449// !search_view.query_editor.is_focused(cx),
2538 workspace2450// "Focus should be moved away from the first search view"
2539 .read(cx)2451// );
2540 .active_pane()2452// });
2541 .read(cx)
2542 .active_item()
2543 .and_then(|item| item.downcast::<ProjectSearchView>())
2544 });
2545 assert!(
2546 active_item.is_none(),
2547 "Expected no search panel to be active, but got: {active_item:?}"
2548 );
2549 2453
2550 let one_file_entry = cx.update(|cx| {2454// search_view_2.update(cx, |search_view_2, cx| {
2551 workspace2455// assert_eq!(
2552 .read(cx)2456// search_view_2.query_editor.read(cx).text(cx),
2553 .project()2457// "two",
2554 .read(cx)2458// "New search view should get the query from the text cursor was at during the event spawn (first search view's first result)"
2555 .entry_for_path(&(worktree_id, "a/one.rs").into(), cx)2459// );
2556 .expect("no entry for /a/one.rs file")2460// assert_eq!(
2557 });2461// search_view_2
2558 assert!(one_file_entry.is_file());2462// .results_editor
2559 workspace.update(cx, |workspace, cx| {2463// .update(cx, |editor, cx| editor.display_text(cx)),
2560 ProjectSearchView::new_search_in_directory(workspace, &one_file_entry, cx)2464// "",
2561 });2465// "No search results should be in the 2nd view yet, as we did not spawn a search for it"
2562 let active_search_entry = cx.read(|cx| {2466// );
2563 workspace2467// assert!(
2564 .read(cx)2468// search_view_2.query_editor.is_focused(cx),
2565 .active_pane()2469// "Focus should be moved into query editor fo the new window"
2566 .read(cx)2470// );
2567 .active_item()2471// });
2568 .and_then(|item| item.downcast::<ProjectSearchView>())
2569 });
2570 assert!(
2571 active_search_entry.is_none(),
2572 "Expected no search panel to be active for file entry"
2573 );
2574 2472
2575 let a_dir_entry = cx.update(|cx| {2473// search_view_2.update(cx, |search_view_2, cx| {
2576 workspace2474// search_view_2
2577 .read(cx)2475// .query_editor
2578 .project()2476// .update(cx, |query_editor, cx| query_editor.set_text("FOUR", cx));
2579 .read(cx)2477// search_view_2.search(cx);
2580 .entry_for_path(&(worktree_id, "a").into(), cx)2478// });
2581 .expect("no entry for /a/ directory")2479// deterministic.run_until_parked();
2582 });2480// search_view_2.update(cx, |search_view_2, cx| {
2583 assert!(a_dir_entry.is_dir());2481// assert_eq!(
2584 workspace.update(cx, |workspace, cx| {2482// search_view_2
2585 ProjectSearchView::new_search_in_directory(workspace, &a_dir_entry, cx)2483// .results_editor
2586 });2484// .update(cx, |editor, cx| editor.display_text(cx)),
2485// "\n\nconst FOUR: usize = one::ONE + three::THREE;",
2486// "New search view with the updated query should have new search results"
2487// );
2488// assert!(
2489// search_view_2.results_editor.is_focused(cx),
2490// "Search view with mismatching query should be focused after search results are available",
2491// );
2492// });
2587 2493
2588 let Some(search_view) = cx.read(|cx| {2494// cx.spawn(|mut cx| async move {
2589 workspace2495// window.dispatch_action(search_view_id_2, &ToggleFocus, &mut cx);
2590 .read(cx)2496// })
2591 .active_pane()2497// .detach();
2592 .read(cx)2498// deterministic.run_until_parked();
2593 .active_item()2499// search_view_id_2.update(cx, |search_view_2, cx| {
2594 .and_then(|item| item.downcast::<ProjectSearchView>())2500// assert!(
2595 }) else {2501// search_view_2.results_editor.is_focused(cx),
2596 panic!("Search view expected to appear after new search in directory event trigger")2502// "Search view with matching query should switch focus to the results editor after the toggle focus event",
2597 };2503// );
2598 deterministic.run_until_parked();2504// });
2599 search_view.update(cx, |search_view, cx| {2505// }
2600 assert!(
2601 search_view.query_editor.is_focused(cx),
2602 "On new search in directory, focus should be moved into query editor"
2603 );
2604 search_view.excluded_files_editor.update(cx, |editor, cx| {
2605 assert!(
2606 editor.display_text(cx).is_empty(),
2607 "New search in directory should not have any excluded files"
2608 );
2609 });
2610 search_view.included_files_editor.update(cx, |editor, cx| {
2611 assert_eq!(
2612 editor.display_text(cx),
2613 a_dir_entry.path.to_str().unwrap(),
2614 "New search in directory should have included dir entry path"
2615 );
2616 });
2617 });
2618 2506
2619 search_view.update(cx, |search_view, cx| {2507// #[gpui::test]
2620 search_view2508// async fn test_new_project_search_in_directory(
2621 .query_editor2509// deterministic: Arc<Deterministic>,
2622 .update(cx, |query_editor, cx| query_editor.set_text("const", cx));2510// cx: &mut TestAppContext,
2623 search_view.search(cx);2511// ) {
2624 });2512// init_test(cx);
2625 deterministic.run_until_parked();2513
2626 search_view.update(cx, |search_view, cx| {2514// let fs = FakeFs::new(cx.background_executor());
2627 assert_eq!(2515// fs.insert_tree(
2628 search_view2516// "/dir",
2629 .results_editor2517// json!({
2630 .update(cx, |editor, cx| editor.display_text(cx)),2518// "a": {
2631 "\n\nconst ONE: usize = 1;\n\n\nconst TWO: usize = one::ONE + one::ONE;",2519// "one.rs": "const ONE: usize = 1;",
2632 "New search in directory should have a filter that matches a certain directory"2520// "two.rs": "const TWO: usize = one::ONE + one::ONE;",
2633 );2521// },
2634 });2522// "b": {
2635 }2523// "three.rs": "const THREE: usize = one::ONE + two::TWO;",
2524// "four.rs": "const FOUR: usize = one::ONE + three::THREE;",
2525// },
2526// }),
2527// )
2528// .await;
2529// let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
2530// let worktree_id = project.read_with(cx, |project, cx| {
2531// project.worktrees(cx).next().unwrap().read(cx).id()
2532// });
2533// let workspace = cx
2534// .add_window(|cx| Workspace::test_new(project, cx))
2535// .root(cx);
2536
2537// let active_item = cx.read(|cx| {
2538// workspace
2539// .read(cx)
2540// .active_pane()
2541// .read(cx)
2542// .active_item()
2543// .and_then(|item| item.downcast::<ProjectSearchView>())
2544// });
2545// assert!(
2546// active_item.is_none(),
2547// "Expected no search panel to be active, but got: {active_item:?}"
2548// );
2549
2550// let one_file_entry = cx.update(|cx| {
2551// workspace
2552// .read(cx)
2553// .project()
2554// .read(cx)
2555// .entry_for_path(&(worktree_id, "a/one.rs").into(), cx)
2556// .expect("no entry for /a/one.rs file")
2557// });
2558// assert!(one_file_entry.is_file());
2559// workspace.update(cx, |workspace, cx| {
2560// ProjectSearchView::new_search_in_directory(workspace, &one_file_entry, cx)
2561// });
2562// let active_search_entry = cx.read(|cx| {
2563// workspace
2564// .read(cx)
2565// .active_pane()
2566// .read(cx)
2567// .active_item()
2568// .and_then(|item| item.downcast::<ProjectSearchView>())
2569// });
2570// assert!(
2571// active_search_entry.is_none(),
2572// "Expected no search panel to be active for file entry"
2573// );
2574
2575// let a_dir_entry = cx.update(|cx| {
2576// workspace
2577// .read(cx)
2578// .project()
2579// .read(cx)
2580// .entry_for_path(&(worktree_id, "a").into(), cx)
2581// .expect("no entry for /a/ directory")
2582// });
2583// assert!(a_dir_entry.is_dir());
2584// workspace.update(cx, |workspace, cx| {
2585// ProjectSearchView::new_search_in_directory(workspace, &a_dir_entry, cx)
2586// });
2636 2587
2637 #[gpui::test]2588// let Some(search_view) = cx.read(|cx| {
2638 async fn test_search_query_history(cx: &mut TestAppContext) {2589// workspace
2639 init_test(cx);2590// .read(cx)
2640 2591// .active_pane()
2641 let fs = FakeFs::new(cx.background_executor());2592// .read(cx)
2642 fs.insert_tree(2593// .active_item()
2643 "/dir",2594// .and_then(|item| item.downcast::<ProjectSearchView>())
2644 json!({2595// }) else {
2645 "one.rs": "const ONE: usize = 1;",2596// panic!("Search view expected to appear after new search in directory event trigger")
2646 "two.rs": "const TWO: usize = one::ONE + one::ONE;",2597// };
2647 "three.rs": "const THREE: usize = one::ONE + two::TWO;",2598// deterministic.run_until_parked();
2648 "four.rs": "const FOUR: usize = one::ONE + three::THREE;",2599// search_view.update(cx, |search_view, cx| {
2649 }),2600// assert!(
2650 )2601// search_view.query_editor.is_focused(cx),
2651 .await;2602// "On new search in directory, focus should be moved into query editor"
2652 let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;2603// );
2653 let window = cx.add_window(|cx| Workspace::test_new(project, cx));2604// search_view.excluded_files_editor.update(cx, |editor, cx| {
2654 let workspace = window.root(cx);2605// assert!(
2655 workspace.update(cx, |workspace, cx| {2606// editor.display_text(cx).is_empty(),
2656 ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)2607// "New search in directory should not have any excluded files"
2657 });2608// );
2609// });
2610// search_view.included_files_editor.update(cx, |editor, cx| {
2611// assert_eq!(
2612// editor.display_text(cx),
2613// a_dir_entry.path.to_str().unwrap(),
2614// "New search in directory should have included dir entry path"
2615// );
2616// });
2617// });
2658 2618
2659 let search_view = cx.read(|cx| {2619// search_view.update(cx, |search_view, cx| {
2660 workspace2620// search_view
2661 .read(cx)2621// .query_editor
2662 .active_pane()2622// .update(cx, |query_editor, cx| query_editor.set_text("const", cx));
2663 .read(cx)2623// search_view.search(cx);
2664 .active_item()2624// });
2665 .and_then(|item| item.downcast::<ProjectSearchView>())2625// deterministic.run_until_parked();
2666 .expect("Search view expected to appear after new search event trigger")2626// search_view.update(cx, |search_view, cx| {
2667 });2627// assert_eq!(
2628// search_view
2629// .results_editor
2630// .update(cx, |editor, cx| editor.display_text(cx)),
2631// "\n\nconst ONE: usize = 1;\n\n\nconst TWO: usize = one::ONE + one::ONE;",
2632// "New search in directory should have a filter that matches a certain directory"
2633// );
2634// });
2635// }
2668 2636
2669 let search_bar = window.add_view(cx, |cx| {2637// #[gpui::test]
2670 let mut search_bar = ProjectSearchBar::new();2638// async fn test_search_query_history(cx: &mut TestAppContext) {
2671 search_bar.set_active_pane_item(Some(&search_view), cx);2639// init_test(cx);
2672 // search_bar.show(cx);2640
2673 search_bar2641// let fs = FakeFs::new(cx.background_executor());
2674 });2642// fs.insert_tree(
2643// "/dir",
2644// json!({
2645// "one.rs": "const ONE: usize = 1;",
2646// "two.rs": "const TWO: usize = one::ONE + one::ONE;",
2647// "three.rs": "const THREE: usize = one::ONE + two::TWO;",
2648// "four.rs": "const FOUR: usize = one::ONE + three::THREE;",
2649// }),
2650// )
2651// .await;
2652// let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
2653// let window = cx.add_window(|cx| Workspace::test_new(project, cx));
2654// let workspace = window.root(cx);
2655// workspace.update(cx, |workspace, cx| {
2656// ProjectSearchView::deploy(workspace, &workspace::NewSearch, cx)
2657// });
2675 2658
2676 // Add 3 search items into the history + another unsubmitted one.2659// let search_view = cx.read(|cx| {
2677 search_view.update(cx, |search_view, cx| {2660// workspace
2678 search_view.search_options = SearchOptions::CASE_SENSITIVE;2661// .read(cx)
2679 search_view2662// .active_pane()
2680 .query_editor2663// .read(cx)
2681 .update(cx, |query_editor, cx| query_editor.set_text("ONE", cx));2664// .active_item()
2682 search_view.search(cx);2665// .and_then(|item| item.downcast::<ProjectSearchView>())
2683 });2666// .expect("Search view expected to appear after new search event trigger")
2684 cx.foreground().run_until_parked();2667// });
2685 search_view.update(cx, |search_view, cx| {
2686 search_view
2687 .query_editor
2688 .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));
2689 search_view.search(cx);
2690 });
2691 cx.foreground().run_until_parked();
2692 search_view.update(cx, |search_view, cx| {
2693 search_view
2694 .query_editor
2695 .update(cx, |query_editor, cx| query_editor.set_text("THREE", cx));
2696 search_view.search(cx);
2697 });
2698 cx.foreground().run_until_parked();
2699 search_view.update(cx, |search_view, cx| {
2700 search_view.query_editor.update(cx, |query_editor, cx| {
2701 query_editor.set_text("JUST_TEXT_INPUT", cx)
2702 });
2703 });
2704 cx.foreground().run_until_parked();
2705 2668
2706 // Ensure that the latest input with search settings is active.2669// let search_bar = window.add_view(cx, |cx| {
2707 search_view.update(cx, |search_view, cx| {2670// let mut search_bar = ProjectSearchBar::new();
2708 assert_eq!(2671// search_bar.set_active_pane_item(Some(&search_view), cx);
2709 search_view.query_editor.read(cx).text(cx),2672// // search_bar.show(cx);
2710 "JUST_TEXT_INPUT"2673// search_bar
2711 );2674// });
2712 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2713 });
2714 2675
2715 // Next history query after the latest should set the query to the empty string.2676// // Add 3 search items into the history + another unsubmitted one.
2716 search_bar.update(cx, |search_bar, cx| {2677// search_view.update(cx, |search_view, cx| {
2717 search_bar.next_history_query(&NextHistoryQuery, cx);2678// search_view.search_options = SearchOptions::CASE_SENSITIVE;
2718 });2679// search_view
2719 search_view.update(cx, |search_view, cx| {2680// .query_editor
2720 assert_eq!(search_view.query_editor.read(cx).text(cx), "");2681// .update(cx, |query_editor, cx| query_editor.set_text("ONE", cx));
2721 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2682// search_view.search(cx);
2722 });2683// });
2723 search_bar.update(cx, |search_bar, cx| {2684// cx.foreground().run_until_parked();
2724 search_bar.next_history_query(&NextHistoryQuery, cx);2685// search_view.update(cx, |search_view, cx| {
2725 });2686// search_view
2726 search_view.update(cx, |search_view, cx| {2687// .query_editor
2727 assert_eq!(search_view.query_editor.read(cx).text(cx), "");2688// .update(cx, |query_editor, cx| query_editor.set_text("TWO", cx));
2728 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2689// search_view.search(cx);
2729 });2690// });
2691// cx.foreground().run_until_parked();
2692// search_view.update(cx, |search_view, cx| {
2693// search_view
2694// .query_editor
2695// .update(cx, |query_editor, cx| query_editor.set_text("THREE", cx));
2696// search_view.search(cx);
2697// });
2698// cx.foreground().run_until_parked();
2699// search_view.update(cx, |search_view, cx| {
2700// search_view.query_editor.update(cx, |query_editor, cx| {
2701// query_editor.set_text("JUST_TEXT_INPUT", cx)
2702// });
2703// });
2704// cx.foreground().run_until_parked();
2730 2705
2731 // First previous query for empty current query should set the query to the latest submitted one.2706// // Ensure that the latest input with search settings is active.
2732 search_bar.update(cx, |search_bar, cx| {2707// search_view.update(cx, |search_view, cx| {
2733 search_bar.previous_history_query(&PreviousHistoryQuery, cx);2708// assert_eq!(
2734 });2709// search_view.query_editor.read(cx).text(cx),
2735 search_view.update(cx, |search_view, cx| {2710// "JUST_TEXT_INPUT"
2736 assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");2711// );
2737 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2712// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2738 });2713// });
2739 2714
2740 // Further previous items should go over the history in reverse order.2715// // Next history query after the latest should set the query to the empty string.
2741 search_bar.update(cx, |search_bar, cx| {2716// search_bar.update(cx, |search_bar, cx| {
2742 search_bar.previous_history_query(&PreviousHistoryQuery, cx);2717// search_bar.next_history_query(&NextHistoryQuery, cx);
2743 });2718// });
2744 search_view.update(cx, |search_view, cx| {2719// search_view.update(cx, |search_view, cx| {
2745 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");2720// assert_eq!(search_view.query_editor.read(cx).text(cx), "");
2746 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2721// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2747 });2722// });
2723// search_bar.update(cx, |search_bar, cx| {
2724// search_bar.next_history_query(&NextHistoryQuery, cx);
2725// });
2726// search_view.update(cx, |search_view, cx| {
2727// assert_eq!(search_view.query_editor.read(cx).text(cx), "");
2728// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2729// });
2748 2730
2749 // Previous items should never go behind the first history item.2731// // First previous query for empty current query should set the query to the latest submitted one.
2750 search_bar.update(cx, |search_bar, cx| {2732// search_bar.update(cx, |search_bar, cx| {
2751 search_bar.previous_history_query(&PreviousHistoryQuery, cx);2733// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2752 });2734// });
2753 search_view.update(cx, |search_view, cx| {2735// search_view.update(cx, |search_view, cx| {
2754 assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE");2736// assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");
2755 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2737// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2756 });2738// });
2757 search_bar.update(cx, |search_bar, cx| {
2758 search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2759 });
2760 search_view.update(cx, |search_view, cx| {
2761 assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE");
2762 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2763 });
2764 2739
2765 // Next items should go over the history in the original order.2740// // Further previous items should go over the history in reverse order.
2766 search_bar.update(cx, |search_bar, cx| {2741// search_bar.update(cx, |search_bar, cx| {
2767 search_bar.next_history_query(&NextHistoryQuery, cx);2742// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2768 });2743// });
2769 search_view.update(cx, |search_view, cx| {2744// search_view.update(cx, |search_view, cx| {
2770 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");2745// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");
2771 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2746// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2772 });2747// });
2773 2748
2774 search_view.update(cx, |search_view, cx| {2749// // Previous items should never go behind the first history item.
2775 search_view2750// search_bar.update(cx, |search_bar, cx| {
2776 .query_editor2751// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2777 .update(cx, |query_editor, cx| query_editor.set_text("TWO_NEW", cx));2752// });
2778 search_view.search(cx);2753// search_view.update(cx, |search_view, cx| {
2779 });2754// assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE");
2780 cx.foreground().run_until_parked();2755// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2781 search_view.update(cx, |search_view, cx| {2756// });
2782 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW");2757// search_bar.update(cx, |search_bar, cx| {
2783 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2758// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2784 });2759// });
2760// search_view.update(cx, |search_view, cx| {
2761// assert_eq!(search_view.query_editor.read(cx).text(cx), "ONE");
2762// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2763// });
2785 2764
2786 // New search input should add another entry to history and move the selection to the end of the history.2765// // Next items should go over the history in the original order.
2787 search_bar.update(cx, |search_bar, cx| {2766// search_bar.update(cx, |search_bar, cx| {
2788 search_bar.previous_history_query(&PreviousHistoryQuery, cx);2767// search_bar.next_history_query(&NextHistoryQuery, cx);
2789 });2768// });
2790 search_view.update(cx, |search_view, cx| {2769// search_view.update(cx, |search_view, cx| {
2791 assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");2770// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");
2792 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);2771// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2793 });2772// });
2794 search_bar.update(cx, |search_bar, cx| {
2795 search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2796 });
2797 search_view.update(cx, |search_view, cx| {
2798 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");
2799 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2800 });
2801 search_bar.update(cx, |search_bar, cx| {
2802 search_bar.next_history_query(&NextHistoryQuery, cx);
2803 });
2804 search_view.update(cx, |search_view, cx| {
2805 assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");
2806 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2807 });
2808 search_bar.update(cx, |search_bar, cx| {
2809 search_bar.next_history_query(&NextHistoryQuery, cx);
2810 });
2811 search_view.update(cx, |search_view, cx| {
2812 assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW");
2813 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2814 });
2815 search_bar.update(cx, |search_bar, cx| {
2816 search_bar.next_history_query(&NextHistoryQuery, cx);
2817 });
2818 search_view.update(cx, |search_view, cx| {
2819 assert_eq!(search_view.query_editor.read(cx).text(cx), "");
2820 assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2821 });
2822 }
2823 2773
2824 pub fn init_test(cx: &mut TestAppContext) {2774// search_view.update(cx, |search_view, cx| {
2825 cx.foreground().forbid_parking();2775// search_view
2826 let fonts = cx.font_cache();2776// .query_editor
2827 let mut theme = gpui::fonts::with_font_cache(fonts.clone(), theme::Theme::default);2777// .update(cx, |query_editor, cx| query_editor.set_text("TWO_NEW", cx));
2828 theme.search.match_background = Color::red();2778// search_view.search(cx);
2779// });
2780// cx.foreground().run_until_parked();
2781// search_view.update(cx, |search_view, cx| {
2782// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW");
2783// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2784// });
2829 2785
2830 cx.update(|cx| {2786// // New search input should add another entry to history and move the selection to the end of the history.
2831 cx.set_global(SettingsStore::test(cx));2787// search_bar.update(cx, |search_bar, cx| {
2832 cx.set_global(ActiveSearches::default());2788// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2833 settings::register::<SemanticIndexSettings>(cx);2789// });
2790// search_view.update(cx, |search_view, cx| {
2791// assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");
2792// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2793// });
2794// search_bar.update(cx, |search_bar, cx| {
2795// search_bar.previous_history_query(&PreviousHistoryQuery, cx);
2796// });
2797// search_view.update(cx, |search_view, cx| {
2798// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO");
2799// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2800// });
2801// search_bar.update(cx, |search_bar, cx| {
2802// search_bar.next_history_query(&NextHistoryQuery, cx);
2803// });
2804// search_view.update(cx, |search_view, cx| {
2805// assert_eq!(search_view.query_editor.read(cx).text(cx), "THREE");
2806// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2807// });
2808// search_bar.update(cx, |search_bar, cx| {
2809// search_bar.next_history_query(&NextHistoryQuery, cx);
2810// });
2811// search_view.update(cx, |search_view, cx| {
2812// assert_eq!(search_view.query_editor.read(cx).text(cx), "TWO_NEW");
2813// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2814// });
2815// search_bar.update(cx, |search_bar, cx| {
2816// search_bar.next_history_query(&NextHistoryQuery, cx);
2817// });
2818// search_view.update(cx, |search_view, cx| {
2819// assert_eq!(search_view.query_editor.read(cx).text(cx), "");
2820// assert_eq!(search_view.search_options, SearchOptions::CASE_SENSITIVE);
2821// });
2822// }
2834 2823
2835 theme::init((), cx);2824// pub fn init_test(cx: &mut TestAppContext) {
2836 cx.update_global::<SettingsStore, _, _>(|store, _| {2825// cx.foreground().forbid_parking();
2837 let mut settings = store.get::<ThemeSettings>(None).clone();2826// let fonts = cx.font_cache();
2838 settings.theme = Arc::new(theme);2827// let mut theme = gpui::fonts::with_font_cache(fonts.clone(), theme::Theme::default);
2839 store.override_global(settings)2828// theme.search.match_background = Color::red();
2840 });2829
2830// cx.update(|cx| {
2831// cx.set_global(SettingsStore::test(cx));
2832// cx.set_global(ActiveSearches::default());
2833// settings::register::<SemanticIndexSettings>(cx);
2834
2835// theme::init((), cx);
2836// cx.update_global::<SettingsStore, _, _>(|store, _| {
2837// let mut settings = store.get::<ThemeSettings>(None).clone();
2838// settings.theme = Arc::new(theme);
2839// store.override_global(settings)
2840// });
2841 2841
2842 language::init(cx);2842// language::init(cx);
2843 client::init_settings(cx);2843// client::init_settings(cx);
2844 editor::init(cx);2844// editor::init(cx);
2845 workspace::init_settings(cx);2845// workspace::init_settings(cx);
2846 Project::init_settings(cx);2846// Project::init_settings(cx);
2847 super::init(cx);2847// super::init(cx);
2848 });2848// });
2849 }2849// }
2850}2850// }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t