73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using JetBrains.Annotations;
 | |
| using NUnit.Framework.Constraints;
 | |
| 
 | |
| namespace UnityEditor.Searcher.Tests
 | |
| {
 | |
|     [PublicAPI]
 | |
|     class Is : NUnit.Framework.Is
 | |
|     {
 | |
|         public static SearcherItemCollectionEquivalentConstraint SearcherItemCollectionEquivalent(IEnumerable<SearcherItem> expected)
 | |
|         {
 | |
|             return new SearcherItemCollectionEquivalentConstraint(expected);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     class SearcherItemCollectionEquivalentConstraint : CollectionItemsEqualConstraint
 | |
|     {
 | |
|         readonly List<SearcherItem> m_Expected;
 | |
| 
 | |
|         public SearcherItemCollectionEquivalentConstraint(IEnumerable<SearcherItem> expected)
 | |
|             : base(expected)
 | |
|         {
 | |
|             m_Expected = expected.ToList();
 | |
|         }
 | |
| 
 | |
|         protected override bool Matches(IEnumerable actual)
 | |
|         {
 | |
|             if (m_Expected == null)
 | |
|             {
 | |
|                 Description = "Expected is not a valid collection";
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             if (!(actual is IEnumerable<SearcherItem> actualCollection))
 | |
|             {
 | |
|                 Description = "Actual is not a valid collection";
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             var actualList = actualCollection.ToList();
 | |
|             if (actualList.Count != m_Expected.Count)
 | |
|             {
 | |
|                 Description = $"Collections lengths are not equal. \nExpected length: {m_Expected.Count}, " +
 | |
|                     $"\nBut was: {actualList.Count}";
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             for (var i = 0; i < m_Expected.Count; ++i)
 | |
|             {
 | |
|                 var res1 = m_Expected[i].Name;
 | |
|                 var res2 = actualList[i].Name;
 | |
|                 if (!string.Equals(res1, res2))
 | |
|                 {
 | |
|                     Description = $"Object at index {i} are not the same.\nExpected: {res1},\nBut was: {res2}";
 | |
|                     return false;
 | |
|                 }
 | |
| 
 | |
|                 var constraint = new SearcherItemCollectionEquivalentConstraint(m_Expected[i].Children);
 | |
|                 if (constraint.Matches(actualList[i].Children))
 | |
|                     continue;
 | |
| 
 | |
|                 Description = constraint.Description;
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| }
 |