A game about forced loneliness, made by TACStudios
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}