Пример #1
0
        public void When_Inherited_data_Context_And_Converter_Different_Types_Invalid_Child_Path()
        {
            var SUT = new Target1();

            var child = new Target2(SUT);

            var converter = new BoolToNumber();

            child.SetBinding("DataContext", new Binding("Item.List[0]"));
            child.SetBinding("TargetValue", new Binding("Details_zzz.InfoBoolean", converter: converter)
            {
                FallbackValue = 10
            });
            SUT.ChildrenBinders.Add(child);

            // With the invalid path (Details_zzz instead of Details), the converter should not be called at all.
            // FallbackValue should be used
            SUT.DataContext = new SourceLevel0()
            {
                Item = new SourceLevel1()
                {
                    List = new SourceLevel2[] { new SourceLevel2() }
                }
            };
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(0, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);
        }
Пример #2
0
        public void When_Inherited_data_Context_Sequence_And_Converter_DifferentTypes()
        {
            var SUT = new Target1();

            var child = new Target2(SUT);

            var converter = new BoolToNumber();

            child.SetBinding(Target2.DataContextProperty, new Binding("Item.List[0]"));
            child.SetBinding("TargetValue", new Binding("Details.InfoBoolean", converter: converter)
            {
                FallbackValue = 10
            });
            SUT.ChildrenBinders.Add(child);

            SUT.DataContext = new SourceLevel0();
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(0, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = null;
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(0, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = new SourceLevel0();
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(0, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = null;
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(0, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = new SourceLevel0()
            {
                Item = new SourceLevel1()
                {
                    List = new SourceLevel2[] { new SourceLevel2() }
                }
            };
            Assert.AreEqual(-1000, child.TargetValue);
            Assert.AreEqual(1, converter.ConversionCount);
            Assert.AreEqual(true, converter.LastValue);

            // It breaks here, when a broken binding would replace a fully functional one.
            SUT.DataContext = new SourceLevel0();
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(2, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = new SourceLevel0()
            {
                Item = new SourceLevel1()
                {
                    List = new SourceLevel2[] { new SourceLevel2() }
                }
            };
            Assert.AreEqual(-1000, child.TargetValue);
            Assert.AreEqual(3, converter.ConversionCount);
            Assert.AreEqual(true, converter.LastValue);

            SUT.DataContext = null;
            Assert.AreEqual(10, child.TargetValue);
            Assert.AreEqual(4, converter.ConversionCount);
            Assert.AreEqual(null, converter.LastValue);

            SUT.DataContext = new SourceLevel0()
            {
                Item = new SourceLevel1()
                {
                    List = new SourceLevel2[] { new SourceLevel2() }
                }
            };
            Assert.AreEqual(-1000, child.TargetValue);
            Assert.AreEqual(5, converter.ConversionCount);
            Assert.AreEqual(true, converter.LastValue);
        }
Пример #3
0
        public void getAllEquivalentReplacements(Node original, List <Node> result)
        {
            //TODO predelat. mozna pomoci visitoru?
            //result.Clear();
            switch (original.functionType.signature)
            {
            case FunctionTypeEnum._00_10:
                for (int i = constantsLowerLimit; i <= constantsUpperLimit; i++)
                {
                    result.Add(new NumericConstant(i));
                }
                for (int i = 0; i < problemSchema.inputsType.Length; i++)
                {
                    if (problemSchema.inputsType[i] == DataType.numerical)
                    {
                        result.Add(new NumericInput(i));
                    }
                }
                break;

            case FunctionTypeEnum._00_01:
                result.Add(new BoolConstant(true));
                result.Add(new BoolConstant(false));
                for (int i = 0; i < problemSchema.inputsType.Length; i++)
                {
                    if (problemSchema.inputsType[i] == DataType.logic)
                    {
                        result.Add(new BoolInput(i));
                    }
                }
                break;

            case FunctionTypeEnum._10_10:
                NumericUnaryOperator originalNode = (NumericUnaryOperator)original;
                NumericUnaryOperator newNode;
                foreach (var item in categories[original.functionType.signature])
                {
                    newNode            = (NumericUnaryOperator)NodeFactory.createNode(item.Key);
                    newNode.experssion = (NumericNode)originalNode.experssion.Clone();
                    result.Add(newNode);
                }
                break;

            case FunctionTypeEnum._20_10:
                NumericBinaryOperator originalNode1 = (NumericBinaryOperator)original;
                NumericBinaryOperator newNode1;
                foreach (var item in categories[original.functionType.signature])
                {
                    newNode1        = (NumericBinaryOperator)NodeFactory.createNode(item.Key);
                    newNode1.first  = (NumericNode)originalNode1.first.Clone();
                    newNode1.second = (NumericNode)originalNode1.second.Clone();
                    result.Add(newNode1);
                }
                break;

            case FunctionTypeEnum._20_01:
                BoolRelationOperator originalNode2 = (BoolRelationOperator)original;
                BoolRelationOperator newNode2;
                foreach (var item in categories[original.functionType.signature])
                {
                    newNode2        = (BoolRelationOperator)NodeFactory.createNode(item.Key);
                    newNode2.first  = (NumericNode)originalNode2.first.Clone();
                    newNode2.second = (NumericNode)originalNode2.second.Clone();
                    result.Add(newNode2);
                }
                break;

            case FunctionTypeEnum._02_01:
                BoolLogicBinaryOperator originalNode3 = (BoolLogicBinaryOperator)original;
                BoolLogicBinaryOperator newNode3;
                foreach (var item in categories[original.functionType.signature])
                {
                    newNode3        = (BoolLogicBinaryOperator)NodeFactory.createNode(item.Key);
                    newNode3.first  = (BoolNode)originalNode3.first.Clone();
                    newNode3.second = (BoolNode)originalNode3.second.Clone();
                    result.Add(newNode3);
                }
                break;

            case FunctionTypeEnum._01_01:
                BoolUnaryLogicOperator originalNode4 = (BoolUnaryLogicOperator)original;
                BoolUnaryLogicOperator newNode4;
                foreach (var item in categories[original.functionType.signature])
                {
                    newNode4     = (BoolUnaryLogicOperator)NodeFactory.createNode(item.Key);
                    newNode4.exp = (BoolNode)originalNode4.exp.Clone();
                    result.Add(newNode4);
                }
                break;

            case FunctionTypeEnum._01_10:
                BoolToNumber originalNode5 = (BoolToNumber)original;
                BoolToNumber newNode5      = (BoolToNumber)NodeFactory.createNode(original.type);
                newNode5.expression = (BoolNode)originalNode5.expression.Clone();
                result.Add(newNode5);
                break;

            default:
                break;
            }
        }