Example #1
0
        public void CopyPasteEdges()
        {
            VisualEffectAsset asset = AssetDatabase.LoadAssetAtPath <VisualEffectAsset>("Assets/AllTests/Editor/Tests/CopyPasteTest.vfx");

            VFXViewController controller = VFXViewController.GetController(asset.GetResource(), true);

            VFXViewWindow window = EditorWindow.GetWindow <VFXViewWindow>();
            VFXView       view   = window.graphView;

            view.controller = controller;

            view.ClearSelection();


            var originalElements = view.Query().OfType <GraphElement>().ToList().OfType <ISelectable>().ToArray();

            Assert.AreNotEqual(originalElements.Length, 0);

            foreach (var element in originalElements)
            {
                view.AddToSelection(element);
            }

            string copyData = view.SerializeElements(view.selection.OfType <GraphElement>());

            view.controller = m_ViewController;

            view.UnserializeAndPasteElements("paste", copyData);

            m_ViewController.ApplyChanges();

            VFXParameterUI[] parameters = view.Query().OfType <VFXParameterUI>().ToList().ToArray();

            Assert.AreEqual(parameters.Length, 2);

            if (parameters[0].title == "Vector3")
            {
                var tmp = parameters[0];
                parameters[0] = parameters[1];
                parameters[1] = tmp;
            }

            VFXOperatorUI[] operators = view.Query().OfType <VFXOperatorUI>().ToList().ToArray();

            Assert.AreEqual(operators.Length, 2);

            VFXContextUI[] contexts = view.Query().OfType <VFXContextUI>().ToList().ToArray();

            Assert.AreEqual(contexts.Length, 2);

            if (contexts[0].controller.model is VFXBasicUpdate)
            {
                var tmp = contexts[0];
                contexts[0] = contexts[1];
                contexts[1] = tmp;
            }


            VFXDataEdge[] dataEdges = view.Query().OfType <VFXDataEdge>().ToList().ToArray();

            Assert.AreEqual(dataEdges.Length, 4);

            Assert.IsNotNull(dataEdges.Where(t =>
                                             t.output.GetFirstAncestorOfType <VFXNodeUI>() == parameters[1] &&
                                             operators.Contains(t.input.GetFirstAncestorOfType <VFXOperatorUI>())
                                             ).FirstOrDefault());

            Assert.IsNotNull(dataEdges.Where(t =>
                                             operators.Contains(t.input.GetFirstAncestorOfType <VFXOperatorUI>()) &&
                                             operators.Contains(t.output.GetFirstAncestorOfType <VFXOperatorUI>()) &&
                                             t.output.GetFirstAncestorOfType <VFXNodeUI>() != t.input.GetFirstAncestorOfType <VFXNodeUI>()
                                             ).FirstOrDefault());

            Assert.IsNotNull(dataEdges.Where(t =>
                                             t.output.GetFirstAncestorOfType <VFXNodeUI>() == parameters[0] &&
                                             t.input.GetFirstAncestorOfType <VFXNodeUI>() == contexts[0]
                                             ).FirstOrDefault());

            Assert.IsNotNull(dataEdges.Where(t =>
                                             operators.Contains(t.output.GetFirstAncestorOfType <VFXNodeUI>()) &&
                                             t.input.GetFirstAncestorOfType <VFXNodeUI>() == contexts[0].GetAllBlocks().First()
                                             ).FirstOrDefault());


            VFXFlowEdge flowEdge = view.Query().OfType <VFXFlowEdge>();

            Assert.IsNotNull(flowEdge);

            Assert.AreEqual(flowEdge.output.GetFirstAncestorOfType <VFXContextUI>(), contexts[1]);
            Assert.AreEqual(flowEdge.input.GetFirstAncestorOfType <VFXContextUI>(), contexts[0]);
        }