2
0
Tig 1 жил өмнө
parent
commit
f328f0c93f

+ 187 - 0
UnitTests/Views/OverlappedTests.cs

@@ -1015,4 +1015,191 @@ public class OverlappedTests
     {
         public Overlapped () { IsOverlappedContainer = true; }
     }
+
+    [Fact]
+    [AutoInitShutdown]
+    public void KeyBindings_Command_With_OverlappedTop ()
+    {
+        Toplevel top = new ();
+        Assert.Null (Application.OverlappedTop);
+        top.IsOverlappedContainer = true;
+        Application.Begin (top);
+        Assert.Equal (Application.Top, Application.OverlappedTop);
+
+        var isRunning = true;
+
+        var win1 = new Window { Id = "win1", Width = Dim.Percent (50), Height = Dim.Fill () };
+        var lblTf1W1 = new Label { Text = "Enter text in TextField on Win1:" };
+        var tf1W1 = new TextField { X = Pos.Right (lblTf1W1) + 1, Width = Dim.Fill (), Text = "Text1 on Win1" };
+        var lblTvW1 = new Label { Y = Pos.Bottom (lblTf1W1) + 1, Text = "Enter text in TextView on Win1:" };
+
+        var tvW1 = new TextView
+        {
+            X = Pos.Left (tf1W1), Width = Dim.Fill (), Height = 2, Text = "First line Win1\nSecond line Win1"
+        };
+        var lblTf2W1 = new Label { Y = Pos.Bottom (lblTvW1) + 1, Text = "Enter text in TextField on Win1:" };
+        var tf2W1 = new TextField { X = Pos.Left (tf1W1), Width = Dim.Fill (), Text = "Text2 on Win1" };
+        win1.Add (lblTf1W1, tf1W1, lblTvW1, tvW1, lblTf2W1, tf2W1);
+
+        var win2 = new Window { Id = "win2", Width = Dim.Percent (50), Height = Dim.Fill () };
+        var lblTf1W2 = new Label { Text = "Enter text in TextField on Win2:" };
+        var tf1W2 = new TextField { X = Pos.Right (lblTf1W2) + 1, Width = Dim.Fill (), Text = "Text1 on Win2" };
+        var lblTvW2 = new Label { Y = Pos.Bottom (lblTf1W2) + 1, Text = "Enter text in TextView on Win2:" };
+
+        var tvW2 = new TextView
+        {
+            X = Pos.Left (tf1W2), Width = Dim.Fill (), Height = 2, Text = "First line Win1\nSecond line Win2"
+        };
+        var lblTf2W2 = new Label { Y = Pos.Bottom (lblTvW2) + 1, Text = "Enter text in TextField on Win2:" };
+        var tf2W2 = new TextField { X = Pos.Left (tf1W2), Width = Dim.Fill (), Text = "Text2 on Win2" };
+        win2.Add (lblTf1W2, tf1W2, lblTvW2, tvW2, lblTf2W2, tf2W2);
+
+        win1.Closing += (s, e) => isRunning = false;
+        Assert.Null (top.Focused);
+        Assert.Equal (top, Application.Current);
+        Assert.True (top.IsCurrentTop);
+        Assert.Equal (top, Application.OverlappedTop);
+        Application.Begin (win1);
+        Assert.Equal (new (0, 0, 40, 25), win1.Frame);
+        Assert.NotEqual (top, Application.Current);
+        Assert.False (top.IsCurrentTop);
+        Assert.Equal (win1, Application.Current);
+        Assert.True (win1.IsCurrentTop);
+        Assert.True (win1.IsOverlapped);
+        Assert.Null (top.Focused);
+        Assert.Null (top.MostFocused);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (win1.IsOverlapped);
+        Assert.Single (Application.OverlappedChildren);
+        Application.Begin (win2);
+        Assert.Equal (new (0, 0, 40, 25), win2.Frame);
+        Assert.NotEqual (top, Application.Current);
+        Assert.False (top.IsCurrentTop);
+        Assert.Equal (win2, Application.Current);
+        Assert.True (win2.IsCurrentTop);
+        Assert.True (win2.IsOverlapped);
+        Assert.Null (top.Focused);
+        Assert.Null (top.MostFocused);
+        Assert.Equal (tf1W2, win2.MostFocused);
+        Assert.Equal (2, Application.OverlappedChildren.Count);
+
+        Application.MoveToOverlappedChild (win1);
+        Assert.Equal (win1, Application.Current);
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        win1.Running = true;
+        Assert.True (Application.OnKeyDown (Application.QuitKey));
+        Assert.False (isRunning);
+        Assert.False (win1.Running);
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+
+        Assert.True (
+                     Application.OnKeyDown (Key.Z.WithCtrl)
+                    );
+
+        Assert.True (Application.OnKeyDown (Key.F5)); // refresh
+
+        Assert.True (Application.OnKeyDown (Key.Tab));
+        Assert.True (win1.IsCurrentTop);
+        Assert.Equal (tvW1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.Tab));
+        Assert.Equal ($"\tFirst line Win1{Environment.NewLine}Second line Win1", tvW1.Text);
+
+        Assert.True (
+                     Application.OnKeyDown (Key.Tab.WithShift)
+                    );
+        Assert.Equal ($"First line Win1{Environment.NewLine}Second line Win1", tvW1.Text);
+
+        Assert.True (
+                     Application.OnKeyDown (Key.Tab.WithCtrl)
+                    );
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf2W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.Tab));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorRight));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorDown));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tvW1, win1.MostFocused);
+#if UNIX_KEY_BINDINGS
+        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.I.WithCtrl)));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf2W1, win1.MostFocused);
+#endif
+        Assert.True (
+                     Application.OverlappedChildren [0]
+                                .NewKeyDownEvent (Key.Tab.WithShift)
+                    );
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tvW1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorLeft));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorUp));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf2W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.Tab));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+
+        Assert.True (
+                     Application.OverlappedChildren [0]
+                                .NewKeyDownEvent (Key.Tab.WithCtrl)
+                    );
+        Assert.Equal (win2, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W2, win2.MostFocused);
+        tf2W2.SetFocus ();
+        Assert.True (tf2W2.HasFocus);
+
+        Assert.True (
+                     Application.OverlappedChildren [0]
+                                .NewKeyDownEvent (Key.Tab.WithCtrl.WithShift)
+                    );
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Application.AlternateForwardKey));
+        Assert.Equal (win2, Application.OverlappedChildren [0]);
+        Assert.Equal (tf2W2, win2.MostFocused);
+        Assert.True (Application.OnKeyDown (Application.AlternateBackwardKey));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorDown));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tvW1, win1.MostFocused);
+#if UNIX_KEY_BINDINGS
+        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.B.WithCtrl)));
+#else
+        Assert.True (Application.OnKeyDown (Key.CursorLeft));
+#endif
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf1W1, win1.MostFocused);
+        Assert.True (Application.OnKeyDown (Key.CursorDown));
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tvW1, win1.MostFocused);
+        Assert.Equal (Point.Empty, tvW1.CursorPosition);
+
+        Assert.True (
+                     Application.OverlappedChildren [0]
+                                .NewKeyDownEvent (Key.End.WithCtrl)
+                    );
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tvW1, win1.MostFocused);
+        Assert.Equal (new (16, 1), tvW1.CursorPosition);
+#if UNIX_KEY_BINDINGS
+        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.F.WithCtrl)));
+#else
+        Assert.True (Application.OnKeyDown (Key.CursorRight));
+#endif
+        Assert.Equal (win1, Application.OverlappedChildren [0]);
+        Assert.Equal (tf2W1, win1.MostFocused);
+
+#if UNIX_KEY_BINDINGS
+        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.L.WithCtrl)));
+#endif
+        win2.Dispose ();
+        win1.Dispose ();
+        top.Dispose ();
+    }
 }

+ 1 - 188
UnitTests/Views/ToplevelTests.cs

@@ -2,7 +2,7 @@
 
 namespace Terminal.Gui.ViewsTests;
 
-public class ToplevelTests (ITestOutputHelper output)
+public partial class ToplevelTests (ITestOutputHelper output)
 {
     [Fact]
     public void Constructor_Default ()
@@ -556,193 +556,6 @@ public class ToplevelTests (ITestOutputHelper output)
         top.Dispose ();
     }
 
-    [Fact]
-    [AutoInitShutdown]
-    public void KeyBindings_Command_With_OverlappedTop ()
-    {
-        Toplevel top = new ();
-        Assert.Null (Application.OverlappedTop);
-        top.IsOverlappedContainer = true;
-        Application.Begin (top);
-        Assert.Equal (Application.Top, Application.OverlappedTop);
-
-        var isRunning = true;
-
-        var win1 = new Window { Id = "win1", Width = Dim.Percent (50), Height = Dim.Fill () };
-        var lblTf1W1 = new Label { Text = "Enter text in TextField on Win1:" };
-        var tf1W1 = new TextField { X = Pos.Right (lblTf1W1) + 1, Width = Dim.Fill (), Text = "Text1 on Win1" };
-        var lblTvW1 = new Label { Y = Pos.Bottom (lblTf1W1) + 1, Text = "Enter text in TextView on Win1:" };
-
-        var tvW1 = new TextView
-        {
-            X = Pos.Left (tf1W1), Width = Dim.Fill (), Height = 2, Text = "First line Win1\nSecond line Win1"
-        };
-        var lblTf2W1 = new Label { Y = Pos.Bottom (lblTvW1) + 1, Text = "Enter text in TextField on Win1:" };
-        var tf2W1 = new TextField { X = Pos.Left (tf1W1), Width = Dim.Fill (), Text = "Text2 on Win1" };
-        win1.Add (lblTf1W1, tf1W1, lblTvW1, tvW1, lblTf2W1, tf2W1);
-
-        var win2 = new Window { Id = "win2", Width = Dim.Percent (50), Height = Dim.Fill () };
-        var lblTf1W2 = new Label { Text = "Enter text in TextField on Win2:" };
-        var tf1W2 = new TextField { X = Pos.Right (lblTf1W2) + 1, Width = Dim.Fill (), Text = "Text1 on Win2" };
-        var lblTvW2 = new Label { Y = Pos.Bottom (lblTf1W2) + 1, Text = "Enter text in TextView on Win2:" };
-
-        var tvW2 = new TextView
-        {
-            X = Pos.Left (tf1W2), Width = Dim.Fill (), Height = 2, Text = "First line Win1\nSecond line Win2"
-        };
-        var lblTf2W2 = new Label { Y = Pos.Bottom (lblTvW2) + 1, Text = "Enter text in TextField on Win2:" };
-        var tf2W2 = new TextField { X = Pos.Left (tf1W2), Width = Dim.Fill (), Text = "Text2 on Win2" };
-        win2.Add (lblTf1W2, tf1W2, lblTvW2, tvW2, lblTf2W2, tf2W2);
-
-        win1.Closing += (s, e) => isRunning = false;
-        Assert.Null (top.Focused);
-        Assert.Equal (top, Application.Current);
-        Assert.True (top.IsCurrentTop);
-        Assert.Equal (top, Application.OverlappedTop);
-        Application.Begin (win1);
-        Assert.Equal (new (0, 0, 40, 25), win1.Frame);
-        Assert.NotEqual (top, Application.Current);
-        Assert.False (top.IsCurrentTop);
-        Assert.Equal (win1, Application.Current);
-        Assert.True (win1.IsCurrentTop);
-        Assert.True (win1.IsOverlapped);
-        Assert.Null (top.Focused);
-        Assert.Null (top.MostFocused);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (win1.IsOverlapped);
-        Assert.Single (Application.OverlappedChildren);
-        Application.Begin (win2);
-        Assert.Equal (new (0, 0, 40, 25), win2.Frame);
-        Assert.NotEqual (top, Application.Current);
-        Assert.False (top.IsCurrentTop);
-        Assert.Equal (win2, Application.Current);
-        Assert.True (win2.IsCurrentTop);
-        Assert.True (win2.IsOverlapped);
-        Assert.Null (top.Focused);
-        Assert.Null (top.MostFocused);
-        Assert.Equal (tf1W2, win2.MostFocused);
-        Assert.Equal (2, Application.OverlappedChildren.Count);
-
-        Application.MoveToOverlappedChild (win1);
-        Assert.Equal (win1, Application.Current);
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        win1.Running = true;
-        Assert.True (Application.OnKeyDown (Application.QuitKey));
-        Assert.False (isRunning);
-        Assert.False (win1.Running);
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-
-        Assert.True (
-                     Application.OnKeyDown (Key.Z.WithCtrl)
-                    );
-
-        Assert.True (Application.OnKeyDown (Key.F5)); // refresh
-
-        Assert.True (Application.OnKeyDown (Key.Tab));
-        Assert.True (win1.IsCurrentTop);
-        Assert.Equal (tvW1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.Tab));
-        Assert.Equal ($"\tFirst line Win1{Environment.NewLine}Second line Win1", tvW1.Text);
-
-        Assert.True (
-                     Application.OnKeyDown (Key.Tab.WithShift)
-                    );
-        Assert.Equal ($"First line Win1{Environment.NewLine}Second line Win1", tvW1.Text);
-
-        Assert.True (
-                     Application.OnKeyDown (Key.Tab.WithCtrl)
-                    );
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf2W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.Tab));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorRight));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorDown));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tvW1, win1.MostFocused);
-#if UNIX_KEY_BINDINGS
-        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.I.WithCtrl)));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf2W1, win1.MostFocused);
-#endif
-        Assert.True (
-                     Application.OverlappedChildren [0]
-                                .NewKeyDownEvent (Key.Tab.WithShift)
-                    );
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tvW1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorLeft));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorUp));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf2W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.Tab));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-
-        Assert.True (
-                     Application.OverlappedChildren [0]
-                                .NewKeyDownEvent (Key.Tab.WithCtrl)
-                    );
-        Assert.Equal (win2, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W2, win2.MostFocused);
-        tf2W2.SetFocus ();
-        Assert.True (tf2W2.HasFocus);
-
-        Assert.True (
-                     Application.OverlappedChildren [0]
-                                .NewKeyDownEvent (Key.Tab.WithCtrl.WithShift)
-                    );
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Application.AlternateForwardKey));
-        Assert.Equal (win2, Application.OverlappedChildren [0]);
-        Assert.Equal (tf2W2, win2.MostFocused);
-        Assert.True (Application.OnKeyDown (Application.AlternateBackwardKey));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorDown));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tvW1, win1.MostFocused);
-#if UNIX_KEY_BINDINGS
-        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.B.WithCtrl)));
-#else
-        Assert.True (Application.OnKeyDown (Key.CursorLeft));
-#endif
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf1W1, win1.MostFocused);
-        Assert.True (Application.OnKeyDown (Key.CursorDown));
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tvW1, win1.MostFocused);
-        Assert.Equal (Point.Empty, tvW1.CursorPosition);
-
-        Assert.True (
-                     Application.OverlappedChildren [0]
-                                .NewKeyDownEvent (Key.End.WithCtrl)
-                    );
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tvW1, win1.MostFocused);
-        Assert.Equal (new (16, 1), tvW1.CursorPosition);
-#if UNIX_KEY_BINDINGS
-        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.F.WithCtrl)));
-#else
-        Assert.True (Application.OnKeyDown (Key.CursorRight));
-#endif
-        Assert.Equal (win1, Application.OverlappedChildren [0]);
-        Assert.Equal (tf2W1, win1.MostFocused);
-
-#if UNIX_KEY_BINDINGS
-        Assert.True (Application.OverlappedChildren [0].ProcessKeyDown (new (Key.L.WithCtrl)));
-#endif
-        win2.Dispose ();
-        win1.Dispose ();
-        top.Dispose ();
-    }
-
     [Fact]
     public void Added_Event_Should_Not_Be_Used_To_Initialize_Toplevel_Events ()
     {