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); } } }
private static MemberDeclarationSyntax GeneratePopulateMethod(WellKnownTypes wellKnownTypes, SerializationTypeDescriptions typeDescriptions) { var interfaceMethod = wellKnownTypes.IFeaturePopulator_1.Construct(wellKnownTypes.SerializerFeature).Method("Populate"); var featureParameter = interfaceMethod.Parameters.First().Name.ToIdentifierName(); var bodyStatements = new List <StatementSyntax>(); foreach (var serializerType in typeDescriptions.SerializerTypes) { if (serializerType.SerializerTypeSyntax == null) { continue; } var overrideExisting = serializerType.OverrideExistingSerializer ? SyntaxKind.TrueLiteralExpression : SyntaxKind.FalseLiteralExpression; bodyStatements.Add( ExpressionStatement( InvocationExpression(featureParameter.Member("AddSerializerType")) .AddArgumentListArguments( Argument(TypeOfExpression(serializerType.Target.WithoutTypeParameters().ToTypeSyntax())), Argument(TypeOfExpression(serializerType.SerializerTypeSyntax)), Argument(LiteralExpression(overrideExisting))))); } foreach (var knownType in typeDescriptions.KnownTypes) { bodyStatements.Add( ExpressionStatement( InvocationExpression(featureParameter.Member("AddKnownType")) .AddArgumentListArguments( Argument(RoslynTypeNameFormatter.Format(knownType.Type, RoslynTypeNameFormatter.Style.RuntimeTypeNameFormatter).ToLiteralExpression()), Argument(knownType.TypeKey.ToLiteralExpression())))); } return(interfaceMethod.GetDeclarationSyntax().AddBodyStatements(bodyStatements.ToArray())); }
public void FullNameMatchesClr() { foreach (var(type, symbol) in GetTypeSymbolPairs(nameof(Types))) { this.output.WriteLine($"Type: {RuntimeTypeNameFormatter.Format(type)}"); 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); } }