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);
        }
Esempio n. 3
0
        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 };
        }