public void RepeaterHideRuleReferenceRootControl() { ITruthCondition condition = new HideTruthCondition { RuleType = "HIDE" }; TruthConditionList subRuleList = new TruthConditionList(); CompareDefinition compareDefinition = new CompareDefinition { CompareTo = ComparisonType.Value, Field = "Checkbox", FieldScope = FieldScope.Unknown, Operator = Operator.Equals, Value = "checked" }; subRuleList.Add(new CompareTruthCondition { RuleType = "EVAL", Value = compareDefinition }); condition.Value = subRuleList; ControlList controlList = new ControlList { new CheckboxControl { Name = "Checkbox" } }; RepeaterControl repeater = new RepeaterControl { Name = "Parent" }; repeater.AddChild(new ComboControl { Name = "Child", VisibilityRule = condition }); controlList.Add(repeater); ApplicationData applicationData = new ApplicationData { { "Checkbox", "checked" } }; Dictionary<string, object>[] repeaterValue = new Dictionary<string, object>[1]; repeaterValue[0] = new Dictionary<string, object>(); repeaterValue[0]["Child"] = string.Empty; applicationData.Add("Parent", repeaterValue); ITruthConditionEvaluator<ITruthCondition> evaluator = this.EvaluatorRegister.GetEvaluatorFor<HideTruthCondition>(); bool result = evaluator.Evaluate(condition, controlList, applicationData, null, this.EvaluatorRegister, "Parent[0]"); Assert.IsTrue(result); applicationData["Checkbox"] = string.Empty; result = evaluator.Evaluate(condition, controlList, applicationData, null, this.EvaluatorRegister, "Parent[0]"); Assert.IsFalse(result); }
public void TestControlName() { string json = AssemblyResourceReader.ReadAsString("Test_Data.ValidateRule1.json"); ValidateTruthCondition condition = JsonConvert.DeserializeObject<ValidateTruthCondition>(json); ControlList controlList = new ControlList(); RepeaterControl repeater = new RepeaterControl { Id = 3, Name = "Repeater" }; controlList.Add(repeater); repeater.Controls.Add(new TextControl { Id = 1, Name = "Field1", ParentId = 3 }); repeater.Controls.Add(new TextControl { Id = 2, Name = "Field2", ParentId = 3 }); ApplicationData appData = new ApplicationData(); Dictionary<string, object>[] repeaterData = new Dictionary<string, object>[2]; appData.Add("Repeater", repeaterData); repeaterData[0] = new Dictionary<string, object> { { "Field1", "Is Valid" }, { "Field2", "When Combined With This" } }; repeaterData[1] = new Dictionary<string, object> { { "Field1", "Not Valid" }, { "Field2", "When Combined With This" } }; TruthConditionEvaluatorFactory evaluatorFactory = new TruthConditionEvaluatorFactory(); ITruthConditionValidator validator = new ITruthConditionValidator(condition, controlList, evaluatorFactory); ValidationResults results = validator.Validate(appData); Assert.AreEqual("Repeater[1].Field1", results.ToArray()[0].Key); }
public void TestControlTypes() { TextControl textControl = new TextControl(); Assert.AreEqual(ControlType.Text, textControl.Type); ComboControl comboControl = new ComboControl(); Assert.AreEqual(ControlType.Combo, comboControl.Type); RadioControl radioControl = new RadioControl(); Assert.AreEqual(ControlType.Radio, radioControl.Type); CheckboxControl checkboxControl = new CheckboxControl(); Assert.AreEqual(ControlType.Checkbox, checkboxControl.Type); CheckboxGroupControl checkboxGroupControl = new CheckboxGroupControl(); Assert.AreEqual(ControlType.CheckboxGroup, checkboxGroupControl.Type); DateControl dateControl = new DateControl(); Assert.AreEqual(ControlType.Date, dateControl.Type); TimeControl timeControl = new TimeControl(); Assert.AreEqual(ControlType.Time, timeControl.Type); FileBrowserControl fileBrowserControl = new FileBrowserControl(); Assert.AreEqual(ControlType.FileBrowser, fileBrowserControl.Type); HiddenControl hiddenControl = new HiddenControl(); Assert.AreEqual(ControlType.Hidden, hiddenControl.Type); LabelControl labelControl = new LabelControl(); Assert.AreEqual(ControlType.Label, labelControl.Type); HtmlControl htmlControl = new HtmlControl(); Assert.AreEqual(ControlType.Html, htmlControl.Type); GroupControl groupControl = new GroupControl(); Assert.AreEqual(ControlType.Group, groupControl.Type); RepeaterControl repeaterControl = new RepeaterControl(); Assert.AreEqual(ControlType.Repeater, repeaterControl.Type); CalculationControl calculationControl = new CalculationControl(); Assert.AreEqual(ControlType.Calculation, calculationControl.Type); SignaturePadControl signaturePadControl = new SignaturePadControl(); Assert.AreEqual(ControlType.SignaturePad, signaturePadControl.Type); GeolocationControl geolocationControl = new GeolocationControl(); Assert.AreEqual(ControlType.Geolocation, geolocationControl.Type); HeadingControl headingControl = new HeadingControl(); Assert.AreEqual(ControlType.Heading, headingControl.Type); }
public void TestEmptyRepeaterBusinessRule() { string json = AssemblyResourceReader.ReadAsString("Test_Data.ValidateRule1.json"); ValidateTruthCondition condition = JsonConvert.DeserializeObject<ValidateTruthCondition>(json); ControlList controlList = new ControlList(); RepeaterControl repeater = new RepeaterControl { Id = 3, Name = "Repeater" }; controlList.Add(repeater); repeater.Controls.Add(new TextControl { Id = 1, Name = "Field1", ParentId = 3 }); repeater.Controls.Add(new TextControl { Id = 2, Name = "Field2", ParentId = 3 }); ApplicationData appData = new ApplicationData(); TruthConditionEvaluatorFactory evaluatorFactory = new TruthConditionEvaluatorFactory(); ITruthConditionValidator validator = new ITruthConditionValidator(condition, controlList, evaluatorFactory); ValidationResults results = validator.Validate(appData); Assert.AreEqual(true, results.IsValid); }
/// <summary> /// Writes the value of <paramref name="repeater"/> to the <paramref name="table"/>. /// </summary> /// <param name="table">The <see cref="MigraDoc.DocumentObjectModel.Tables.Table"/> to write to.</param> /// <param name="repeater">The control.</param> /// <param name="container">The application data container.</param> /// <param name="level">The depth down the control tree being rendered (affects indenting).</param> private void WriteValueRepeater(Table table, RepeaterControl repeater, Dictionary<string, object> container, int level) { Color backgroundColour = new Color(100 - (level * PdfConstants.AlphaMultiplier * 100), this.BorderColour.C, this.BorderColour.M, this.BorderColour.Y, this.BorderColour.K); table.AppendHeaderRow(this.DefaultStyle.Font.Size, repeater.Label, PdfResources.StyleNameHeaderRow, backgroundColour) .Format.LeftIndent = new Unit(PdfConstants.IndentMultiplier * level, UnitType.Millimeter); if (((object[])container[repeater.Name]).Length == 0) { return; } Dictionary<string, object>[] items = (Dictionary<string, object>[])container[repeater.Name]; level = level < 5 ? level + 1 : level; foreach (Dictionary<string, object> repeaterItem in items) { this.WriteValue(table, repeater.Controls, repeaterItem, level); } }
public void TestNestedRepeaterPassValueBusinessRule() { string json = AssemblyResourceReader.ReadAsString("Test_Data.ValidateRule1.json"); ValidateTruthCondition condition = JsonConvert.DeserializeObject<ValidateTruthCondition>(json); ControlList controlList = new ControlList(); RepeaterControl repeater = new RepeaterControl { Id = 3, Name = "Repeater" }; controlList.Add(repeater); RepeaterControl nestedRepeater = new RepeaterControl { Id = 4, Name = "NestedRepeater", ParentId = 3 }; repeater.Controls.Add(nestedRepeater); nestedRepeater.Controls.Add(new TextControl { Id = 1, Name = "Field1", ParentId = 4 }); nestedRepeater.Controls.Add(new TextControl { Id = 2, Name = "Field2", ParentId = 4 }); ApplicationData appData = new ApplicationData(); var validExample = new Dictionary<string, object> { { "Field1", "Is Valid" }, { "Field2", "When Combined With This" } }; var anotherValidExample = new Dictionary<string, object> { { "Field1", "And So Is This" }, { "Field2", "When Combined With This" } }; Dictionary<string, object>[] repeaterData = new Dictionary<string, object>[2]; appData.Add("Repeater", repeaterData); repeaterData[0] = new Dictionary<string, object>() { { "NestedRepeater", new[] { validExample, anotherValidExample } } }; repeaterData[1] = new Dictionary<string, object>() { { "NestedRepeater", new[] { anotherValidExample, validExample } } }; TruthConditionEvaluatorFactory evaluatorFactory = new TruthConditionEvaluatorFactory(); ITruthConditionValidator validator = new ITruthConditionValidator(condition, controlList, evaluatorFactory); ValidationResults results = validator.Validate(appData); Assert.AreEqual(true, results.IsValid); }
public void TestNestedRepeaterFailRootCompareBusinessRule() { string json = AssemblyResourceReader.ReadAsString("Test_Data.ValidateRule2.json"); ValidateTruthCondition condition = JsonConvert.DeserializeObject<ValidateTruthCondition>(json); ControlList controlList = new ControlList(); RepeaterControl repeater = new RepeaterControl { Id = 3, Name = "Repeater" }; controlList.Add(repeater); RepeaterControl nestedRepeater = new RepeaterControl { Id = 4, Name = "NestedRepeater", ParentId = 3 }; repeater.Controls.Add(nestedRepeater); RepeaterControl nestedNestedRepeater = new RepeaterControl { Id = 5, Name = "NestedNestedRepeater", ParentId = 4 }; nestedRepeater.Controls.Add(nestedNestedRepeater); nestedNestedRepeater.Controls.Add(new TextControl { Id = 1, Name = "Field1", ParentId = 5 }); // Compare to root level controlList.Add(new TextControl { Id = 2, Name = "Field2" }); var validExample = new Dictionary<string, object> { { "Field1", "Is Valid" } }; var invalidExample = new Dictionary<string, object> { { "Field1", "Is Not Valid" } }; ApplicationData appData = new ApplicationData(); Dictionary<string, object>[] repeaterData = new Dictionary<string, object>[2]; appData.Add("Field2", "Is Not Valid"); appData.Add("Repeater", repeaterData); repeaterData[0] = new Dictionary<string, object>() { { "NestedRepeater", new[] { new Dictionary<string, object>() { { "NestedNestedRepeater", new[] { invalidExample, validExample } } }, new Dictionary<string, object>() { { "NestedNestedRepeater", new[] { invalidExample, invalidExample } } }, } } }; repeaterData[1] = new Dictionary<string, object>() { { "NestedRepeater", new[] { new Dictionary<string, object>() { { "NestedNestedRepeater", new[] { invalidExample } } }, new Dictionary<string, object>() { { "NestedNestedRepeater", new[] { validExample } } }, } } }; TruthConditionEvaluatorFactory evaluatorFactory = new TruthConditionEvaluatorFactory(); ITruthConditionValidator validator = new ITruthConditionValidator(condition, controlList, evaluatorFactory); ValidationResults results = validator.Validate(appData); Assert.AreEqual(false, results.IsValid); Assert.AreEqual(4, results.Count); Assert.AreEqual("Repeater[0].NestedRepeater[0].NestedNestedRepeater[0].Field1", results.ToArray()[0].Key); Assert.AreEqual("Repeater[0].NestedRepeater[1].NestedNestedRepeater[0].Field1", results.ToArray()[1].Key); Assert.AreEqual("Repeater[0].NestedRepeater[1].NestedNestedRepeater[1].Field1", results.ToArray()[2].Key); Assert.AreEqual("Repeater[1].NestedRepeater[0].NestedNestedRepeater[0].Field1", results.ToArray()[3].Key); }
/// <summary> /// Writes the repeater. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="repeater">The repeater.</param> /// <param name="includedControls">The included controls.</param> /// <param name="applicationData">The application data.</param> private void WriteRepeater(StringBuilder sb, RepeaterControl repeater, IncludedControlList includedControls, ApplicationData applicationData) { this.WriteHeaderRow(sb, repeater.Name, FormatterResources.RepeaterStyles); Dictionary<string, object>[] repeaterVals = applicationData.GetRepeaterItemsOrDefault(repeater.Name); var i = 1; foreach (var row in repeaterVals) { var additionalStyles = i % 2 == 0 ? FormatterResources.AltRepeaterRowStyle : string.Empty; if (repeater.DisplayRowNumber) { this.WriteHeaderRow(sb, string.Format("Row {0}", i), string.Format("{0} {1}", FormatterResources.RepeaterRowHeaderStyle, additionalStyles)); } foreach (var field in row) { var control = repeater.Controls.FindRecursive(c => c.Name == field.Key); if (control != null && (includedControls.All || includedControls.Controls.Contains(field.Key))) { this.WriteRow(sb, field.Key, this.GetValueToWrite(control, field.Value as string), additionalStyles); } } i++; } }
public void FormatRepeater() { RepeaterControl control = new RepeaterControl(); ApplicationValueFormatter formatter = new ApplicationValueFormatter(); string format = formatter.FormatApplicationValue("Irrelevant Value", control); Assert.AreEqual(string.Empty, format); }
public void ValidationMessage() { ControlList list = new ControlList(); RepeaterControl control = new RepeaterControl { Controls = new ControlList(), Id = 1, Label = "Test Repeater", MinimumCount = 1, MaximumCount = 3, Name = "Test_repeater" }; list.Add(control); ApplicationData applicationData = new ApplicationData(); applicationData["Test_repeater"] = new List<Dictionary<string, object>>().ToArray(); ApplicationValidator localValidator = new ApplicationValidator(list); ValidationResults results = localValidator.Validate(new Application(applicationData)); Assert.IsFalse(results.IsValid); Assert.AreEqual( "Please add between 1 and 3 rows for 'Test Repeater'", results.ToList().First().Message); }
public void MaximumOnlyValidationMessage() { ControlList list = new ControlList(); RepeaterControl control = new RepeaterControl { Controls = new ControlList(), Id = 1, Label = "Test Repeater", MinimumCount = null, MaximumCount = 2, Name = "Test_repeater" }; list.Add(control); ApplicationData applicationData = new ApplicationData(); List<Dictionary<string, object>> repeaterArr = new List<Dictionary<string, object>>(); for (int i = 0; i <= 2; i++) { repeaterArr.Add(new Dictionary<string, object>()); } applicationData["Test_repeater"] = repeaterArr.ToArray(); ApplicationValidator localValidator = new ApplicationValidator(list, validatorList: this.validatorList); ValidationResults results = localValidator.Validate(new Application(applicationData)); Assert.IsFalse(results.IsValid); Assert.AreEqual( "Please add no more than 2 rows for 'Test Repeater'", results.ToList().First().Message); }
public void RepeaterInsideGroupCalc() { ControlList controls = new ControlList(); int i = 0; GroupControl group = new GroupControl { Id = i++, Name = "group1" }; controls.Add(group); RepeaterControl control = new RepeaterControl { Id = i++, Name = "repeater1" }; group.Controls.Add(control); control.AddChild(new TextControl { Id = i++, Name = "field1" }); control.AddChild(new TextControl { Id = i++, Name = "field2" }); control.AddChild(new CalculationControl { Id = i + 1, Name = "field3", CalculationExpression = "{%field1%}+{%field2%}" }); Application app = new Application(); List<Dictionary<string, object>> repeaterValue = new List<Dictionary<string, object>> { new Dictionary<string, object>() }; repeaterValue[0]["field1"] = "1"; repeaterValue[0]["field2"] = "1"; repeaterValue[0]["field3"] = null; repeaterValue.Add(new Dictionary<string, object>()); repeaterValue[1]["field1"] = "2"; repeaterValue[1]["field2"] = "2"; repeaterValue[1]["field3"] = null; app.ApplicationData["repeater1"] = repeaterValue.ToArray(); MultiExpressionEvaluator evaluator = new MultiExpressionEvaluator(app, controls); ApplicationData result = evaluator.EvaluateAll(); var repeater = (Dictionary<string, object>[])result["repeater1"]; Assert.AreEqual(repeater[0]["field3"], "2"); Assert.AreEqual(repeater[1]["field3"], "4"); }
/// <summary> /// Creates a <see cref="Microsoft.Practices.EnterpriseLibrary.Validation.Validator"/> that will validate /// the number of items in a repeater control. /// </summary> /// <param name="control">The control to create a validator for.</param> /// <returns>A <see cref="Microsoft.Practices.EnterpriseLibrary.Validation.Validator"/> that will validate /// the number of items in a repeater control.</returns> private Validator CreateValidatorForRepeaterItemCount(RepeaterControl control) { int minimum = control.MinimumCount ?? 0; int maximum = control.MaximumCount ?? int.MaxValue; string messageTemplate = (control.MinimumCount.HasValue && !control.MaximumCount.HasValue) ? ValidationMessage.RepeaterLengthMinOnly : (!control.MinimumCount.HasValue && control.MaximumCount.HasValue) ? ValidationMessage.RepeaterLengthMaxOnly : ValidationMessage.RepeaterLength; return new ArrayLengthValidator(minimum, maximum) { MessageTemplate = messageTemplate }; }