public void ShouldDeserializeNameFromFormat2() { const string json = "{\"type\":\"CSharp.AssemblyName\",\"id\":\"MyAssembly, 1.2.3.4\"}"; var expected = Names.Assembly("MyAssembly, 1.2.3.4"); JsonAssert.DeserializesTo(json, expected); }
public void ShouldDeserializeNameFromFormat3() { const string json = "\"CSharp.AssemblyName:MyAssembly, 1.2.3.4\""; var expected = Names.Assembly("MyAssembly, 1.2.3.4"); JsonAssert.DeserializesTo(json, expected); }
public void CorrectInitializationAndNonNull() { AssertInit(Names.General("x"), typeof(GeneralName)); AssertInit(Names.Alias("x"), typeof(AliasName)); AssertInit(Names.Event("x"), typeof(EventName)); AssertInit(Names.Field("x"), typeof(FieldName)); AssertInit(Names.Lambda("x"), typeof(LambdaName)); AssertInit(Names.LocalVariable("x"), typeof(LocalVariableName)); AssertInit(Names.Method("[?] [?].M()"), typeof(MethodName)); AssertInit(Names.Parameter("[?] p"), typeof(ParameterName)); AssertInit(Names.Property("get [?] [?].P()"), typeof(PropertyName)); AssertInit(Names.CommandBarControl("x"), typeof(CommandBarControlName)); AssertInit(Names.Command("x"), typeof(CommandName)); AssertInit(Names.Document("x y"), typeof(DocumentName)); AssertInit(Names.ProjectItem("x y"), typeof(ProjectItemName)); AssertInit(Names.Project("x y"), typeof(ProjectName)); AssertInit(Names.Solution("x"), typeof(SolutionName)); AssertInit(Names.Window("x y"), typeof(WindowName)); AssertInit(Names.ReSharperLiveTemplate("x:y"), typeof(ReSharperLiveTemplateName)); AssertInit(Names.Assembly("x"), typeof(AssemblyName)); AssertInit(Names.AssemblyVersion("1.2.3.4"), typeof(AssemblyVersion)); AssertInit(Names.Namespace("x"), typeof(NamespaceName)); AssertInit(Names.Type("T,P"), typeof(TypeName)); AssertInit(Names.Type("T"), typeof(TypeParameterName)); AssertInit(Names.Type("T[],P"), typeof(ArrayTypeName)); AssertInit(Names.Type("d:[?] [?].()"), typeof(DelegateTypeName)); AssertInit(Names.Type("p:int"), typeof(PredefinedTypeName)); }
public void PropRef() { var b1 = CreateContextWithSSTAndMethodBody( RefStmt( new PropertyReference { PropertyName = Names.Property( "get [T`1[[T -> p:double]],P] [D`1[[T -> p:double]],A,1.2.3.4].P()") })); var b2 = CreateContextWithSSTAndMethodBody( RefStmt( new PropertyReference { PropertyName = Names.Property("get [T`1[[T -> p:float]],P] [D`1[[T -> p:float]],A,1.2.3.4].P()") } )); var actual = Extract(b1, b2); Assert.AreEqual(0, actual.NumAsmCalls); Assert.AreEqual( Sets.NewHashSet(Names.Property("get [T`1[[T]],P] [D`1[[T]],A,1.2.3.4].P()")), actual.UniqueAsmProperties); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
public void ShouldAnonymizeAssemblyIfEnclosingProject() { var original = Names.Assembly("MyProject"); var expected = Names.Assembly("zRLpydQJBMrk8DCiP3BwEQ=="); AssertAnonymizedEquals(original, expected); }
public void ReturnsEmptyTypeListIfAssemblyDoesNotExist() { var assemblyName = Names.Assembly("SomeOtherAssembly, 0.0.0.0"); var typeNames = _uut.OpenAssembly(assemblyName); var expected = Sets.NewHashSet <ITypeName>(); Assert.AreEqual(expected, typeNames); }
public void Equality_DifferentUniqueAssemblies() { var a = new ContextStatistics { UniqueAssemblies = { Names.Assembly("A,1.2.3.4") } }; var b = new ContextStatistics(); Assert.AreNotEqual(a, b); Assert.AreNotEqual(a.GetHashCode(), b.GetHashCode()); }
public void ReturnsAllAssemblies() { var allAssemblies = _uut.GetAllAssemblies(); var expected = Sets.NewHashSet( Names.Assembly("Assembly1, 0.0.0.0"), Names.Assembly("Assembly2, 0.0.0.0"), Names.Assembly("Assembly3, 0.0.0.0") ); Assert.AreEqual(expected, allAssemblies); }
public void ReturnsAllTypesInAssembly() { var assemblyName = Names.Assembly("Assembly1, 0.0.0.0"); var typeNames = _uut.OpenAssembly(assemblyName); var expected = Sets.NewHashSet( GetTypeName("T1", "Assembly1"), GetTypeName("T2", "Assembly1"), GetTypeName("T3", "Assembly1") ); Assert.AreEqual(expected, typeNames); }
public void ShouldCountFieldRefsAndRegisterAssembly() { var actual = Extract( CreateContextWithSSTAndMethodBody( Stmt(RefExpr(new FieldReference { FieldName = Names.Field("[p:int] [T,A,1.2.3.4]._f") })))); Assert.AreEqual(1, actual.NumAsmFieldRead); Assert.AreEqual(Sets.NewHashSet(Names.Field("[p:int] [T,A,1.2.3.4]._f")), actual.UniqueAsmFields); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
public void ShouldCountMethodRefsAndRegisterAssembly() { var actual = Extract( CreateContextWithSSTAndMethodBody( Stmt(RefExpr(new MethodReference { MethodName = Names.Method("[p:void] [T,A,1.2.3.4].M()") })))); Assert.AreEqual(0, actual.NumUnknownInvocations); Assert.AreEqual(0, actual.NumAsmCalls); Assert.AreEqual(Sets.NewHashSet(Names.Method("[p:void] [T,A,1.2.3.4].M()")), actual.UniqueAsmMethods); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
public void MethodCalls() { var b1 = CreateContextWithSSTAndMethodBody( InvStmt("[T`1[[T -> p:double]],P] [D`1[[T -> p:double]],A,1.2.3.4].M()")); var b2 = CreateContextWithSSTAndMethodBody( InvStmt("[T`1[[T -> p:float]],P] [D`1[[T -> p:float]],A,1.2.3.4].M()")); var actual = Extract(b1, b2); Assert.AreEqual(2, actual.NumAsmCalls); Assert.AreEqual( Sets.NewHashSet(Names.Method("[T`1[[T]],P] [D`1[[T]],A,1.2.3.4].M()")), actual.UniqueAsmMethods); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
private static bool ShouldInclude(IMethodName name) { if (Names.UnknownMethod.Equals(name)) { return(false); } var mscorlib = Names.Assembly("mscorlib, 4.0.0.0"); var actualLib = name.DeclaringType.Assembly; if (!mscorlib.Equals(actualLib)) { return(false); } return(true); }
public void IncludesAllDependencies() { CollectionAssert.IsSubsetOf( new[] { Names.Assembly("System, 4.0.0.0"), Names.Assembly("System.Core, 4.0.0.0"), Names.Assembly("System.Xml.Linq, 4.0.0.0"), Names.Assembly("System.Data.DataSetExtensions, 4.0.0.0"), Names.Assembly("Microsoft.CSharp, 4.0.0.0"), Names.Assembly("System.Data, 4.0.0.0"), Names.Assembly("System.Xml, 4.0.0.0"), Names.Assembly("mscorlib, 4.0.0.0"), Names.Assembly("Newtonsoft.Json, 6.0.0.0") }, AssemblyNames); }
public ISet <IAssemblyName> GetAllAssemblies() { var files = Directory.EnumerateFiles(_path); var zipFiles = files.Where(s => s.EndsWith(".zip")); var result = Sets.NewHashSet <IAssemblyName>(); foreach (var zipFile in zipFiles) { var assemblyFileName = Path.GetFileNameWithoutExtension(zipFile); if (assemblyFileName != null) { var assemblyNameStrings = assemblyFileName.Split('-'); var assembly = Names.Assembly(assemblyNameStrings[0] + ", " + assemblyNameStrings[1]); result.Add(assembly); } } return(result); }
public void ShouldCountPropertyRefsAndRegisterAssembly() { var actual = Extract( CreateContextWithSSTAndMethodBody( Stmt( RefExpr( new PropertyReference { PropertyName = Names.Property("get set [p:int] [T,A,1.2.3.4].P()") })))); Assert.AreEqual(1, actual.NumAsmPropertyRead); Assert.AreEqual( Sets.NewHashSet(Names.Property("get set [p:int] [T,A,1.2.3.4].P()")), actual.UniqueAsmProperties); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
public void FieldRef() { var b1 = CreateContextWithSSTAndMethodBody( RefStmt( new FieldReference { FieldName = Names.Field("[T`1[[T -> p:double]],P] [D`1[[T -> p:double]],A,1.2.3.4]._f") })); var b2 = CreateContextWithSSTAndMethodBody( RefStmt( new FieldReference { FieldName = Names.Field("[T`1[[T -> p:float]],P] [D`1[[T -> p:float]],A,1.2.3.4]._f") } )); var actual = Extract(b1, b2); Assert.AreEqual(0, actual.NumAsmCalls); Assert.AreEqual( Sets.NewHashSet(Names.Field("[T`1[[T]],P] [D`1[[T]],A,1.2.3.4]._f")), actual.UniqueAsmFields); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), actual.UniqueAssemblies); }
public void Equality_SetValues() { var a = new ContextStatistics { NumRepositories = 1, NumUsers = 2, NumSolutions = 3, EstimatedLinesOfCode = 31, NumTypeDeclTopLevel = 4, NumTypeDeclNested = 5, UniqueTypeDecl = { Names.Type("T,P") }, NumPartial = 20, NumClasses = 6, NumInterfaces = 7, NumDelegates = 8, NumStructs = 9, NumEnums = 10, NumUnusualType = 111, NumTypeDeclExtendsOrImplements = 11, NumMethodDeclsTotal = 12, NumMethodDeclsOverrideOrImplement = 13, NumMethodDeclsOverrideOrImplementAsm = 21, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O1()") }, NumValidInvocations = 1311, NumUnknownInvocations = 131, UniqueAssemblies = { Names.Assembly("A,1.2.3.4") }, NumAsmCalls = 14, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].M()") }, NumAsmFieldRead = 15, UniqueAsmFields = { Names.Field("[p:int] [T,P]._f") }, NumAsmPropertyRead = 16, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].P()") } }; var b = new ContextStatistics { NumRepositories = 1, NumUsers = 2, NumSolutions = 3, EstimatedLinesOfCode = 31, NumTypeDeclTopLevel = 4, NumTypeDeclNested = 5, UniqueTypeDecl = { Names.Type("T,P") }, NumPartial = 20, NumClasses = 6, NumInterfaces = 7, NumDelegates = 8, NumStructs = 9, NumEnums = 10, NumUnusualType = 111, NumTypeDeclExtendsOrImplements = 11, NumMethodDeclsTotal = 12, NumMethodDeclsOverrideOrImplement = 13, NumMethodDeclsOverrideOrImplementAsm = 21, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O1()") }, NumValidInvocations = 1311, NumUnknownInvocations = 131, UniqueAssemblies = { Names.Assembly("A,1.2.3.4") }, NumAsmCalls = 14, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].M()") }, NumAsmFieldRead = 15, UniqueAsmFields = { Names.Field("[p:int] [T,P]._f") }, NumAsmPropertyRead = 16, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].P()") } }; Assert.AreEqual(a, b); Assert.AreEqual(a.GetHashCode(), b.GetHashCode()); }
private IAssemblyName A(int i) { return(Names.Assembly("A{0}, 1.2.3.4", i)); }
public void ShouldKeepAssemblyIfFullQualified() { var original = Names.Assembly("SomeAssembly, 1.5.6.3"); AssertAnonymizedEquals(original, original); }
private static IAssemblyName ToAnonymousName(IAssemblyName assembly) { return(assembly.IsLocalProject ? Names.Assembly(assembly.Identifier.ToHash()) : assembly); }
public void ShouldSerializeAssemblyName() { var name = Names.Assembly("AssemblyName, 0.8.15.0"); JsonAssert.SerializationPreservesReferenceIdentity(name); }
public void Integration() { var sut = new ContextStatisticsLogger(); sut.StartUp(new ContextFilter(GeneratedCode.Include, Duplication.Exclude)); sut.SearchingZips("C:\\a\\b\\"); sut.FoundZips(123); sut.StartingStatCreation(1); sut.StartingStatCreation(2); sut.CreatingStats(1, "a/b.zip"); sut.CreatingStats(1, "c.zip"); sut.CreatingStats(1, "d.zip"); sut.FinishedStatCreation(1); sut.FinishedStatCreation(2); var counts = new Dictionary <IAssemblyName, int>(); counts[Names.Assembly("A,1.2.3.4")] = 1; counts[Names.Assembly("B,1.2.3.4")] = 4; counts[Names.Assembly("D,1.2.3.4")] = 3; counts[Names.Assembly("C,1.2.3.4")] = 2; sut.Results( new ContextStatistics { NumRepositories = 1, NumUsers = 2, NumSolutions = 3, EstimatedLinesOfCode = 31, NumTypeDeclTopLevel = 4, NumTypeDeclNested = 5, UniqueTypeDecl = { Names.Type("T1,P"), Names.Type("T2,P"), Names.Type("T3,P"), Names.Type("T4,P"), Names.Type("T5,P") }, NumPartial = 20, NumClasses = 6, NumInterfaces = 7, NumDelegates = 8, NumStructs = 9, NumEnums = 10, NumUnusualType = 111, NumTypeDeclExtendsOrImplements = 11, NumMethodDeclsTotal = 12, NumMethodDeclsOverrideOrImplement = 13, NumMethodDeclsOverrideOrImplementAsm = 121, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].M1()"), Names.Method("[p:bool] [T,P].M2()"), Names.Method("[p:bool] [T,P].M3()"), Names.Method("[p:bool] [T,P].M4()"), Names.Method("[p:bool] [T,P].M5()"), Names.Method("[p:bool] [T,P].M6()") }, UniqueAssemblies = { Names.Assembly("A,1.2.3.4") }, NumAsmCalls = 14, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].M1()"), Names.Method("[p:bool] [T,P].M2()") }, NumAsmFieldRead = 15, UniqueAsmFields = { Names.Field("[p:int] [T,P]._f1"), Names.Field("[p:int] [T,P]._f2"), Names.Field("[p:int] [T,P]._f3") }, NumAsmPropertyRead = 16, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].P1()"), Names.Property("get set [p:double] [T,P].P2()"), Names.Property("get set [p:double] [T,P].P3()"), Names.Property("get set [p:double] [T,P].P4()") } }, counts); }
public void Add() { var a = new ContextStatistics { NumRepositories = 1, NumUsers = 2, NumSolutions = 3, EstimatedLinesOfCode = 31, NumTypeDeclTopLevel = 4, NumTypeDeclNested = 5, UniqueTypeDecl = { Names.Type("T,P") }, NumPartial = 20, NumClasses = 6, NumInterfaces = 7, NumDelegates = 8, NumStructs = 9, NumEnums = 10, NumUnusualType = 111, NumTypeDeclExtendsOrImplements = 11, NumMethodDeclsTotal = 12, NumMethodDeclsOverrideOrImplement = 13, NumMethodDeclsOverrideOrImplementAsm = 121, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O1()") }, NumValidInvocations = 1311, NumUnknownInvocations = 131, UniqueAssemblies = { Names.Assembly("A,1.2.3.4") }, NumAsmDelegateCalls = 141, NumAsmCalls = 14, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].MA()") }, NumAsmFieldRead = 15, UniqueAsmFields = { Names.Field("[p:int] [T,P]._fA") }, NumAsmPropertyRead = 16, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].PA()") } }; a.Add( new ContextStatistics { NumRepositories = 1 + 1, NumUsers = 2 + 1, NumSolutions = 3 + 1, EstimatedLinesOfCode = 31 + 1, NumTypeDeclTopLevel = 4 + 1, NumTypeDeclNested = 5 + 1, UniqueTypeDecl = { Names.Type("T2,P") }, NumPartial = 20 + 1, NumClasses = 6 + 1, NumInterfaces = 7 + 1, NumDelegates = 8 + 1, NumStructs = 9 + 1, NumEnums = 10 + 1, NumUnusualType = 111 + 1, NumTypeDeclExtendsOrImplements = 11 + 1, NumMethodDeclsTotal = 12 + 1, NumMethodDeclsOverrideOrImplement = 13 + 1, NumMethodDeclsOverrideOrImplementAsm = 122, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O2()") }, NumValidInvocations = 1311 + 1, NumUnknownInvocations = 131 + 1, UniqueAssemblies = { Names.Assembly("B,1.2.3.4") }, NumAsmDelegateCalls = 141 + 1, NumAsmCalls = 14 + 1, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].MB()") }, NumAsmFieldRead = 15 + 1, UniqueAsmFields = { Names.Field("[p:int] [T,P]._fB") }, NumAsmPropertyRead = 16 + 1, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].PB()") } }); var c = new ContextStatistics { NumRepositories = 1 * 2 + 1, NumUsers = 2 * 2 + 1, NumSolutions = 3 * 2 + 1, EstimatedLinesOfCode = 31 * 2 + 1, NumTypeDeclTopLevel = 4 * 2 + 1, NumTypeDeclNested = 5 * 2 + 1, UniqueTypeDecl = { Names.Type("T,P"), Names.Type("T2,P") }, NumPartial = 2 * 20 + 1, NumClasses = 6 * 2 + 1, NumInterfaces = 7 * 2 + 1, NumDelegates = 8 * 2 + 1, NumStructs = 9 * 2 + 1, NumEnums = 10 * 2 + 1, NumUnusualType = 111 * 2 + 1, NumTypeDeclExtendsOrImplements = 11 * 2 + 1, NumMethodDeclsTotal = 12 * 2 + 1, NumMethodDeclsOverrideOrImplement = 13 * 2 + 1, NumMethodDeclsOverrideOrImplementAsm = 121 * 2 + 1, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O1()"), Names.Method("[p:bool] [T,P].O2()") }, NumValidInvocations = 2 * 1311 + 1, NumUnknownInvocations = 2 * 131 + 1, UniqueAssemblies = { Names.Assembly("A,1.2.3.4"), Names.Assembly("B,1.2.3.4") }, NumAsmDelegateCalls = 2 * 141 + 1, NumAsmCalls = 14 * 2 + 1, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].MA()"), Names.Method("[p:bool] [T,P].MB()") }, NumAsmFieldRead = 15 * 2 + 1, UniqueAsmFields = { Names.Field("[p:int] [T,P]._fA"), Names.Field("[p:int] [T,P]._fB") }, NumAsmPropertyRead = 16 * 2 + 1, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].PA()"), Names.Property("get set [p:double] [T,P].PB()") } }; Assert.AreEqual(a, c); }
public void DoesNotIncludeLocalProjects() { CollectionAssert.DoesNotContain(AssemblyNames, Names.Assembly("Project1")); }
public void SetValues() { var sut = new ContextStatistics { NumRepositories = 1, NumUsers = 2, NumSolutions = 3, EstimatedLinesOfCode = 31, NumTypeDeclTopLevel = 4, NumTypeDeclNested = 5, UniqueTypeDecl = { Names.Type("T,P") }, NumPartial = 20, NumClasses = 6, NumInterfaces = 7, NumDelegates = 8, NumStructs = 9, NumEnums = 10, NumUnusualType = 111, NumTypeDeclExtendsOrImplements = 11, NumMethodDeclsTotal = 12, NumMethodDeclsOverrideOrImplement = 13, NumMethodDeclsOverrideOrImplementAsm = 21, UniqueMethodDeclsOverrideOrImplementAsm = { Names.Method("[p:bool] [T,P].O1()") }, NumValidInvocations = 1311, NumUnknownInvocations = 131, UniqueAssemblies = { Names.Assembly("A,1.2.3.4") }, NumAsmDelegateCalls = 141, NumAsmCalls = 14, UniqueAsmMethods = { Names.Method("[p:bool] [T,P].M()") }, NumAsmFieldRead = 15, UniqueAsmFields = { Names.Field("[p:int] [T,P]._f") }, NumAsmPropertyRead = 16, UniqueAsmProperties = { Names.Property("get set [p:double] [T,P].P()") } }; Assert.AreEqual(1, sut.NumRepositories); Assert.AreEqual(2, sut.NumUsers); Assert.AreEqual(3, sut.NumSolutions); Assert.AreEqual(31, sut.EstimatedLinesOfCode); Assert.AreEqual(9, sut.NumTypeDeclTotal); Assert.AreEqual(4, sut.NumTypeDeclTopLevel); Assert.AreEqual(5, sut.NumTypeDeclNested); Assert.AreEqual(20, sut.NumPartial); Assert.AreEqual(Sets.NewHashSet(Names.Type("T,P")), sut.UniqueTypeDecl); Assert.AreEqual(6, sut.NumClasses); Assert.AreEqual(7, sut.NumInterfaces); Assert.AreEqual(8, sut.NumDelegates); Assert.AreEqual(9, sut.NumStructs); Assert.AreEqual(10, sut.NumEnums); Assert.AreEqual(111, sut.NumUnusualType); Assert.AreEqual(11, sut.NumTypeDeclExtendsOrImplements); Assert.AreEqual(12, sut.NumMethodDeclsTotal); Assert.AreEqual(13, sut.NumMethodDeclsOverrideOrImplement); Assert.AreEqual(21, sut.NumMethodDeclsOverrideOrImplementAsm); Assert.AreEqual( Sets.NewHashSet(Names.Method("[p:bool] [T,P].O1()")), sut.UniqueMethodDeclsOverrideOrImplementAsm); Assert.AreEqual(1311, sut.NumValidInvocations); Assert.AreEqual(131, sut.NumUnknownInvocations); Assert.AreEqual(Sets.NewHashSet(Names.Assembly("A,1.2.3.4")), sut.UniqueAssemblies); Assert.AreEqual(141, sut.NumAsmDelegateCalls); Assert.AreEqual(14, sut.NumAsmCalls); Assert.AreEqual(Sets.NewHashSet(Names.Method("[p:bool] [T,P].M()")), sut.UniqueAsmMethods); Assert.AreEqual(15, sut.NumAsmFieldRead); Assert.AreEqual(Sets.NewHashSet(Names.Field("[p:int] [T,P]._f")), sut.UniqueAsmFields); Assert.AreEqual(16, sut.NumAsmPropertyRead); Assert.AreEqual(Sets.NewHashSet(Names.Property("get set [p:double] [T,P].P()")), sut.UniqueAsmProperties); Assert.AreNotEqual(0, sut.GetHashCode()); Assert.AreNotEqual(1, sut.GetHashCode()); }
protected static void AssertUniqueAssemblies(IContextStatistics actual, params string[] ids) { Assert.AreEqual(Sets.NewHashSetFrom(ids.Select(id => Names.Assembly(id))), actual.UniqueAssemblies); }