public void ToImmutableTree_WithDivideWithValueExpression_ReturnsTreeWithDivideOperatorAndValue()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Divide(b => b.Value(3));

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var divide = tree.GetChildren(tree.GetRoot()).First();
            var value = tree.GetChildren(divide).First();
            Assert.AreEqual("/", tree.ValueOf(divide));
            Assert.AreEqual("3", tree.ValueOf(value));
        }
        public void ToImmutableTree_WithDivide_ReturnsTreeWithDivideOperator()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Divide();

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var children = tree.GetChildren(tree.GetRoot());
            var divide = children.First();
            Assert.AreEqual("/", tree.ValueOf(divide));
        }
        public void Divide_WithExpressionAndFactory_AllowsCreatingNewItemsInsideExpression()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>(MockBehavior.Strict);
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            builder = builder.Divide(b => b.CreateItem(id));

            factory.VerifyAll();
        }