public void Fail_MalformedPath_MutableProperty()
        {
            Attr1 attr = new Attr1 {
                Path = "%bad"
            };

            Assert.Throws <InvalidOperationException>(() => new AttributeCloner <Attr1>(attr, EmptyContract));
        }
        public void Fail_MissingPath()
        {
            Attr1 attr = new Attr1 {
                Path = "%missing%"
            };

            Assert.Throws <InvalidOperationException>(() => new AttributeCloner <Attr1>(attr, EmptyContract));
        }
        public void BindingContractMismatch()
        {
            Attr1 a1 = new Attr1 { Path = "{name}" };

            try
            {
                var cloner = new AttributeCloner<Attr1>(a1, EmptyContract);
                Assert.True(false, "Should have caught binding contract mismatch");
            }
            catch (InvalidOperationException e)
            {
                Assert.Equal("No binding parameter exists for 'name'.", e.Message);
            }
        }
        public async Task InvokeString()
        {
            Attr1 a1 = new Attr1 { Path = "%test%" };

            Assert.Null(a1 as IAttributeInvokeDescriptor<Attr1>); // Does not implement the interface

            var nameResolver = new FakeNameResolver();
            nameResolver._dict["test"] = "ABC";

            var cloner = new AttributeCloner<Attr1>(a1, EmptyContract, nameResolver);
            Attr1 attr2 = await cloner.ResolveFromInvokeStringAsync("xy");

            Assert.Equal("xy", attr2.Path);
        }
        public void BindingContractMismatch()
        {
            Attr1 a1 = new Attr1 {
                Path = "{name}"
            };

            try
            {
                var cloner = new AttributeCloner <Attr1>(a1, EmptyContract);
                Assert.True(false, "Should have caught binding contract mismatch");
            }
            catch (InvalidOperationException e)
            {
                Assert.Equal("No binding parameter exists for 'name'.", e.Message);
            }
        }
        public void BindingContractMismatch()
        {
            Attr1 a1 = new Attr1 {
                Path = "{name}"
            };

            try
            {
                var cloner = new AttributeCloner <Attr1>(a1, emptyContract);
                Assert.True(false, "Should have caught binding contract mismatch");
            }
            catch (InvalidOperationException e)
            {
                Assert.Equal(string.Format(CultureInfo.CurrentCulture, Constants.UnableToResolveBindingParameterFormat, "name"), e.Message);
            }
        }
        public async Task InvokeString()
        {
            Attr1 a1 = new Attr1 {
                Path = "%test%"
            };

            Assert.Null(a1 as IAttributeInvokeDescriptor <Attr1>); // Does not implement the interface

            var nameResolver = new FakeNameResolver();

            nameResolver._dict["test"] = "ABC";

            var   cloner = new AttributeCloner <Attr1>(a1, EmptyContract, nameResolver);
            Attr1 attr2  = await cloner.ResolveFromInvokeString("xy");

            Assert.Equal("xy", attr2.Path);
        }
Beispiel #8
0
        public void BindingContractMismatch()
        {
            Attr1 a1 = new Attr1 {
                Path = "{name}"
            };

            try
            {
                var cloner = new AttributeCloner <Attr1>(a1, emptyContract, _emptyConfig);
                Assert.True(false, "Should have caught binding contract mismatch");
            }
            catch (InvalidOperationException e)
            {
                string expectedError = "Unable to resolve binding parameter 'name'. Binding expressions must map to either a value provided by the trigger or a property of the value the trigger is bound to, or must be a system binding expression (e.g. sys.randguid, sys.utcnow, etc.).";
                Assert.Equal(expectedError, e.Message);
            }
        }
        public async Task Easy()
        {
            Attr1 a1 = new Attr1 {
                Path = "{key1}-{key2}"
            };

            Dictionary <string, object> values = new Dictionary <string, object>()
            {
                { "key1", "val1" },
                { "key2", "val2" }
            };
            var ctx = GetCtx(values);

            var cloner = new AttributeCloner <Attr1>(a1, GetBindingContract("key1", "key2"));
            var attr2  = await cloner.ResolveFromBindingData(ctx);

            Assert.Equal("val1-val2", attr2.Path);
        }
        public void Easy()
        {
            Attr1 a1 = new Attr1 {
                Path = "{request.headers.authorization}-{key2}"
            };

            Dictionary <string, object> values = new Dictionary <string, object>()
            {
                { "request", new {
                      headers = new {
                          authorization = "ey123"
                      }
                  } },
                { "key2", "val2" }
            };
            var ctx = GetCtx(values);

            var cloner = new AttributeCloner <Attr1>(a1, GetBindingContract("request", "key2"));
            var attr2  = cloner.ResolveFromBindingData(ctx);

            Assert.Equal("ey123-val2", attr2.Path);
        }
        public async Task NameResolver()
        {
            Attr1 a1 = new Attr1 {
                Path = "x%appsetting%y-{k}"
            };

            var nameResolver = new FakeNameResolver().Add("appsetting", "ABC");
            var cloner       = new AttributeCloner <Attr1>(a1, GetBindingContract("k"), nameResolver);

            // Get the attribute with %% resolved (happens at indexing time), but not {} (not resolved until runtime)
            var attrPre = cloner.GetNameResolvedAttribute();

            Assert.Equal("xABCy-{k}", attrPre.Path);

            Dictionary <string, object> values = new Dictionary <string, object>()
            {
                { "k", "v" }
            };
            var ctx   = GetCtx(values);
            var attr2 = await cloner.ResolveFromBindingData(ctx);

            Assert.Equal("xABCy-v", attr2.Path);
        }
        public void Fail_MissingPath()
        {
            Attr1 attr = new Attr1 { Path = "%missing%" };

            Assert.Throws<InvalidOperationException>(() => new AttributeCloner<Attr1>(attr, EmptyContract));
        }
        public void Fail_MalformedPath_MutableProperty()
        {
            Attr1 attr = new Attr1 { Path = "%bad" };

            Assert.Throws<InvalidOperationException>(() => new AttributeCloner<Attr1>(attr, EmptyContract));
        }
        public async Task Easy()
        {
            Attr1 a1 = new Attr1 { Path = "{key1}-{key2}" };

            Dictionary<string, object> values = new Dictionary<string, object>()
            {
                { "key1", "val1" },
                { "key2", "val2" }
            };
            var ctx = GetCtx(values);

            var cloner = new AttributeCloner<Attr1>(a1, GetBindingContract("key1", "key2"));
            var attr2 = await cloner.ResolveFromBindingDataAsync(ctx);

            Assert.Equal("val1-val2", attr2.Path);
        }
        public async Task NameResolver()
        {
            Attr1 a1 = new Attr1 { Path = "x%appsetting%y-{k}" };

            var nameResolver = new FakeNameResolver().Add("appsetting", "ABC");
            var cloner = new AttributeCloner<Attr1>(a1, GetBindingContract("k"), nameResolver);

            // Get the attribute with %% resolved (happens at indexing time), but not {} (not resolved until runtime)
            var attrPre = cloner.GetNameResolvedAttribute();
            Assert.Equal("xABCy-{k}", attrPre.Path);

            Dictionary<string, object> values = new Dictionary<string, object>()
            {
                { "k", "v" }
            };
            var ctx = GetCtx(values);
            var attr2 = await cloner.ResolveFromBindingDataAsync(ctx);

            Assert.Equal("xABCy-v", attr2.Path);
        }