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; | ||
|  |         } | ||
|  |     } | ||
|  | } |