public static TranslationContext Create(Expression expression, IBsonSerializer serializer)
        {
            var symbolTable              = new SymbolTable();
            var nameGenerator            = new NameGenerator();
            var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(expression, (IBsonDocumentSerializer)serializer);

            return(new TranslationContext(symbolTable, nameGenerator, knownSerializersRegistry));
        }
Exemplo n.º 2
0
        public void Conditional_expression_with_different_enum_representations_should_throw()
        {
            Expression <Func <C, E> > expression = x => x.Ei == E.A ? E.B : x.Es;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var conditionalExpression = (ConditionalExpression)expression.Body;

            Assert.Throws <InvalidOperationException>(() => result.GetSerializer(conditionalExpression.IfTrue));
        }
Exemplo n.º 3
0
        public void Identity_expression_should_return_collection_serializer()
        {
            Expression <Func <C, C> > expression = x => x;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var serializer = result.GetSerializer(expression.Body);

            serializer.Should().Be(collectionSerializer);
        }
Exemplo n.º 4
0
        public void Enum_property_expression_should_return_enum_serializer_with_int_representation()
        {
            Expression <Func <C, E> > expression = x => x.Ei;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var serializer = result.GetSerializer(expression.Body);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.Ei), out var expectedPropertySerializationInfo).Should().BeTrue();
            serializer.Should().Be(expectedPropertySerializationInfo.Serializer);
        }
        public static TranslationContext Create(Expression expression, IBsonSerializer serializer, TranslationContextData data = null)
        {
            var symbolTable   = new SymbolTable();
            var nameGenerator = new NameGenerator();

            if (serializer is ISetWindowFieldsPartitionSerializer partitionSerializer)
            {
                serializer = partitionSerializer.InputSerializer; // maybe this logic belongs in KnownSerializerFinder
            }
            var knownSerializersRegistry = KnownSerializerFinder.FindKnownSerializers(expression, (IBsonDocumentSerializer)serializer);

            return(new TranslationContext(symbolTable, nameGenerator, knownSerializersRegistry, data));
        }
Exemplo n.º 6
0
        public void Property_chain_should_return_correct_nested_serializer()
        {
            Expression <Func <C, B> > expression = x => x.A.B;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var serializer = result.GetSerializer(expression.Body);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.A), out var aSerializationInfo).Should().BeTrue();
            ((BsonClassMapSerializer <A>)aSerializationInfo.Serializer).TryGetMemberSerializationInfo(nameof(A.B), out var bSerializationInfo).Should().BeTrue();
            serializer.Should().Be(bSerializationInfo.Serializer);
        }
Exemplo n.º 7
0
        public void Conditional_expression_should_return_enum_serializer_with_string_representation()
        {
            Expression <Func <C, E> > expression = x => x.Es == E.A ? E.B : x.Es;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var conditionalExpression = (ConditionalExpression)expression.Body;
            var serializer            = result.GetSerializer(conditionalExpression.IfTrue);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.Es), out var expectedPropertySerializationInfo).Should().BeTrue();
            serializer.Should().Be(expectedPropertySerializationInfo.Serializer);
        }
Exemplo n.º 8
0
        public void Enum_comparison_expression_should_return_enum_serializer_with_string_representation()
        {
            Expression <Func <C, bool> > expression = x => x.Es == E.A;
            var collectionSerializer = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var equalsExpression = (BinaryExpression)expression.Body;
            var serializer       = result.GetSerializer(equalsExpression.Right);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.Es), out var expectedPropertySerializationInfo).Should().BeTrue();
            serializer.Should().Be(expectedPropertySerializationInfo.Serializer);
        }
Exemplo n.º 9
0
        public void Projection_into_new_type_should_return_correct_serializer()
        {
            Expression <Func <C, View> > expression = x => new View {
                A = x.A
            };
            var collectionSerializer = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var serializer = result.GetSerializer(expression.Body);

            serializer.Should().BeOfType <BsonClassMapSerializer <View> >();
            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.A), out var caSerializationInfo).Should().BeTrue();
            ((BsonClassMapSerializer <View>)serializer).TryGetMemberSerializationInfo(nameof(View.A), out var viewaSerializationInfo).Should().BeTrue();
            viewaSerializationInfo.Serializer.Should().Be(caSerializationInfo.Serializer);
        }
Exemplo n.º 10
0
        public void Two_property_chains_should_each_return_correct_nested_serializer()
        {
            Expression <Func <C, E> > expression = x => x.A.B == null ? x.Ei : x.Es;
            var collectionSerializer             = GetCollectionSerializer();

            var result = KnownSerializerFinder.FindKnownSerializers(expression, collectionSerializer);

            var conditionalExpression = (ConditionalExpression)expression.Body;
            var trueBranchSerializer  = result.GetSerializer(conditionalExpression.IfTrue);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.Ei), out var eiSerializationInfo).Should().BeTrue();
            trueBranchSerializer.Should().Be(eiSerializationInfo.Serializer);
            var falseBranchSerializer = result.GetSerializer(conditionalExpression.IfFalse);

            collectionSerializer.TryGetMemberSerializationInfo(nameof(C.Es), out var esSerializationInfo).Should().BeTrue();
            falseBranchSerializer.Should().Be(esSerializationInfo.Serializer);
        }