示例#1
0
        public async Task When_Index_Invalid_IndexNotFoundException_Thrown(int index)
        {
            var bytes = new byte[]
            {
                0x18, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40,
                0x15, 0xfb, 0x22, 0x64, 0x3e, 0x29, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x05, 0x22, 0x62, 0x61, 0x72, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            };

            var specs = new LookupInSpecBuilder().Get("foo").Exists("bar").Specs;

            var op = new MultiLookup <byte[]>("thekey", specs);

            op.OperationBuilderPool = new DefaultObjectPool <OperationBuilder>(new OperationBuilderPoolPolicy());
            await op.SendAsync(new Mock <IConnection>().Object).ConfigureAwait(false);

            op.Read(new FakeMemoryOwner <byte>(bytes));

            var result = new LookupInResult(op.GetCommandValues(), 0, TimeSpan.FromHours(1), new DefaultSerializer());

            Assert.Throws <InvalidIndexException>(() => result.ContentAs <string>(index));
            var value = result.ContentAs <string>(0);

            Assert.Equal("bar", value);
        }
示例#2
0
        public async Task ContentAs_WhenPathNotFound_ThrowsPathNotFoundException()
        {
            var bytes = new byte[]
            {
                0x18, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40,
                0x15, 0xfb, 0x22, 0x64, 0x3e, 0x29, 0x00, 0x00, 0x02, 0x00, 0x0a,

                // Index 0 = Success
                0x00, 0x00,
                // Spec Body Length = 5
                0x00, 0x00, 0x00, 0x05,
                // "bar"
                0x22, 0x62, 0x61, 0x72, 0x22,

                // Index 1 = SubDocPathNotFound
                0x00, 0xc0,
                // Spec Body Length = 0
                0x00, 0x00, 0x00, 0x00
            };

            var specs = new LookupInSpecBuilder().Get("foo").Get("bar").Specs;

            var op = new MultiLookup <byte[]>("thekey", specs);

            op.OperationBuilderPool = new DefaultObjectPool <OperationBuilder>(new OperationBuilderPoolPolicy());
            await op.SendAsync(new Mock <IConnection>().Object).ConfigureAwait(false);

            op.Read(new FakeMemoryOwner <byte>(bytes));

            var result = new LookupInResult(op.GetCommandValues(), 0, TimeSpan.FromHours(1), new DefaultSerializer());

            Assert.Throws <PathNotFoundException>(() => result.ContentAs <string>(1));
        }
示例#3
0
        public void SubDoc_XAttr_Can_Come_Out_Of_Order()
        {
            var builder = new LookupInSpecBuilder();

            builder.Get("doc.path", isXattr: true)
            .Get("notXattr", false)
            .Get("path", isXattr: true);
            builder.Specs.ToArray();
        }
示例#4
0
        public void SubDoc_More_Than_One_XAttr_Is_Allowed()
        {
            var builder = new LookupInSpecBuilder();

            builder.Get("doc.path", isXattr: true)
            .Get("path", isXattr: true)
            .Get("notXattr", false);
            builder.Specs.ToArray();
        }
        public void Count_WithExpression_AddsSpec()
        {
            // Arrange

            var builder = new LookupInSpecBuilder <MyDoc>(new DefaultSerializer());

            // Act

            builder.Count(p => p.Array);

            // Assert

            var spec = Assert.Single(builder.Specs);

            Assert.NotNull(spec);
            Assert.Equal("`array`", spec.Path);
            Assert.Equal(OpCode.SubGetCount, spec.OpCode);
        }
        public void Exists_WithExpression_AddsSpec()
        {
            // Arrange

            var builder = new LookupInSpecBuilder <MyDoc>(new DefaultSerializer());

            // Act

            builder.Exists(p => p.Prop);

            // Assert

            var spec = Assert.Single(builder.Specs);

            Assert.NotNull(spec);
            Assert.Equal("`prop`", spec.Path);
            Assert.Equal(OpCode.SubExist, spec.OpCode);
        }
        public void Get_WithDynamicExpression_AddsSpec()
        {
            // Arrange

            var builder = new LookupInSpecBuilder <MyDoc>(new DefaultSerializer());

            // Act

            builder.Get(p => p.Dynamic);

            // Assert

            var spec = Assert.Single(builder.Specs);

            Assert.NotNull(spec);
            Assert.Equal("`dynamic`", spec.Path);
            Assert.Equal(OpCode.SubGet, spec.OpCode);
        }