@@ -6096,4 +6096,83 @@ mod property_test {
60966096
60976097 Ok ( ( ) )
60986098 }
6099+
6100+ #[ gpui:: property_test( config = ProptestConfig {
6101+ cases: 50 ,
6102+ ..Default :: default ( )
6103+ } ) ]
6104+ async fn _test_sidebar_invariants (
6105+ #[ strategy = gpui:: proptest:: collection:: vec ( 0u32 ..DISTRIBUTION_SLOTS * 10 , 1 ..5 ) ]
6106+ raw_operations : Vec < u32 > ,
6107+ cx : & mut TestAppContext ,
6108+ ) {
6109+ if true {
6110+ return ;
6111+ }
6112+ agent_ui:: test_support:: init_test ( cx) ;
6113+ cx. update ( |cx| {
6114+ ThreadStore :: init_global ( cx) ;
6115+ ThreadMetadataStore :: init_global ( cx) ;
6116+ language_model:: LanguageModelRegistry :: test ( cx) ;
6117+ prompt_store:: init ( cx) ;
6118+
6119+ // Auto-add an AgentPanel to every workspace so that implicitly
6120+ // created workspaces (e.g. from thread activation) also have one.
6121+ cx. observe_new (
6122+ |workspace : & mut Workspace ,
6123+ window : Option < & mut Window > ,
6124+ cx : & mut gpui:: Context < Workspace > | {
6125+ if let Some ( window) = window {
6126+ let panel = cx. new ( |cx| AgentPanel :: test_new ( workspace, window, cx) ) ;
6127+ workspace. add_panel ( panel, window, cx) ;
6128+ }
6129+ } ,
6130+ )
6131+ . detach ( ) ;
6132+ } ) ;
6133+
6134+ let fs = FakeFs :: new ( cx. executor ( ) ) ;
6135+ fs. insert_tree (
6136+ "/my-project" ,
6137+ serde_json:: json!( {
6138+ ".git" : { } ,
6139+ "src" : { } ,
6140+ } ) ,
6141+ )
6142+ . await ;
6143+ cx. update ( |cx| <dyn fs:: Fs >:: set_global ( fs. clone ( ) , cx) ) ;
6144+ let project =
6145+ project:: Project :: test ( fs. clone ( ) as Arc < dyn fs:: Fs > , [ "/my-project" . as_ref ( ) ] , cx)
6146+ . await ;
6147+ project. update ( cx, |p, cx| p. git_scans_complete ( cx) ) . await ;
6148+
6149+ let ( multi_workspace, cx) =
6150+ cx. add_window_view ( |window, cx| MultiWorkspace :: test_new ( project. clone ( ) , window, cx) ) ;
6151+ let sidebar = setup_sidebar ( & multi_workspace, cx) ;
6152+
6153+ let mut state = TestState :: new ( fs) ;
6154+ let mut executed: Vec < String > = Vec :: new ( ) ;
6155+
6156+ for & raw_op in & raw_operations {
6157+ let project_group_count =
6158+ multi_workspace. read_with ( cx, |mw, _| mw. project_group_keys ( ) . count ( ) ) ;
6159+ let operation = state. generate_operation ( raw_op, project_group_count) ;
6160+ executed. push ( format ! ( "{:?}" , operation) ) ;
6161+ perform_operation ( operation, & mut state, & multi_workspace, & sidebar, cx) . await ;
6162+ cx. run_until_parked ( ) ;
6163+
6164+ update_sidebar ( & sidebar, cx) ;
6165+ cx. run_until_parked ( ) ;
6166+
6167+ let result =
6168+ sidebar. read_with ( cx, |sidebar, cx| validate_sidebar_properties ( sidebar, cx) ) ;
6169+ if let Err ( err) = result {
6170+ let log = executed. join ( "\n " ) ;
6171+ panic ! (
6172+ "Property violation after step {}:\n {err}\n \n Operations:\n {log}" ,
6173+ executed. len( ) ,
6174+ ) ;
6175+ }
6176+ }
6177+ }
60996178}
0 commit comments