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); }
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); }