public void TypeCodesMatch() { var wellKnownTypes = WellKnownTypes.FromCompilation(this.compilation); foreach (var(type, symbol) in GetTypeSymbolPairs(nameof(Grains))) { this.output.WriteLine($"Type: {RuntimeTypeNameFormatter.Format(type)}"); { // First check Type.FullName matches. var expected = type.FullName; var actual = RoslynTypeNameFormatter.Format(symbol, RoslynTypeNameFormatter.Style.FullName); this.output.WriteLine($"Expected FullName: {expected}\nActual FullName: {actual}"); Assert.Equal(expected, actual); } { var expected = TypeUtils.GetTemplatedName( TypeUtils.GetFullName(type), type, type.GetGenericArguments(), t => false); var named = Assert.IsAssignableFrom <INamedTypeSymbol>(symbol); var actual = OrleansLegacyCompat.FormatTypeForIdComputation(named); this.output.WriteLine($"Expected format: {expected}\nActual format: {actual}"); Assert.Equal(expected, actual); } { var expected = GrainInterfaceUtils.GetGrainInterfaceId(type); var named = Assert.IsAssignableFrom <INamedTypeSymbol>(symbol); var actual = wellKnownTypes.GetTypeId(named); this.output.WriteLine($"Expected Id: 0x{expected:X}\nActual Id: 0x{actual:X}"); Assert.Equal(expected, actual); } } }
public void MethodIdsMatch() { var wellKnownTypes = WellKnownTypes.FromCompilation(this.compilation); foreach (var(type, typeSymbol) in GetTypeSymbolPairs(nameof(Grains))) { this.output.WriteLine($"Type: {RuntimeTypeNameFormatter.Format(type)}"); var methods = type.GetMethods(); var methodSymbols = methods.Select(m => typeSymbol.GetMembers(m.Name).SingleOrDefault()).OfType <IMethodSymbol>(); foreach (var(method, methodSymbol) in methods.Zip(methodSymbols, ValueTuple.Create)) { this.output.WriteLine($"IMethodSymbol: {methodSymbol}, MethodInfo: {method}"); Assert.NotNull(methodSymbol); { var expected = GrainInterfaceUtils.FormatMethodForIdComputation(method); var actual = OrleansLegacyCompat.FormatMethodForMethodIdComputation(methodSymbol); this.output.WriteLine($"Expected format: {expected}\nActual format: {actual}"); Assert.Equal(expected, actual); } { var expected = GrainInterfaceUtils.ComputeMethodId(method); var actual = wellKnownTypes.GetMethodId(methodSymbol); this.output.WriteLine($"Expected Id: 0x{expected:X}\nActual Id: 0x{actual:X}"); Assert.Equal(expected, actual); } } } }
public void TypeKeyMatchesRuntimeTypeKey() { foreach (var(type, symbol) in GetTypeSymbolPairs(nameof(Types))) { var expectedTypeKey = TypeUtilities.OrleansTypeKeyString(type); var actualTypeKey = OrleansLegacyCompat.OrleansTypeKeyString(symbol); this.output.WriteLine($"Type: {RuntimeTypeNameFormatter.Format(type)}"); Assert.Equal(expectedTypeKey, actualTypeKey); } }