A game about forced loneliness, made by TACStudios
at master 26 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using NUnit.Framework; 5using UnityEngine; 6using UnityEditor.ShaderGraph; 7 8namespace UnityEditor.Graphing.UnitTests 9{ 10 [TestFixture] 11 public class BaseMaterialGraphTests 12 { 13 [OneTimeSetUp] 14 public void RunBeforeAnyTests() 15 { 16 Debug.unityLogger.logHandler = new ConsoleLogHandler(); 17 } 18 19 [Test] 20 public void TestCanCreateBaseMaterialGraph() 21 { 22 var graph = new GraphData(); 23 24 Assert.AreEqual(0, graph.edges.Count()); 25 Assert.AreEqual(0, graph.GetNodes<AbstractMaterialNode>().Count()); 26 } 27 28 [Test] 29 public void TestCanAddNodeToBaseMaterialGraph() 30 { 31 var graph = new GraphData(); 32 var node = new TestNode(); 33 node.name = "Test Node"; 34 graph.AddNode(node); 35 36 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 37 Assert.AreEqual("Test Node", graph.GetNodes<AbstractMaterialNode>().FirstOrDefault().name); 38 Assert.AreEqual(graph, node.owner); 39 } 40 41 [Test] 42 public void TestCanRemoveNodeFromBaseMaterialGraph() 43 { 44 var graph = new GraphData(); 45 var node = new TestNode(); 46 node.name = "Test Node"; 47 graph.AddNode(node); 48 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 49 50 graph.RemoveNode(graph.GetNodes<AbstractMaterialNode>().FirstOrDefault()); 51 Assert.AreEqual(0, graph.GetNodes<AbstractMaterialNode>().Count()); 52 } 53 54 [Test] 55 public void TestCanModifyNodeDrawState() 56 { 57 var node = new TestNode(); 58 node.name = "Test Node"; 59 60 var drawState = node.drawState; 61 var newPos = new Rect(10, 10, 0, 0); 62 drawState.position = newPos; 63 drawState.expanded = false; 64 node.drawState = drawState; 65 66 Assert.AreEqual(drawState, node.drawState); 67 Assert.AreEqual(newPos, node.drawState.position); 68 Assert.IsFalse(node.drawState.expanded); 69 } 70 71 class SetErrorNode : TestNode 72 { 73 public void SetError() 74 { 75 hasError = true; 76 } 77 78 public void ClearError() 79 { 80 hasError = false; 81 } 82 } 83 84 [Test] 85 public void TestChildClassCanModifyErrorState() 86 { 87 var node = new SetErrorNode(); 88 node.SetError(); 89 Assert.IsTrue(node.hasError); 90 node.ClearError(); 91 Assert.IsFalse(node.hasError); 92 } 93 94 class TestableNode : TestNode 95 { 96 public const int Input0 = 0; 97 public const int Input1 = 1; 98 public const int Input2 = 2; 99 100 public const int Output0 = 3; 101 public const int Output1 = 4; 102 public const int Output2 = 5; 103 104 public TestableNode() : base() 105 { 106 AddSlot(new TestSlot(Input0, "Input", SlotType.Input)); 107 AddSlot(new TestSlot(Input1, "Input", SlotType.Input)); 108 AddSlot(new TestSlot(Input2, "Input", SlotType.Input)); 109 110 AddSlot(new TestSlot(Output0, "Output", SlotType.Output)); 111 AddSlot(new TestSlot(Output1, "Output", SlotType.Output)); 112 AddSlot(new TestSlot(Output2, "Output", SlotType.Output)); 113 } 114 } 115 116 [Test] 117 public void TestRemoveNodeFromBaseMaterialGraphCleansEdges() 118 { 119 var graph = new GraphData(); 120 var outputNode = new TestableNode(); 121 graph.AddNode(outputNode); 122 123 var inputNode = new TestableNode(); 124 graph.AddNode(inputNode); 125 126 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 127 var createdEdge = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 128 Assert.AreEqual(1, graph.edges.Count()); 129 130 var edge = graph.edges.FirstOrDefault(); 131 132 Assert.AreEqual(createdEdge, edge); 133 134 graph.RemoveNode(outputNode); 135 136 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 137 Assert.AreEqual(0, graph.edges.Count()); 138 Assert.AreEqual(inputNode, graph.GetNodes<AbstractMaterialNode>().FirstOrDefault()); 139 } 140 141 private class NoDeleteNode : TestNode 142 { 143 public override bool canDeleteNode { get { return false; } } 144 } 145 146 [Test] 147 public void TestCanNotRemoveNoDeleteNodeFromBaseMaterialGraph() 148 { 149 var graph = new GraphData(); 150 var node = new NoDeleteNode(); 151 node.name = "Test Node"; 152 graph.AddNode(node); 153 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 154 Assert.Catch<InvalidOperationException>(() => graph.RemoveNode(node)); 155 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 156 } 157 158 private class OnEnableNode : TestNode, IOnAssetEnabled 159 { 160 public bool called = false; 161 public void OnEnable() 162 { 163 called = true; 164 } 165 } 166 167 [Test] 168 public void TestSerializedGraphDelegatesOnEnableCalls() 169 { 170 var graph = new GraphData(); 171 var node = new OnEnableNode(); 172 node.name = "Test Node"; 173 graph.AddNode(node); 174 175 Assert.IsFalse(node.called); 176 graph.OnEnable(); 177 Assert.IsTrue(node.called); 178 } 179 180 [Test] 181 public void TestCanFindNodeInBaseMaterialGraph() 182 { 183 var graph = new GraphData(); 184 var node = new TestNode(); 185 graph.AddNode(node); 186 187 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 188 Assert.IsNotNull(graph.GetNodeFromId(node.objectId)); 189 Assert.IsNull(graph.GetNodeFromId("asdfffsd")); 190 } 191 192 [Test] 193 public void TestCanAddSlotToTestNode() 194 { 195 var graph = new GraphData(); 196 var node = new TestNode(); 197 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 198 node.AddSlot(new TestSlot(1, "input", SlotType.Input)); 199 node.name = "Test Node"; 200 graph.AddNode(node); 201 202 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 203 var found = graph.GetNodes<AbstractMaterialNode>().FirstOrDefault(); 204 Assert.AreEqual(1, found.GetInputSlots<MaterialSlot>().Count()); 205 Assert.AreEqual(1, found.GetInputSlots<MaterialSlot>().FirstOrDefault().id); 206 Assert.AreEqual(1, found.GetOutputSlots<MaterialSlot>().Count()); 207 Assert.AreEqual(0, found.GetOutputSlots<MaterialSlot>().FirstOrDefault().id); 208 Assert.AreEqual(2, found.GetSlots<MaterialSlot>().Count()); 209 } 210 211 [Test] 212 public void TestCanNotAddNullSlotToTestNode() 213 { 214 var node = new TestNode(); 215 Assert.Throws<ArgumentException>(() => node.AddSlot(null)); 216 } 217 218 [Test] 219 public void TestCanRemoveSlotFromTestNode() 220 { 221 var graph = new GraphData(); 222 var node = new TestNode(); 223 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 224 node.AddSlot(new TestSlot(1, "input", SlotType.Input)); 225 graph.AddNode(node); 226 227 Assert.AreEqual(2, node.GetSlots<MaterialSlot>().Count()); 228 Assert.AreEqual(1, node.GetInputSlots<MaterialSlot>().Count()); 229 Assert.AreEqual(1, node.GetOutputSlots<MaterialSlot>().Count()); 230 231 node.RemoveSlot(1); 232 233 Assert.AreEqual(1, node.GetSlots<MaterialSlot>().Count()); 234 Assert.AreEqual(0, node.GetInputSlots<MaterialSlot>().Count()); 235 Assert.AreEqual(1, node.GetOutputSlots<MaterialSlot>().Count()); 236 } 237 238 [Test] 239 public void TestCanRemoveSlotsWithNonMathingNameFromTestNode() 240 { 241 var graph = new GraphData(); 242 var node = new TestableNode(); 243 graph.AddNode(node); 244 245 Assert.AreEqual(6, node.GetSlots<MaterialSlot>().Count()); 246 Assert.AreEqual(3, node.GetInputSlots<MaterialSlot>().Count()); 247 Assert.AreEqual(3, node.GetOutputSlots<MaterialSlot>().Count()); 248 249 node.RemoveSlotsNameNotMatching(new[] { TestableNode.Input1 }); 250 251 Assert.AreEqual(1, node.GetSlots<MaterialSlot>().Count()); 252 Assert.AreEqual(1, node.GetInputSlots<MaterialSlot>().Count()); 253 Assert.AreEqual(0, node.GetOutputSlots<MaterialSlot>().Count()); 254 255 Assert.IsNull(node.FindInputSlot<MaterialSlot>(TestableNode.Input0)); 256 Assert.IsNotNull(node.FindInputSlot<MaterialSlot>(TestableNode.Input1)); 257 Assert.IsNull(node.FindInputSlot<MaterialSlot>(TestableNode.Input2)); 258 } 259 260 [Test] 261 public void TestCanNotAddDuplicateSlotToTestNode() 262 { 263 var graph = new GraphData(); 264 var node = new TestNode(); 265 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 266 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 267 node.name = "Test Node"; 268 graph.AddNode(node); 269 270 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 271 var found = graph.GetNodes<AbstractMaterialNode>().FirstOrDefault(); 272 Assert.AreEqual(0, found.GetInputSlots<MaterialSlot>().Count()); 273 Assert.AreEqual(1, found.GetOutputSlots<MaterialSlot>().Count()); 274 Assert.AreEqual(1, found.GetSlots<MaterialSlot>().Count()); 275 } 276 277 [Test] 278 public void TestCanUpdateDisplaynameByReaddingSlotToTestNode() 279 { 280 var graph = new GraphData(); 281 var node = new TestNode(); 282 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 283 node.AddSlot(new TestSlot(0, "output_updated", SlotType.Output)); 284 node.name = "Test Node"; 285 graph.AddNode(node); 286 287 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 288 var found = graph.GetNodes<AbstractMaterialNode>().FirstOrDefault(); 289 Assert.AreEqual(0, found.GetInputSlots<MaterialSlot>().Count()); 290 Assert.AreEqual(1, found.GetOutputSlots<MaterialSlot>().Count()); 291 Assert.AreEqual(1, found.GetSlots<MaterialSlot>().Count()); 292 293 var slot = found.GetOutputSlots<MaterialSlot>().FirstOrDefault(); 294 Assert.AreEqual("output_updated(4)", slot.displayName); 295 } 296 297 [Test] 298 public void TestCanUpdateSlotDisplayName() 299 { 300 var node = new TestNode(); 301 node.AddSlot(new TestSlot(0, "output", SlotType.Output)); 302 node.name = "Test Node"; 303 304 Assert.AreEqual(0, node.GetInputSlots<MaterialSlot>().Count()); 305 Assert.AreEqual(1, node.GetOutputSlots<MaterialSlot>().Count()); 306 Assert.AreEqual(1, node.GetSlots<MaterialSlot>().Count()); 307 308 var slot = node.GetOutputSlots<MaterialSlot>().FirstOrDefault(); 309 Assert.IsNotNull(slot); 310 Assert.AreEqual("output(4)", slot.displayName); 311 slot.displayName = "test"; 312 Assert.AreEqual("test(4)", slot.displayName); 313 } 314 315 [Test] 316 public void TestCanFindSlotOnTestNode() 317 { 318 var node = new TestableNode(); 319 320 Assert.AreEqual(6, node.GetSlots<MaterialSlot>().Count()); 321 Assert.IsNotNull(node.FindInputSlot<MaterialSlot>(TestableNode.Input0)); 322 Assert.IsNull(node.FindInputSlot<MaterialSlot>(TestableNode.Output0)); 323 Assert.IsNotNull(node.FindOutputSlot<MaterialSlot>(TestableNode.Output0)); 324 Assert.IsNull(node.FindOutputSlot<MaterialSlot>(TestableNode.Input0)); 325 326 Assert.IsNotNull(node.FindSlot<MaterialSlot>(TestableNode.Input0)); 327 Assert.IsNotNull(node.FindSlot<MaterialSlot>(TestableNode.Output0)); 328 Assert.IsNull(node.FindSlot<MaterialSlot>(555)); 329 } 330 331 [Test] 332 public void TestCanFindSlotReferenceOnTestNode() 333 { 334 var node = new TestableNode(); 335 336 Assert.AreEqual(6, node.GetSlots<MaterialSlot>().Count()); 337 Assert.IsNotNull(node.GetSlotReference(TestableNode.Input0)); 338 Assert.IsNotNull(node.GetSlotReference(TestableNode.Output0)); 339 Assert.Throws<ArgumentException>(() => node.GetSlotReference(555)); 340 } 341 342 [Test] 343 public void TestCanConnectAndTraverseTwoNodesOnBaseMaterialGraph() 344 { 345 var graph = new GraphData(); 346 347 var outputNode = new TestableNode(); 348 graph.AddNode(outputNode); 349 350 var inputNode = new TestableNode(); 351 graph.AddNode(inputNode); 352 353 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 354 355 356 var createdEdge = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 357 Assert.AreEqual(1, graph.edges.Count()); 358 359 var edge = graph.edges.FirstOrDefault(); 360 361 Assert.AreEqual(createdEdge, edge); 362 363 var foundOutputNode = edge.outputSlot.node; 364 var foundOutputSlot = foundOutputNode.FindOutputSlot<MaterialSlot>(edge.outputSlot.slotId); 365 Assert.AreEqual(outputNode, foundOutputNode); 366 Assert.IsNotNull(foundOutputSlot); 367 368 var foundInputNode = edge.inputSlot.node; 369 var foundInputSlot = foundInputNode.FindInputSlot<MaterialSlot>(edge.inputSlot.slotId); 370 Assert.AreEqual(inputNode, foundInputNode); 371 Assert.IsNotNull(foundInputSlot); 372 } 373 374 [Test] 375 public void TestCanConnectAndTraverseThreeNodesOnBaseMaterialGraph() 376 { 377 var graph = new GraphData(); 378 379 var outputNode = new TestableNode(); 380 graph.AddNode(outputNode); 381 382 var middleNode = new TestableNode(); 383 graph.AddNode(middleNode); 384 385 var inputNode = new TestableNode(); 386 graph.AddNode(inputNode); 387 388 Assert.AreEqual(3, graph.GetNodes<AbstractMaterialNode>().Count()); 389 390 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), middleNode.GetSlotReference(TestableNode.Input0)); 391 Assert.AreEqual(1, graph.edges.Count()); 392 393 graph.Connect(middleNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 394 Assert.AreEqual(2, graph.edges.Count()); 395 396 var edgesOnMiddleNode = NodeUtils.GetAllEdges(middleNode); 397 Assert.AreEqual(2, edgesOnMiddleNode.Count()); 398 399 outputNode.SetOverrideActiveState(AbstractMaterialNode.ActiveState.ExplicitActive); 400 middleNode.SetOverrideActiveState(AbstractMaterialNode.ActiveState.ExplicitActive); 401 inputNode.SetOverrideActiveState(AbstractMaterialNode.ActiveState.ExplicitActive); 402 var result = new HashSet<AbstractMaterialNode>(); 403 NodeUtils.DepthFirstCollectNodesFromNode(result, inputNode); 404 Assert.AreEqual(3, result.Count); 405 406 result.Clear(); 407 NodeUtils.DepthFirstCollectNodesFromNode(result, inputNode, NodeUtils.IncludeSelf.Exclude); 408 Assert.AreEqual(2, result.Count); 409 410 result.Clear(); 411 NodeUtils.DepthFirstCollectNodesFromNode(result, null); 412 Assert.AreEqual(0, result.Count); 413 } 414 415 [Test] 416 public void TestExceptionIfBadNodeConfigurationWorks() 417 { 418 var node = new TestableNode(); 419 Assert.DoesNotThrow( 420 () => 421 NodeUtils.SlotConfigurationExceptionIfBadConfiguration( 422 node, 423 new[] { TestableNode.Input0, TestableNode.Input1, TestableNode.Input2 }, 424 new[] { TestableNode.Output0, TestableNode.Output1, TestableNode.Output2, }) 425 ); 426 427 428 Assert.Throws<SlotConfigurationException>( 429 () => 430 NodeUtils.SlotConfigurationExceptionIfBadConfiguration( 431 node, 432 new[] { 666, TestableNode.Input1, TestableNode.Input2 }, 433 new[] { TestableNode.Output0, TestableNode.Output1, TestableNode.Output2, }) 434 ); 435 436 Assert.Throws<SlotConfigurationException>( 437 () => 438 NodeUtils.SlotConfigurationExceptionIfBadConfiguration( 439 node, 440 new[] { TestableNode.Input0, TestableNode.Input1, TestableNode.Input2 }, 441 new[] { 666, TestableNode.Output1, TestableNode.Output2, }) 442 ); 443 444 Assert.DoesNotThrow( 445 () => 446 NodeUtils.SlotConfigurationExceptionIfBadConfiguration( 447 node, 448 new[] { TestableNode.Input0 }, 449 new[] { TestableNode.Output0 }) 450 ); 451 } 452 453 [Test] 454 public void TestConectionToSameInputReplacesOldInput() 455 { 456 var graph = new GraphData(); 457 458 var outputNode = new TestableNode(); 459 graph.AddNode(outputNode); 460 461 var inputNode = new TestableNode(); 462 graph.AddNode(inputNode); 463 464 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 465 466 var createdEdge = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 467 Assert.AreEqual(1, graph.edges.Count()); 468 var edge = graph.edges.FirstOrDefault(); 469 Assert.AreEqual(createdEdge, edge); 470 471 var createdEdge2 = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 472 Assert.AreEqual(1, graph.edges.Count()); 473 var edge2 = graph.edges.FirstOrDefault(); 474 Assert.AreEqual(createdEdge2, edge2); 475 } 476 477 [Test] 478 public void TestRemovingSlotRemovesConnectedEdges() 479 { 480 var graph = new GraphData(); 481 482 var outputNode = new TestableNode(); 483 graph.AddNode(outputNode); 484 485 var inputNode = new TestableNode(); 486 graph.AddNode(inputNode); 487 488 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 489 490 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 491 Assert.AreEqual(1, graph.edges.Count()); 492 493 outputNode.RemoveSlot(TestableNode.Output0); 494 Assert.AreEqual(0, graph.edges.Count()); 495 } 496 497 [Test] 498 public void TestCanNotConnectToNullSlot() 499 { 500 var graph = new GraphData(); 501 502 var outputNode = new TestableNode(); 503 graph.AddNode(outputNode); 504 505 var inputNode = new TestNode(); 506 graph.AddNode(inputNode); 507 508 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 509 510 var createdEdge2 = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), new SlotReference(null, 666)); 511 Assert.AreEqual(0, graph.edges.Count()); 512 Assert.IsNull(createdEdge2); 513 } 514 515 [Test] 516 public void TestCanNotConnectTwoOuputSlotsOnBaseMaterialGraph() 517 { 518 var graph = new GraphData(); 519 520 var outputNode = new TestableNode(); 521 graph.AddNode(outputNode); 522 523 var outputNode2 = new TestableNode(); 524 graph.AddNode(outputNode2); 525 526 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 527 528 var createdEdge = graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), outputNode2.GetSlotReference(TestableNode.Output0)); 529 Assert.IsNull(createdEdge); 530 Assert.AreEqual(0, graph.edges.Count()); 531 } 532 533 [Test] 534 public void TestCanNotConnectTwoInputSlotsOnBaseMaterialGraph() 535 { 536 var graph = new GraphData(); 537 538 var inputNode = new TestableNode(); 539 graph.AddNode(inputNode); 540 541 var inputNode2 = new TestableNode(); 542 graph.AddNode(inputNode2); 543 544 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 545 546 var createdEdge = graph.Connect(inputNode.GetSlotReference(TestableNode.Input0), inputNode2.GetSlotReference(TestableNode.Input0)); 547 Assert.IsNull(createdEdge); 548 Assert.AreEqual(0, graph.edges.Count()); 549 } 550 551 [Test] 552 public void TestRemovingNodeRemovesConectedEdgesOnBaseMaterialGraph() 553 { 554 var graph = new GraphData(); 555 var outputNode = new TestableNode(); 556 graph.AddNode(outputNode); 557 558 var inputNode = new TestableNode(); 559 graph.AddNode(inputNode); 560 561 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 562 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 563 Assert.AreEqual(1, graph.edges.Count()); 564 565 graph.RemoveNode(graph.GetNodes<AbstractMaterialNode>().FirstOrDefault()); 566 Assert.AreEqual(1, graph.GetNodes<AbstractMaterialNode>().Count()); 567 Assert.AreEqual(0, graph.edges.Count()); 568 } 569 570 [Test] 571 public void TestRemovingEdgeOnBaseMaterialGraph() 572 { 573 var graph = new GraphData(); 574 var outputNode = new TestableNode(); 575 graph.AddNode(outputNode); 576 577 var inputNode = new TestableNode(); 578 graph.AddNode(inputNode); 579 580 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 581 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 582 Assert.AreEqual(1, graph.edges.Count()); 583 584 graph.RemoveEdge(graph.edges.FirstOrDefault()); 585 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 586 Assert.AreEqual(0, graph.edges.Count()); 587 } 588 589 [Test] 590 public void TestRemovingElementsFromBaseMaterialGraph() 591 { 592 var graph = new GraphData(); 593 var outputNode = new TestableNode(); 594 graph.AddNode(outputNode); 595 596 var inputNode = new TestableNode(); 597 graph.AddNode(inputNode); 598 599 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 600 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 601 Assert.AreEqual(1, graph.edges.Count()); 602 603 graph.RemoveElements(graph.GetNodes<AbstractMaterialNode>().ToArray(), graph.edges.ToArray(), new GroupData[] { }, new StickyNoteData[] { }); 604 Assert.AreEqual(0, graph.GetNodes<AbstractMaterialNode>().Count()); 605 Assert.AreEqual(0, graph.edges.Count()); 606 } 607 608 [Test] 609 public void TestCanGetEdgesOnBaseMaterialGraphFromSlotReference() 610 { 611 var graph = new GraphData(); 612 var outputNode = new TestableNode(); 613 graph.AddNode(outputNode); 614 615 var inputNode = new TestableNode(); 616 graph.AddNode(inputNode); 617 618 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 619 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 620 Assert.AreEqual(1, graph.edges.Count()); 621 622 Assert.AreEqual(1, graph.GetEdges(inputNode.GetSlotReference(TestableNode.Input0)).Count()); 623 Assert.AreEqual(1, graph.GetEdges(outputNode.GetSlotReference(TestableNode.Output0)).Count()); 624 Assert.Throws<ArgumentException>(() => outputNode.GetSlotReference(666)); 625 } 626 627 [Test] 628 public void TestGetInputsWithNoConnection() 629 { 630 var graph = new GraphData(); 631 632 var outputNode = new TestableNode(); 633 graph.AddNode(outputNode); 634 635 var inputNode = new TestableNode(); 636 graph.AddNode(inputNode); 637 638 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 639 graph.Connect(outputNode.GetSlotReference(TestableNode.Output0), inputNode.GetSlotReference(TestableNode.Input0)); 640 Assert.AreEqual(1, graph.edges.Count()); 641 642 var slots = inputNode.GetInputsWithNoConnection(); 643 Assert.AreEqual(2, slots.Count()); 644 CollectionAssert.AreEqual(new[] { TestableNode.Input1, TestableNode.Input2 }, slots.Select(x => x.id)); 645 } 646 647 [Test] 648 public void TestCyclicConnectionsAreNotAllowedOnGraph() 649 { 650 var graph = new GraphData(); 651 652 var nodeA = new TestableNode(); 653 654 graph.AddNode(nodeA); 655 656 var nodeB = new TestableNode(); 657 graph.AddNode(nodeB); 658 659 Assert.AreEqual(2, graph.GetNodes<AbstractMaterialNode>().Count()); 660 graph.Connect(nodeA.GetSlotReference(TestableNode.Output0), nodeB.GetSlotReference(TestableNode.Input0)); 661 Assert.AreEqual(1, graph.edges.Count()); 662 663 var edge = graph.Connect(nodeB.GetSlotReference(TestableNode.Output0), nodeA.GetSlotReference(TestableNode.Input0)); 664 Assert.IsNull(edge); 665 Assert.AreEqual(1, graph.edges.Count()); 666 } 667 } 668}