public IEnumerator UssCopyBufferCannotBePastedInHierarchyPane()
        {
            // Load Test UXML File
            yield return(LoadTestUXMLDocument(k_ChildTestUXMLPath));

            yield return(null);

            var selector = BuilderTestsHelper.GetExplorerItemWithName(styleSheetsPane, ".unity-button");

            yield return(UIETestEvents.Mouse.SimulateClick(selector));

            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Copy));

            Assert.That(BuilderEditorUtility.IsUss(BuilderEditorUtility.systemCopyBuffer));

            var panel = builder.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            yield return(UIETestEvents.Mouse.SimulateClick(hierarchy, MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);

            var pasteMenuItem = menu.FindMenuAction("Paste");

            Assert.AreEqual(DropdownMenuAction.Status.Disabled, pasteMenuItem.status);
        }
        // By default opens in isolation mode
        protected IEnumerator OpenChildTemplateContainerAsSubDocument(BuilderTestContextualMenuManager menu, string nameOfChildSubDocument, bool inPlace = false)
        {
            hierarchy.elementHierarchyView.ExpandAllItems();

            // Open child
            var childInHierarchy = BuilderTestsHelper.GetExplorerItemsWithName(hierarchy, nameOfChildSubDocument);

            Assert.NotZero(childInHierarchy.Count);

            // Simulate right click on child TemplateContainer
            yield return(UIETestEvents.Mouse.SimulateClick(childInHierarchy[0], MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);

            DropdownMenuAction subdocumentClick;

            if (inPlace)
            {
                subdocumentClick = menu.FindMenuAction(BuilderConstants.ExplorerHierarchyPaneOpenSubDocumentInPlace);
            }
            else
            {
                subdocumentClick = menu.FindMenuAction(BuilderConstants.ExplorerHierarchyPaneOpenSubDocument);
            }

            Assert.That(subdocumentClick, Is.Not.Null);
            subdocumentClick.Execute();
        }
        public virtual void Setup()
        {
            if (EditorApplication.isPlaying)
            {
                builder = EditorWindow.GetWindow <Builder>();
            }
            else
            {
                builder = BuilderTestsHelper.MakeNewBuilderWindow();
            }

            selection       = builder.selection;
            canvas          = builder.rootVisualElement.Q <BuilderCanvas>();
            library         = builder.rootVisualElement.Q <BuilderLibrary>();
            hierarchy       = builder.rootVisualElement.Q <BuilderHierarchy>();
            styleSheetsPane = builder.rootVisualElement.Q <BuilderStyleSheets>();
            viewport        = builder.rootVisualElement.Q <BuilderViewport>();
            toolbar         = viewport.Q <BuilderToolbar>();
            inspector       = builder.rootVisualElement.Q <BuilderInspector>();

            if (EditorApplication.isPlaying)
            {
                return;
            }

            BuilderProjectSettings.Reset();
            ForceNewDocument();
            var createSelectorField = styleSheetsPane.Q <TextField>();

            createSelectorField.visualInput.Blur();
            library.SetViewMode(BuilderLibrary.LibraryViewMode.TreeView);
        }
        public IEnumerator DragStylePillOntoTemplateElementInHierarchy()
        {
            yield return(AddTextFieldElement());

            var documentElement = GetFirstDocumentElement();

            yield return(AddSelector(TestSelectorName));

            var createdSelector = GetStyleSelectorNodeWithName(TestSelectorName);

            yield return(UIETestHelpers.Pause(1));

            var hierarchyTreeView = HierarchyPane.Q <TreeView>();

            hierarchyTreeView.ExpandItem(hierarchyTreeView.items.ToList()[1].id);

            var textFieldLabel = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(Label)).Q <Label>();

            yield return(UIETestHelpers.Pause(1));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 createdSelector.Q <Label>().worldBound.center,
                                                                 textFieldLabel.worldBound.center));

            Assert.That(documentElement.classList, Is.Not.Contain(TestSelectorName.TrimStart('.')));
        }
        public IEnumerator CreateSelectorFieldBehaviour()
        {
            var createSelectorField = StyleSheetsPane.Q <TextField>();

            createSelectorField.visualInput.Blur();
            Assert.That(createSelectorField.text, Is.EqualTo(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage));

            createSelectorField.visualInput.Focus();
            Assert.That(createSelectorField.text, Is.EqualTo("."));
            Assert.That(createSelectorField.cursorIndex, Is.EqualTo(1));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(BuilderWindow, TestSelectorName));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(BuilderWindow, KeyCode.Return));

            createSelectorField.visualInput.Blur();

            var newSelector = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName);

            Assert.That(newSelector, Is.Not.Null);

            createSelectorField.visualInput.Focus();
            yield return(UIETestEvents.KeyBoard.SimulateTyping(BuilderWindow, TestSelectorName2));

            var addButton = StyleSheetsPane.Query <Button>().Where(b => b.text.Equals("Add")).First();

            yield return(UIETestEvents.Mouse.SimulateClick(addButton));

            newSelector = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName2);
            Assert.That(newSelector, Is.Not.Null);
        }
        public IEnumerator DisplayNameStyleAndRenameOption()
        {
            const string testItemName = "test_name";

            AddElementCodeOnly();
            var hierarchyItem   = BuilderTestsHelper.GetExplorerItemWithName(hierarchy, nameof(VisualElement));
            var documentElement = BuilderTestsHelper.GetLinkedDocumentElement(hierarchyItem);
            var nameLabel       = hierarchyItem.Q <Label>(className: BuilderConstants.ExplorerItemLabelClassName);

            Assert.That(nameLabel.text, Is.EqualTo(nameof(VisualElement)));
            Assert.That(nameLabel.classList, Contains.Item(BuilderConstants.ElementTypeClassName));

            yield return(UIETestEvents.Mouse.SimulateDoubleClick(hierarchyItem));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, testItemName));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(builder, KeyCode.Return));

            Assert.That(documentElement.name, Is.EqualTo(testItemName));

            hierarchyItem = BuilderTestsHelper.GetExplorerItemWithName(hierarchy, BuilderConstants.UssSelectorNameSymbol + testItemName);
            nameLabel     = hierarchyItem.Q <Label>(className: BuilderConstants.ExplorerItemLabelClassName);
            Assert.That(nameLabel.classList, Contains.Item(BuilderConstants.ElementNameClassName));

            hierarchyItem = GetFirstExplorerItem();
            yield return(UIETestEvents.Mouse.SimulateDoubleClick(hierarchyItem));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, "invalid&name"));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(builder, KeyCode.Return));

            Assert.That(documentElement.name, Is.EqualTo(testItemName));
        }
        public IEnumerator DraggingChildElementsOfATemplateShouldNotWork()
        {
            AddElementCodeOnly <TextField>();
            AddElementCodeOnly();

            var hierarchyItem = BuilderTestsHelper.GetExplorerItemWithName(hierarchy, nameof(TextField));

            yield return(UIETestHelpers.ExpandTreeViewItem(hierarchyItem));

            yield return(UIETestHelpers.Pause());

            var textField              = viewport.documentRootElement[0];
            var textFieldLabel         = textField.Q <Label>();
            var visualElement          = viewport.documentRootElement[1];
            var textFieldLabelExplorer = BuilderTestsHelper.GetLinkedExplorerItem(textFieldLabel);
            var visualElementExplorer  = BuilderTestsHelper.GetLinkedExplorerItem(visualElement);

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(builder,
                                                                 visualElementExplorer.worldBound.center,
                                                                 textFieldLabelExplorer.worldBound.center));

            Assert.That(visualElement.parent, Is.EqualTo(viewport.documentRootElement));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(builder,
                                                                 textFieldLabelExplorer.worldBound.center,
                                                                 visualElementExplorer.worldBound.center));

            Assert.That(textFieldLabel.parent, Is.EqualTo(textField));
        }
        public IEnumerator OutsideClickWillCommitRename()
        {
            const string testItemName = "test_name";

            yield return(AddVisualElement());

            var hierarchyItem   = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(VisualElement));
            var documentElement = BuilderTestsHelper.GetLinkedDocumentElement(hierarchyItem);
            var nameLabel       = hierarchyItem.Q <Label>(className: BuilderConstants.ExplorerItemLabelClassName);

            Assert.That(nameLabel.text, Is.EqualTo(nameof(VisualElement)));
            Assert.That(nameLabel.classList, Contains.Item(BuilderConstants.ElementTypeClassName));

            yield return(UIETestEvents.Mouse.SimulateDoubleClick(hierarchyItem));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(BuilderWindow, testItemName));

            yield return(UIETestEvents.Mouse.SimulateClick(ViewportPane));

            Assert.That(documentElement.name, Is.EqualTo(testItemName));

            hierarchyItem = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, BuilderConstants.UssSelectorNameSymbol + testItemName);
            nameLabel     = hierarchyItem.Q <Label>(className: BuilderConstants.ExplorerItemLabelClassName);
            Assert.That(nameLabel.classList, Contains.Item(BuilderConstants.ElementNameClassName));
        }
        public IEnumerator ReparentFlowWhenDraggingOntoCSharpTypeElement()
        {
            yield return(AddTextFieldElement());

            yield return(AddVisualElement());

            var textFieldItem        = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(TextField));
            var visualElementItem    = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(VisualElement));
            var visualElementDocItem = BuilderTestsHelper.GetLinkedDocumentElement(visualElementItem);

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 visualElementItem.worldBound.center,
                                                                 textFieldItem.worldBound.center));

            Assert.That(visualElementDocItem.parent, Is.InstanceOf <TextField>());

            ForceNewDocument();
            yield return(AddTextFieldElement());

            yield return(AddVisualElement());

            textFieldItem        = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(TextField));
            visualElementItem    = BuilderTestsHelper.GetExplorerItemWithName(HierarchyPane, nameof(VisualElement));
            visualElementDocItem = BuilderTestsHelper.GetLinkedDocumentElement(visualElementItem);
            var textFieldDocItem = BuilderTestsHelper.GetLinkedDocumentElement(textFieldItem);

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 visualElementItem.worldBound.center,
                                                                 textFieldDocItem.worldBound.center));

            Assert.That(visualElementDocItem.parent, Is.InstanceOf <TextField>());
        }
        public IEnumerator PastingAddsSelectorToActiveStyleSheet()
        {
            yield return(CodeOnlyAddUSSToDocument(k_ColorsTestUSSPath));

            yield return(CodeOnlyAddUSSToDocument(k_LayoutTestUSSPath));

            // Copy Selector.
            var unityButtonSelectors = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, ".unity-button");

            yield return(UIETestEvents.Mouse.SimulateClick(unityButtonSelectors[0]));

            yield return(UIETestEvents.ExecuteCommand(BuilderWindow, UIETestEvents.Command.Copy));

            // Activate the second StyleSheet.
            var layoutExplorerItem = BuilderTestsHelper.GetExplorerItemWithName(StyleSheetsPane, k_LayoutTestUSSFileName);

            Assert.That(layoutExplorerItem, Is.Not.Null);
            var layoutStyleSheet          = GetStyleSheetFromExplorerItem(layoutExplorerItem, k_LayoutTestUSSPath);
            var previousNumberOfSelectors = layoutStyleSheet.complexSelectors.Length;

            BuilderStyleSheetsUtilities.SetActiveUSS(Selection, StyleSheetsPane.paneWindow, layoutStyleSheet);
            Assert.That(BuilderWindow.document.activeStyleSheet, Is.EqualTo(layoutStyleSheet));

            // Paste Selector.
            yield return(UIETestEvents.ExecuteCommand(BuilderWindow, UIETestEvents.Command.Paste));

            Assert.That(layoutStyleSheet.complexSelectors.Length, Is.EqualTo(previousNumberOfSelectors + 2)); // 2 for the extra fake rule added to the stylesheet for the pasted selector. see BuilderSharedStyles.CreateNewSelectorElement
        }
        public IEnumerator NewSelectorWithNoUSSCreatesNewUSS()
        {
            AddElementCodeOnly("TestElement");

            var createSelectorField = StyleSheetsPane.Q <TextField>();

            createSelectorField.visualInput.Blur();
            Assert.That(createSelectorField.text, Is.EqualTo(BuilderConstants.ExplorerInExplorerNewClassSelectorInfoMessage));

            createSelectorField.visualInput.Focus();
            Assert.That(createSelectorField.text, Is.EqualTo("."));
            Assert.That(createSelectorField.cursorIndex, Is.EqualTo(1));

            bool hasSaveDialogBeenOpened = false;

            BuilderStyleSheetsUtilities.s_SaveFileDialogCallback = () =>
            {
                hasSaveDialogBeenOpened = true;
                return(k_TestUSSFilePath);
            };

            yield return(UIETestEvents.KeyBoard.SimulateTyping(BuilderWindow, ".new-selector"));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(BuilderWindow, KeyCode.Return));

            Assert.That(hasSaveDialogBeenOpened, Is.True);

            yield return(UIETestHelpers.Pause(1));

            var unityButtonSelectors = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, ".new-selector");

            Assert.That(unityButtonSelectors.Count, Is.EqualTo(1));
        }
        public IEnumerator RemoveUSSViaRightClickMenu()
        {
            yield return(CodeOnlyAddUSSToDocument(k_ColorsTestUSSPath));

            var panel = BuilderWindow.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            Assert.That(menu, Is.Not.Null);
            Assert.That(menu.menuIsDisplayed, Is.False);

            var newUSSExplorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, k_ColorsTestUSSFileName);

            Assert.That(newUSSExplorerItems.Count, Is.EqualTo(1));

            yield return(UIETestEvents.Mouse.SimulateClick(newUSSExplorerItems[0], MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);
            var removeUSS = menu.FindMenuAction(BuilderConstants.ExplorerStyleSheetsPaneRemoveUSSMenu);

            Assert.That(removeUSS, Is.Not.Null);
            Assert.That(removeUSS.status, Is.EqualTo(DropdownMenuAction.Status.Normal));

            bool checkedForUnsavedChanges = false;

            BuilderStyleSheetsUtilities.s_CheckForUnsavedChanges = BuilderPaneWindow => checkedForUnsavedChanges = true;
            removeUSS.Execute();
            Assert.That(checkedForUnsavedChanges, Is.True);

            yield return(UIETestHelpers.Pause(1));

            newUSSExplorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, k_ColorsTestUSSFileName);
            Assert.That(newUSSExplorerItems.Count, Is.EqualTo(0));
        }
        public IEnumerator AddExistingUSSViaRightClickMenu()
        {
            AddElementCodeOnly("TestElement");

            var panel = BuilderWindow.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            Assert.That(menu, Is.Not.Null);
            Assert.That(menu.menuIsDisplayed, Is.False);

            yield return(UIETestEvents.Mouse.SimulateClick(StyleSheetsPane, MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);
            var existingUSS = menu.FindMenuAction(BuilderConstants.ExplorerStyleSheetsPaneAddExistingUSSMenu);

            Assert.That(existingUSS, Is.Not.Null);

            bool hasOpenDialogBeenOpened = false;

            BuilderStyleSheetsUtilities.s_OpenFileDialogCallback = () =>
            {
                hasOpenDialogBeenOpened = true;
                return(k_ColorsTestUSSPath);
            };

            existingUSS.Execute();
            Assert.That(hasOpenDialogBeenOpened, Is.True);

            yield return(UIETestHelpers.Pause(1));

            var newUSSExplorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, k_ColorsTestUSSFileName);

            Assert.That(newUSSExplorerItems.Count, Is.EqualTo(1));
        }
        public IEnumerator AddExistingUSSViaPlusMenu()
        {
            AddElementCodeOnly("TestElement");

            var addMenu      = StyleSheetsPane.Q <ToolbarMenu>("add-uss-menu");
            var addMenuItems = addMenu.menu.MenuItems();

            Assert.AreEqual(addMenuItems.Count, 2);
            var actionMenuItem = addMenuItems[1] as DropdownMenuAction;

            Assert.AreEqual(actionMenuItem.name, BuilderConstants.ExplorerStyleSheetsPaneAddExistingUSSMenu);

            bool hasOpenDialogBeenOpened = false;

            BuilderStyleSheetsUtilities.s_OpenFileDialogCallback = () =>
            {
                hasOpenDialogBeenOpened = true;
                return(k_ColorsTestUSSPath);
            };

            actionMenuItem.Execute();
            Assert.That(hasOpenDialogBeenOpened, Is.True);

            yield return(UIETestHelpers.Pause(1));

            var newUSSExplorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, k_ColorsTestUSSFileName);

            Assert.That(newUSSExplorerItems.Count, Is.EqualTo(1));
        }
        public IEnumerator CheckAllTogglesForOverridesInUss()
        {
            yield return(LoadTestUXMLDocument(k_AllStylePropertiesTestFilePath));

            yield return(null);

            var selector = BuilderTestsHelper.GetExplorerItemWithName(styleSheetsPane, ".all-properties-set");

            yield return(UIETestEvents.Mouse.SimulateClick(selector));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("display", "flex"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("visibility", "visible"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("overflow", "visible"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("flex-direction", "row-reverse"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("flex-wrap", "nowrap"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("align-items", "flex-end"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("justify-content", "space-between"));

            // Text align is split in two strips
            yield return(CheckStyleToggleFieldValue <TextAlignStrip>("-unity-text-align", "lower", true));

            yield return(CheckStyleToggleFieldValue <TextAlignStrip>("-unity-text-align", "right", true));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("white-space", "normal"));

            yield return(CheckStyleToggleFieldValue <ToggleButtonStrip>("-unity-background-scale-mode", "scale-to-fit"));
        }
        public IEnumerator DragStylePillToViewport()
        {
            yield return(AddVisualElement());

            var documentElement = GetFirstDocumentElement();

            yield return(AddSelector(TestSelectorName + " " + TestSelectorName2));

            var createdSelector = GetStyleSelectorNodeWithName(TestSelectorName);

            yield return(UIETestHelpers.Pause(1));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 createdSelector.Q <Label>().worldBound.center,
                                                                 documentElement.worldBound.center));

            Assert.That(documentElement.classList.Count, Is.EqualTo(1));
            Assert.That(documentElement.classList[0], Is.EqualTo(TestSelectorName.TrimStart('.')));

            var secondClassNameLabel = BuilderTestsHelper.GetLabelWithName(createdSelector, TestSelectorName2);

            yield return(UIETestHelpers.Pause(100));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 secondClassNameLabel.worldBound.center,
                                                                 documentElement.worldBound.center));

            Assert.That(documentElement.classList.Count, Is.EqualTo(2));
            Assert.That(documentElement.classList, Contains.Item(TestSelectorName2.TrimStart('.')));
        }
        public IEnumerator HasVariableIndicator()
        {
            var asset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>(k_NewVariableUxmlFilePath);

            BuilderWindow.LoadDocument(asset);

            yield return(UIETestHelpers.Pause(1));

            // Select test-selector-1
            var selector = BuilderTestsHelper.GetExplorerItemWithName(StyleSheetsPane, k_Selector_1);

            yield return(UIETestEvents.Mouse.SimulateClick(selector));

            var textFoldout = InspectorPane.Query <PersistedFoldout>().Where(f => f.text.Equals("Text")).First();

            textFoldout.value = true;

            var colorField = FindStyleField(textFoldout, "Color");

            Assert.IsTrue(colorField.ClassListContains(BuilderConstants.InspectorLocalStyleVariableClassName));

            var sizeField = FindStyleField(textFoldout, "Size");

            Assert.IsFalse(sizeField.ClassListContains(BuilderConstants.InspectorLocalStyleVariableClassName));

            yield return(null);
        }
        public IEnumerator SelectorCopyPasteDuplicateDelete()
        {
            yield return(AddSelector(TestSelectorName));

            var explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName);

            Assert.That(explorerItems.Count, Is.EqualTo(1));

            yield return(UIETestEvents.Mouse.SimulateClick(explorerItems[0]));

            // Duplicate
            yield return(UIETestEvents.ExecuteCommand(BuilderWindow, UIETestEvents.Command.Duplicate));

            explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName);
            Assert.That(explorerItems.Count, Is.EqualTo(2));

            // Copy
            yield return(UIETestEvents.ExecuteCommand(BuilderWindow, UIETestEvents.Command.Copy));

            yield return(UIETestEvents.ExecuteCommand(BuilderWindow, UIETestEvents.Command.Paste));

            explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName);
            Assert.That(explorerItems.Count, Is.EqualTo(3));

            // Delete
            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(BuilderWindow, KeyCode.Delete));

            yield return(UIETestHelpers.Pause(1));

            explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(StyleSheetsPane, TestSelectorName);
            Assert.That(explorerItems.Count, Is.EqualTo(2));
        }
        public IEnumerator CSharpTypeTemplateChildrenMustBeGrayedOutAndNotEditable()
        {
            AddElementCodeOnly <TextField>();
            var hierarchyItem = BuilderTestsHelper.GetExplorerItemWithName(hierarchy, nameof(TextField));

            yield return(UIETestHelpers.ExpandTreeViewItem(hierarchyItem));

            var textFieldDocumentElement = GetFirstDocumentElement();

            Assert.That(textFieldDocumentElement.childCount, Is.GreaterThan(0));
            BuilderExplorerItem lastChild = null;

            foreach (var child in textFieldDocumentElement.Children())
            {
                lastChild = BuilderTestsHelper.GetLinkedExplorerItem(child);
                Assert.That(lastChild.row().classList, Contains.Item(BuilderConstants.ExplorerItemHiddenClassName));
            }

            yield return(UIETestEvents.Mouse.SimulateClick(lastChild));

            inspector.Query <ToggleButtonStrip>().ForEach(toggleButtonStrip =>
            {
                Assert.That(toggleButtonStrip.enabledInHierarchy, Is.False);
            });

            inspector.Query <PercentSlider>().ForEach(percentSlider =>
            {
                Assert.That(percentSlider.enabledInHierarchy, Is.False);
            });
        }
Example #20
0
        public virtual void Setup()
        {
            if (EditorApplication.isPlaying)
            {
                BuilderWindow = EditorWindow.GetWindow <Builder>();
            }
            else
            {
                BuilderWindow = BuilderTestsHelper.MakeNewBuilderWindow();
            }

            Selection       = BuilderWindow.selection;
            Canvas          = BuilderWindow.rootVisualElement.Q <BuilderCanvas>();
            LibraryPane     = BuilderWindow.rootVisualElement.Q <BuilderLibrary>();
            HierarchyPane   = BuilderWindow.rootVisualElement.Q <BuilderHierarchy>();
            StyleSheetsPane = BuilderWindow.rootVisualElement.Q <BuilderStyleSheets>();
            ViewportPane    = BuilderWindow.rootVisualElement.Q <BuilderViewport>();
            InspectorPane   = BuilderWindow.rootVisualElement.Q <BuilderInspector>();

            if (EditorApplication.isPlaying)
            {
                return;
            }

            BuilderProjectSettings.Reset();
            ForceNewDocument();
            var createSelectorField = StyleSheetsPane.Q <TextField>();

            createSelectorField.visualInput.Blur();
            LibraryPane.SetViewMode(BuilderLibrary.LibraryViewMode.TreeView);
        }
        public IEnumerator DragOntoHierarchyElementToCreateAsSibling()
        {
            AddElementCodeOnly();
            AddElementCodeOnly();

            // Set 500% zoom so we also test that element gets dragged into Hierarchy and not the Canvas (behind the Hierarchy).
            viewport.zoomScale     = 5f;
            viewport.contentOffset = new Vector2(-400, 0);

            var firstVisualElementItem = GetFirstExplorerItem();

            yield return(SelectLibraryTreeItemWithName("Text Field"));

            var textFieldLibrary = BuilderTestsHelper.GetLabelWithName(library, "Text Field");

            var veBottomPosition = new Vector2(firstVisualElementItem.worldBound.center.x, firstVisualElementItem.worldBound.yMin);

            yield return(UIETestEvents.Mouse.SimulateMouseEvent(builder, EventType.MouseDown, textFieldLibrary.worldBound.center));

            yield return(UIETestEvents.Mouse.SimulateMouseMove(builder, textFieldLibrary.worldBound.center, firstVisualElementItem.worldBound.center));

            yield return(UIETestEvents.Mouse.SimulateMouseMove(builder, firstVisualElementItem.worldBound.center, veBottomPosition));

            yield return(UIETestEvents.Mouse.SimulateMouseEvent(builder, EventType.MouseUp, veBottomPosition));

            Assert.That(viewport.documentRootElement.childCount, Is.EqualTo(3));
            Assert.NotNull(viewport.documentRootElement.Q <TextField>());
        }
Example #22
0
        public IEnumerator DragStylePillOntoTemplateElementInHierarchy()
        {
            AddElementCodeOnly <TextField>();

            // Ensure we can add selectors.
            yield return(EnsureSelectorsCanBeAddedAndReloadBuilder());

            yield return(AddSelector(TestSelectorName));

            var createdSelector = GetStyleSelectorNodeWithName(TestSelectorName);

            yield return(UIETestHelpers.Pause(1));

            var hierarchyTreeView = hierarchy.Q <TreeView>();

            hierarchyTreeView.ExpandItem(hierarchyTreeView.items.ToList()[1].id);

            var textFieldLabel = BuilderTestsHelper.GetExplorerItemWithName(hierarchy, nameof(Label)).Q <Label>();

            yield return(UIETestHelpers.Pause(1));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(builder,
                                                                 createdSelector.Q <Label>().worldBound.center,
                                                                 textFieldLabel.worldBound.center));

            var documentElement = GetFirstDocumentElement();

            Assert.That(documentElement.classList, Is.Not.Contain(TestSelectorName.TrimStart('.')));
        }
Example #23
0
        public IEnumerator DeleteSelectorViaRightClickMenu()
        {
            yield return(EnsureSelectorsCanBeAddedAndReloadBuilder());

            yield return(AddSelector(TestSelectorName));

            var explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName);

            Assert.That(explorerItems.Count, Is.EqualTo(1));

            var panel = builder.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            Assert.That(menu, Is.Not.Null);
            Assert.That(menu.menuIsDisplayed, Is.False);

            yield return(UIETestEvents.Mouse.SimulateClick(explorerItems[0], MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);

            var deleteMenuItem = menu.FindMenuAction("Delete");

            Assert.That(deleteMenuItem, Is.Not.Null);

            deleteMenuItem.Execute();

            yield return(UIETestHelpers.Pause(1));

            var newUSSExplorerItems = BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName);

            Assert.That(newUSSExplorerItems.Count, Is.EqualTo(0));
        }
Example #24
0
        public IEnumerator DragStylePillToViewport()
        {
            AddElementCodeOnly <TextField>();

            // Ensure we can add selectors.
            yield return(EnsureSelectorsCanBeAddedAndReloadBuilder());

            yield return(AddSelector(TestSelectorName + " " + TestSelectorName2));

            var createdSelector = GetStyleSelectorNodeWithName(TestSelectorName);

            // Now it's safe to get a reference to an element in the canvas.
            var documentElement = GetFirstDocumentElement();

            yield return(UIETestHelpers.Pause(1));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(builder,
                                                                 createdSelector.Q <Label>().worldBound.center,
                                                                 documentElement.worldBound.center));

            var currentClassCount = documentElement.classList.Count;

            Assert.That(documentElement.classList, Contains.Item(TestSelectorName.TrimStart('.')));

            var secondClassNameLabel = BuilderTestsHelper.GetLabelWithName(createdSelector, TestSelectorName2);

            yield return(UIETestHelpers.Pause(100));

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(builder,
                                                                 secondClassNameLabel.worldBound.center,
                                                                 documentElement.worldBound.center));

            Assert.That(documentElement.classList.Count, Is.EqualTo(currentClassCount + 1));
            Assert.That(documentElement.classList, Contains.Item(TestSelectorName2.TrimStart('.')));
        }
Example #25
0
        public IEnumerator SelectorRenameWithCommandAndContextMenu()
        {
            yield return(EnsureSelectorsCanBeAddedAndReloadBuilder());

            yield return(AddSelector(TestSelectorName));

            var createdSelector = GetStyleSelectorNodeWithName(TestSelectorName);

            yield return(UIETestEvents.Mouse.SimulateClick(createdSelector));

            // Rename with command.
            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Rename));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, TestSelectorName2));

            yield return(UIETestEvents.Mouse.SimulateClick(styleSheetsPane));

            yield return(UIETestHelpers.Pause(2));

            Assert.That(BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName).Count, Is.EqualTo(0));
            Assert.That(BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName2).Count, Is.EqualTo(1));

            // Test invalid selector rename.
            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Rename));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, "invalid%%selector@$name"));

            yield return(UIETestEvents.Mouse.SimulateClick(styleSheetsPane));

            yield return(UIETestHelpers.Pause(2));

            Assert.That(BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName2).Count, Is.EqualTo(1));

            // Try renaming with contextual menu option.
            var panel = builder.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            Assert.That(menu, Is.Not.Null);
            Assert.That(menu.menuIsDisplayed, Is.False);

            createdSelector = GetStyleSelectorNodeWithName(TestSelectorName2);
            yield return(UIETestEvents.Mouse.SimulateClick(createdSelector, MouseButton.RightMouse));

            var renameClick = menu.FindMenuAction("Rename");

            Assert.That(renameClick, Is.Not.Null);

            renameClick.Execute();
            yield return(UIETestHelpers.Pause(1));

            // Rename back to original selector name.
            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, TestSelectorName));

            yield return(UIETestEvents.Mouse.SimulateClick(styleSheetsPane));

            yield return(UIETestHelpers.Pause(2));

            Assert.That(BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName2).Count, Is.EqualTo(0));
            Assert.That(BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName).Count, Is.EqualTo(1));
        }
Example #26
0
        public IEnumerator SelectorNameValidation()
        {
            yield return(EnsureSelectorsCanBeAddedAndReloadBuilder());

            var createSelectorField = styleSheetsPane.Q <TextField>();

            createSelectorField.visualInput.Focus();
            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, "invalid%%selector@$name"));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(builder, KeyCode.Return));

            yield return(UIETestHelpers.Pause(2));

            Assert.That(createSelectorField.text, Is.EqualTo(".invalid%%selector@$name"));

            // 1 because title is BuilderExplorerItem as well. So 1 means empty in this context
            Assert.That(styleSheetsPane.Query <BuilderExplorerItem>().ToList().Count, Is.EqualTo(1));

            // Test that we haven't lost field focus and can type valid name.
            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, TestSelectorName));

            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(builder, KeyCode.Return));

            var explorerItems = BuilderTestsHelper.GetExplorerItemsWithName(styleSheetsPane, TestSelectorName);

            Assert.That(explorerItems.Count, Is.EqualTo(1));
        }
        public IEnumerator UnloadSubDocumentsOnFileOpen()
        {
            var panel = builder.rootVisualElement.panel as BaseVisualElementPanel;
            var menu  = panel.contextualMenuManager as BuilderTestContextualMenuManager;

            Assert.That(menu, Is.Not.Null);
            Assert.That(menu.menuIsDisplayed, Is.False);

            // Load Test UXML File
            yield return(LoadTestUXMLDocument(k_ParentTestUXMLPath));

            // Open child
            string nameOfChildSubDocument = "#ChildTestUXMLDocument";
            var    childInHierarchy       = BuilderTestsHelper.GetExplorerItemsWithName(hierarchy, nameOfChildSubDocument);

            // Simulate right click on child TemplateContainer
            yield return(UIETestEvents.Mouse.SimulateClick(childInHierarchy[0], MouseButton.RightMouse));

            Assert.That(menu.menuIsDisplayed, Is.True);

            var subdocumentClick = menu.FindMenuAction(BuilderConstants.ExplorerHierarchyPaneOpenSubDocument);

            Assert.That(subdocumentClick, Is.Not.Null);

            subdocumentClick.Execute();
            yield return(UIETestHelpers.Pause(1));

            // Main part: opening NewDocument makes it the only document
            Assert.AreEqual(2, builder.document.openUXMLFiles.Count);
            builder.rootVisualElement.Q <BuilderToolbar>().NewDocument();
            Assert.AreEqual(1, builder.document.openUXMLFiles.Count);
        }
        public IEnumerator StandardShortCuts()
        {
            yield return(AddVisualElement());

            var explorerItems = BuilderTestsHelper.GetExplorerItems(hierarchy);

            Assert.That(explorerItems.Count, Is.EqualTo(1));
            yield return(UIETestEvents.Mouse.SimulateClick(explorerItems[0]));

            // Rename
            const string renameString = "renameString";

            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Rename));

            yield return(UIETestEvents.KeyBoard.SimulateTyping(builder, renameString));

            yield return(UIETestEvents.Mouse.SimulateClick(viewport));

            explorerItems = BuilderTestsHelper.GetExplorerItems(hierarchy);
            var explorerItemLabel = explorerItems[0].Q <Label>();

            Assert.That(explorerItemLabel.text, Is.EqualTo("#" + renameString));

            yield return(UIETestEvents.Mouse.SimulateClick(explorerItems[0]));

            // Duplicate
            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Duplicate));

            explorerItems = BuilderTestsHelper.GetExplorerItems(hierarchy);
            Assert.That(explorerItems.Count, Is.EqualTo(2));

            // Copy/Paste
            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Copy));

            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Paste));

            explorerItems = BuilderTestsHelper.GetExplorerItems(hierarchy);
            Assert.That(explorerItems.Count, Is.EqualTo(3));

            // Delete
            yield return(UIETestEvents.KeyBoard.SimulateKeyDown(builder, KeyCode.Delete));

            explorerItems = BuilderTestsHelper.GetExplorerItems(hierarchy);
            Assert.That(explorerItems.Count, Is.EqualTo(2));

            // Pasted as children of the parent of the currently selected element.

            AddElementCodeOnly <TextField>();
            var textField = viewport.documentRootElement.Q <TextField>();

            Assert.That(textField.childCount, Is.EqualTo(2));

            yield return(UIETestEvents.ExecuteCommand(builder, UIETestEvents.Command.Paste));

            Assert.That(textField.childCount, Is.EqualTo(2));
        }
        protected IEnumerator AddElement(string elementLabel)
        {
            var label = BuilderTestsHelper.GetLabelWithName(LibraryPane, elementLabel);

            yield return(UIETestEvents.Mouse.SimulateDragAndDrop(BuilderWindow,
                                                                 label.worldBound.center,
                                                                 HierarchyPane.worldBound.center));

            yield return(UIETestHelpers.Pause(1));
        }
        public IEnumerator CanDoubleClickToCreateNewElement()
        {
            Assert.That(viewport.documentRootElement.childCount, Is.EqualTo(0));
            var label = BuilderTestsHelper.GetLabelWithName(library, nameof(VisualElement));

            Assert.That(label, Is.Not.Null);
            yield return(UIETestEvents.Mouse.SimulateDoubleClick(label));

            Assert.That(viewport.documentRootElement.childCount, Is.EqualTo(1));
        }