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

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

            var parenthesis = tree.GetChildren(tree.GetRoot()).First();
            var value = tree.GetChildren(parenthesis).First();
            Assert.AreEqual("()", tree.ValueOf(parenthesis));
            Assert.AreEqual("3", tree.ValueOf(value));
        }
        public void Parentheses_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.Parentheses(b => b.CreateItem(id));

            factory.VerifyAll();
        }