A game about forced loneliness, made by TACStudios
at master 95 lines 3.1 kB view raw
1using System.Collections; 2using System.Linq; 3using System.Reflection; 4using NUnit.Framework; 5using UnityEngine; 6using UnityEngine.TestTools; 7using UnityEditor.Graphing; 8using UnityEditor.ShaderGraph.Drawing; 9 10namespace UnityEditor.ShaderGraph.UnitTests 11{ 12 [TestFixture] 13 class MaterialGraphTests 14 { 15 private class TestNode : AbstractMaterialNode 16 { } 17 18 [OneTimeSetUp] 19 public void RunBeforeAnyTests() 20 { 21 Debug.unityLogger.logHandler = new ConsoleLogHandler(); 22 } 23 24 [Test] 25 public void TestCreateMaterialGraph() 26 { 27 var graph = new GraphData(); 28 29 Assert.IsNotNull(graph); 30 31 Assert.AreEqual(0, graph.GetNodes<AbstractMaterialNode>().Count()); 32 } 33 34 [Test] 35 public void TestUndoRedoPerformedMethod() 36 { 37 var view = new MaterialGraphView(); 38 var viewType = typeof(MaterialGraphView); 39 var fieldInfo = viewType.GetField("m_UndoRedoPerformedMethodInfo", BindingFlags.NonPublic | BindingFlags.Instance); 40 var fieldInfoValue = fieldInfo.GetValue(view); 41 42 Assert.IsNotNull(fieldInfoValue, "m_UndoRedoPerformedMethodInfo must not be null."); 43 } 44 45 private const string kTempAssetPath = "Packages/com.unity.shadergraph/Tests/Editor/TempGraphKeepUnsavedChange.shadergraph"; 46 47 [UnityTest] 48 public IEnumerator TestMaterialGraphKeepUnsavedChange() 49 { 50 if (Display.main == null || Application.isBatchMode) 51 { 52 yield break; 53 } 54 55 var graphData = new GraphData(); 56 graphData.AddContexts(); 57 graphData.InitializeOutputs(null, null); 58 graphData.AddCategory(CategoryData.DefaultCategory()); 59 graphData.path = "TempGraph"; 60 61 FileUtilities.WriteShaderGraphToDisk(kTempAssetPath, graphData); 62 AssetDatabase.Refresh(); 63 64 string assetGuid = AssetDatabase.AssetPathToGUID(kTempAssetPath); 65 66 var window = EditorWindow.CreateWindow<MaterialGraphEditWindow>(); 67 window.Initialize(assetGuid); 68 window.Focus(); 69 70 // Make an unsaved change that should be kept on Domain Reload. 71 window.graphObject.graph.AddNode(new TestNode()); 72 73 EditorUtility.RequestScriptReload(); 74 yield return new WaitForDomainReload(); 75 76 window = EditorWindow.GetWindow<MaterialGraphEditWindow>(); 77 graphData = window?.graphObject?.graph; 78 79 // Assert later to always cleanup window and asset. 80 bool windowNotLost = window != null; 81 bool keepChange = graphData != null && graphData.GetNodes<TestNode>().Any(); 82 83 if (windowNotLost) 84 { 85 window.graphObject = null; // Prevent a save prompt from popping. 86 window.Close(); 87 } 88 AssetDatabase.DeleteAsset(kTempAssetPath); 89 AssetDatabase.Refresh(); 90 91 Assert.IsTrue(windowNotLost); 92 Assert.IsTrue(keepChange); 93 } 94 } 95}