@@ -293,30 +293,28 @@ public void MoveMenuItemRight_CannotMoveElementZero( )
293293 Assert . That ( impossibleMoveRightOpSucceeded , Is . False ) ;
294294
295295 // can move element 1
296- // This is a destructive action, so references will change.
297296 MoveMenuItemRightOperation validMoveRightOp = new ( App , fileMenu . GetMenuItems ( out _ ) [ 1 ] ) ;
298297 Assert . That ( validMoveRightOp . IsImpossible , Is . False ) ;
299298 bool validMoveRightOpSucceeded = false ;
300299 Assert . That ( ( ) => validMoveRightOpSucceeded = validMoveRightOp . Do ( ) , Throws . Nothing ) ;
301300 Assert . That ( validMoveRightOpSucceeded ) ;
302301
303- // We will have changed from a MenuItem to a MenuBarItem
304- // so element 0 will not be us. In Terminal.Gui there is
305- // a different class for a menu item and one with submenus.
306- Assert . That ( fileMenu . GetMenuItems ( out _ ) [ 0 ] , Is . Not . Null . And . InstanceOf < MenuBarItem > ( ) ) ;
307- MenuBarItem miConvertedToMenuBarItem = ( MenuBarItem ) fileMenu . GetMenuItems ( out _ ) [ 0 ] ;
302+ // In Terminal.Gui v2, nested items with sub-menus remain plain MenuItem instances
303+ // (with SubMenu set) rather than being converted to MenuBarItem. MenuBarItem is
304+ // exclusively for top-level MenuBar entries. The same object reference (mi) is
305+ // retained at index 0 — it is not replaced with a new object.
306+ Assert . That ( fileMenu . GetMenuItems ( out _ ) , Has . Exactly ( 1 ) . InstanceOf < MenuItem > ( ) ) ;
307+ MenuItem miWithSubMenu = fileMenu . GetMenuItems ( out _ ) [ 0 ] ;
308308
309- // Check that the references are unequal but values are equal
310309 Assert . Multiple ( ( ) =>
311310 {
312- Assert . That ( miConvertedToMenuBarItem , Is . Not . SameAs ( mi ) ) ;
313- Assert . That ( miConvertedToMenuBarItem . Title , Is . EqualTo ( mi . Title ) ) ;
314- Assert . That ( miConvertedToMenuBarItem . Data , Is . EqualTo ( mi . Data ) ) ;
315- Assert . That ( miConvertedToMenuBarItem . GetMenuItems ( out _ ) , Has . Exactly ( 1 ) . InstanceOf < MenuItem > ( ) ) ;
311+ Assert . That ( miWithSubMenu , Is . SameAs ( mi ) ) ;
312+ Assert . That ( miWithSubMenu . Title , Is . EqualTo ( mi . Title ) ) ;
313+ Assert . That ( miWithSubMenu . Data , Is . EqualTo ( mi . Data ) ) ;
314+ Assert . That ( miWithSubMenu . GetMenuItems ( out _ ) , Has . Exactly ( 1 ) . InstanceOf < MenuItem > ( ) ) ;
316315 } ) ;
317316
318317 // Now undo it.
319- // This is destructive as well.
320318 Assert . That ( validMoveRightOp . Undo , Throws . Nothing ) ;
321319
322320 Assert . That ( fileMenu . GetMenuItems ( out _ ) , Has . Exactly ( 2 ) . InstanceOf < MenuItem > ( ) ) ;
@@ -326,23 +324,16 @@ public void MoveMenuItemRight_CannotMoveElementZero( )
326324 Assert . That ( fileMenu . GetMenuItems ( out _ ) [ 1 ] , Is . Not . Null . And . InstanceOf < MenuItem > ( ) ) ;
327325 } ) ;
328326 MenuItem firstChildAfterUndo = fileMenu . GetMenuItems ( out _ ) [ 0 ] ;
329- MenuItem secondChildAfterUndo = fileMenu . GetMenuItems ( out _ ) [ 1 ] ;
330327
331328 Assert . Multiple ( ( ) =>
332329 {
333- // All the previous references are gone forever through this process.
334- // So, neither element should be mi.
335- Assert . That ( firstChildAfterUndo , Is . Not . SameAs ( mi ) ) ;
336- Assert . That ( secondChildAfterUndo , Is . Not . SameAs ( mi ) ) ;
337-
338- // Neither element should be miConvertedToMenuBarItem either
339- Assert . That ( firstChildAfterUndo , Is . Not . SameAs ( miConvertedToMenuBarItem ) ) ;
340- Assert . That ( secondChildAfterUndo , Is . Not . SameAs ( miConvertedToMenuBarItem ) ) ;
330+ // The same object reference is retained after undo.
331+ Assert . That ( firstChildAfterUndo , Is . SameAs ( mi ) ) ;
341332
342- // And mi still should not be miConvertedToMenuBarItem
343- Assert . That ( mi , Is . Not . SameAs ( miConvertedToMenuBarItem ) ) ;
333+ // The sub-menu should have been cleared after undo.
334+ Assert . That ( firstChildAfterUndo . GetMenuItems ( out _ ) , Is . Empty ) ;
344335
345- // But the values need to be preserved
336+ // Values need to be preserved.
346337 Assert . That ( firstChildAfterUndo . Title , Is . EqualTo ( mi . Title ) ) ;
347338 Assert . That ( firstChildAfterUndo . Data , Is . EqualTo ( mi . Data ) ) ;
348339 Assert . That ( firstChildAfterUndo . Key , Is . EqualTo ( mi . Key ) ) ;
0 commit comments