コード例 #1
0
        public void Should_read_name_when_trie_holds_a_longer_version_of_the_name()
        {
            var trie = new BsonTrie<int>();
            trie.Add("longer", 10);

            Assert(trie, "long");
        }
コード例 #2
0
        public void Should_read_name_when_trie_knows_about_the_name()
        {
            var trie = new BsonTrie<int>();
            trie.Add("known", 10);

            Assert(trie, "known");
        }
コード例 #3
0
        public void Should_read_name_when_trie_does_not_know_about_the_name()
        {
            var trie = new BsonTrie<int>();
            trie.Add("known", 10);

            Assert(trie, "different");
        }
コード例 #4
0
        // constructors
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializerHelper"/> class.
        /// </summary>
        /// <param name="members">The members.</param>
        public SerializerHelper(params Member[] members)
        {
            if (members == null)
            {
                throw new ArgumentNullException("members");
            }
            if (members.Length > 64)
            {
                throw new ArgumentException("SerializerHelper supports a maximum of 64 members.", "members");
            }

            _members = members;
            _trie    = new BsonTrie <long>();

            foreach (var member in members)
            {
                _allMemberFlags |= member.Flag;
                if (!member.IsOptional)
                {
                    _requiredMemberFlags |= member.Flag;
                }

                if (member.ElementName == "*")
                {
                    _extraMemberFlag = member.Flag;
                }
                else
                {
                    _trie.Add(member.ElementName, member.Flag);
                }
            }
        }
コード例 #5
0
        // constructors
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializerHelper"/> class.
        /// </summary>
        /// <param name="members">The members.</param>
        public SerializerHelper(params Member[] members)
        {
            if (members == null)
            {
                throw new ArgumentNullException("members");
            }
            if (members.Length > 64)
            {
                throw new ArgumentException("SerializerHelper supports a maximum of 64 members.", "members");
            }

            _members = members;
            _trie = new BsonTrie<long>();

            foreach (var member in members)
            {
                _allMemberFlags |= member.Flag;
                if (!member.IsOptional)
                {
                    _requiredMemberFlags |= member.Flag;
                }

                if (member.ElementName == "*")
                {
                    _extraMemberFlag = member.Flag;
                }
                else
                {
                    _trie.Add(member.ElementName, member.Flag);
                }
            }
        }
コード例 #6
0
        public void Should_read_name_when_trie_knows_about_the_name()
        {
            var trie = new BsonTrie <int>();

            trie.Add("known", 10);

            Assert(trie, "known");
        }
コード例 #7
0
        public void Should_read_name_when_trie_holds_a_longer_version_of_the_name()
        {
            var trie = new BsonTrie <int>();

            trie.Add("longer", 10);

            Assert(trie, "long");
        }
コード例 #8
0
        public void Should_read_name_when_trie_does_not_know_about_the_name()
        {
            var trie = new BsonTrie <int>();

            trie.Add("known", 10);

            Assert(trie, "different");
        }
コード例 #9
0
        // private static methods
        /// <summary>
        /// Builds the bson decoding trie.
        /// </summary>
        /// <returns>A BsonTrie.</returns>
        private static BsonTrie <bool> BuildBsonTrie()
        {
            var bsonTrie = new BsonTrie <bool>();

            bsonTrie.Add("k", true); // is key
            bsonTrie.Add("v", false);
            return(bsonTrie);
        }
コード例 #10
0
        private void Assert(BsonTrie <int> trie, string name)
        {
            var subject = new TrieNameDecoder <int>(trie);

            using (var memoryStream = new MemoryStream())
                using (var bsonStream = new BsonStreamAdapter(memoryStream))
                {
                    bsonStream.WriteCString(name);
                    bsonStream.WriteInt32(20);
                    bsonStream.Position = 0;

                    var result = subject.Decode(bsonStream, Utf8Encodings.Strict);

                    result.Should().Be(name);
                }
        }
コード例 #11
0
        private void Assert(BsonTrie<int> trie, string name)
        {
            var subject = new TrieNameDecoder<int>(trie);

            using (var memoryStream = new MemoryStream())
            using (var bsonStream = new BsonStreamAdapter(memoryStream))
            {
                bsonStream.WriteCString(name);
                bsonStream.WriteInt32(20);
                bsonStream.Position = 0;

                var result = subject.Decode(bsonStream, Utf8Encodings.Strict);

                result.Should().Be(name);
            }
        }
コード例 #12
0
        private void Assert(BsonTrie <int> trie, string name, bool found, int value)
        {
            // test multiple calls to the same TrieDecoder instance
            var subject = new TrieNameDecoder <int>(trie);

            // 1st pass: assert calling test's expectation
            Assert(name, subject, found, value);

            // 2rd pass: assert calling test's expectation once again
            Assert(name, subject, found, value);

            // 3rd pass: different value in stream --> assert "found: false" and "value: default"
            Assert("doesn't exist in trie", subject, false, default);

            // 4th pass: assert calling test's expectation once again
            Assert(name, subject, found, value);
        }