public void TestDragDrop() { Trace.WriteLine("TestDragDrop=========================================================="); var w = this.LaunchNotepad(); Rectangle treeBounds = this.TreeView.Bounds; Trace.WriteLine("OpenFileDialog"); w.InvokeAsyncMenuItem("openToolStripMenuItem"); Window openDialog = w.WaitForPopup(); Trace.WriteLine("Opening '" + TestDir + "UnitTests'"); openDialog.SendKeystrokes(TestDir + "UnitTests{ENTER}"); Sleep(1000); // Drag/drop from open file dialog into xml notepad client area. OpenFileDialog dialogWrapper = new OpenFileDialog(openDialog); Point drop = GetDropSpot(openDialog, treeBounds); Trace.WriteLine("Drop spot = " + drop.ToString()); AutomationWrapper item = dialogWrapper.GetFileItem("test1.xml"); if (item == null) { // try finding the item using the keyboard. throw new Exception("File item not found"); } Rectangle ibounds = item.Bounds; Point iloc = new Point(ibounds.Left + 10, ibounds.Top + 10); Trace.WriteLine("Dragging from " + iloc.ToString()); Mouse.MouseDragDrop(iloc, drop, 5, MouseButtons.Left); Sleep(1000); dialogWrapper.DismissPopUp("{ESC}"); // need bigger window to test drag/drop w.SetWindowSize(800, 600); w.InvokeMenuItem("collapseAllToolStripMenuItem"); w.InvokeMenuItem("expandAllToolStripMenuItem"); // Test mouse wheel AutomationWrapper tree = this.TreeView; CheckProperties(tree); w.SendKeystrokes("{HOME}"); Cursor.Position = tree.Bounds.Center(); Sleep(500); // wait for focus to kick in before sending mouse events. Mouse.MouseWheel(-120 * 15); // first one doesn't get thru for some reason! Sleep(500); Mouse.MouseWheel(120 * 15); Sleep(500); // Test navigation keys w.SendKeystrokes("{HOME}"); CheckNodeValue("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); w.SendKeystrokes("{END}"); CheckNodeValue("<!--last comment-->"); w.SendKeystrokes("{PGUP}{PGDN}{UP}{UP}"); CheckNodeValue("Name"); // Get AutomationWrapper to selected node in the tree. AutomationWrapper ntv = this.NodeTextView; CheckProperties(ntv); // mouse down in node text view AutomationWrapper node = ntv.GetSelectedChild(); node = node.Parent.NextSibling; // Office node. CheckNodeName(node, "Office"); Rectangle bounds = node.Bounds; Mouse.MouseClick(bounds.Center(), MouseButtons.Left); // test edit of node value using AccessibilityObject string office = "35/1682"; node.Value = office; // for some odd reason the paste expands the element. Sleep(300); CheckNodeValue(office); // confirm via copy operation node = tree.GetSelectedChild(); if (node == null) { throw new ApplicationException("Selected node not found"); } CheckProperties(node); CheckNodeName(node, "Office"); node.AddToSelection(); // test edit of node name using accessibility. this.SetNodeName(node, "MyOffice"); CheckNodeValue("MyOffice"); // confirm via copy operation // Test that "right arrow" moves over to the nodeTextView. w.SendKeystrokes("{RIGHT}{DOWN}{RIGHT}"); CheckNodeValue("35/1682"); // confirm via copy operation Undo(); // make sure we can undo node name change! Undo(); // make sure we can undo node value change (while #text is expanded)! this.TreeView.SetFocus(); CheckNodeValue("Office"); Trace.WriteLine("Select the 'Country' node."); bounds = node.Bounds; Trace.WriteLine(bounds.ToString()); int itemHeight = bounds.Height; Point pt = bounds.Center(); pt.Y -= (itemHeight * 2); // Test mouse down in tree view; Mouse.MouseClick(pt, MouseButtons.Left); Sleep(200); node = tree.GetSelectedChild(); CheckNodeName(node, "Country"); Trace.WriteLine("Drag/drop country up 3 items"); Sleep(1000); // avoid double click by delaying next click Point endPt = new Point(pt.X, pt.Y - (int)(3 * itemHeight) - (itemHeight/2)); // Drag the node up three slots. Mouse.MouseDragDrop(pt, endPt, 5, MouseButtons.Left); Sleep(200); node = tree.GetSelectedChild(); CheckNodeName(node, "Country"); // Drag/drop to auto scroll, then leave the window and drop it on desktop Rectangle formBounds = w.GetScreenBounds(); Mouse.MouseDown(endPt, MouseButtons.Left); // Autoscroll Point treeTop = TopCenter(tree.Bounds, 2); Trace.WriteLine("--- Drag to top of tree view ---"); Mouse.MouseDragTo(endPt, treeTop, 5, MouseButtons.Left); Sleep(1000); // autoscroll time. // Drag out of tree view. Point titleBar = TopCenter(formBounds, 20); Trace.WriteLine("--- Drag to titlebar ---"); Mouse.MouseDragTo(treeTop, titleBar, 10, MouseButtons.Left); Sleep(1000); // should now have 'no drop icon'. Mouse.MouseUp(titleBar, MouseButtons.Left); // code coverage on expand/collapse. w.SendKeystrokes("^IOffice"); node.Invoke(); Sleep(500); w.SendKeystrokes("{LEFT}"); Sleep(500); w.SendKeystrokes("{RIGHT}"); Sleep(1000); Trace.WriteLine("Test task list resizers"); AutomationWrapper resizer = w.FindDescendant("TaskResizer"); Trace.WriteLine(resizer.Parent.Name); bounds = resizer.Bounds; Point mid = bounds.Center(); // Drag the resizer up a few pixels. Mouse.MouseDragDrop(mid, new Point(mid.X, mid.Y - 15), 2, MouseButtons.Left); Trace.WriteLine("Test tree view resizer"); resizer = w.FindDescendant("XmlTreeResizer"); Trace.WriteLine(resizer.Parent.Name); bounds = resizer.Bounds; mid = bounds.Center(); // Drag the resizer up a few pixels. Mouse.MouseDragDrop(mid, new Point(mid.X + 15, mid.Y), 2, MouseButtons.Left); this.SaveAndCompare("out.xml", "test4.xml"); }