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);
                }
            }
        }
Esempio n. 2
0
        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);
     }
 }