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