public void CreateItemReturningItem_WithNoFactory_Fails()
        {
            var id = new Mock<IIdentifier>().Object;

            IEquationBuilder builder = new EquationBuilder();

            IItem item;
            builder.CreateItem(id, out item);
        }
        public void CreateItemReturningItem_WithFactoryAndUnknownIdentifier_Fails()
        {
            var id = new Mock<IIdentifier>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(false);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            IItem item;
            builder.CreateItem(id, out item);
        }
        public void Factory_PlugedInTheEquationBuilder_CanBeUsedToCreateSquareRoot()
        {
            var factory = new AdvancedMathOperatorsFactory();
            var builder = new EquationBuilder(new[] { factory });

            builder = builder.CreateItem<EquationBuilder>(AdvancedMathOperators.SquareRoot);

            var tree = builder.ToImmutableTree();
            var rootValue = tree.ValueOf(tree.GetRoot());
            Assert.AreEqual("SquareRoot", rootValue);
        }
        public void CreateItemReturningItem_WithFactoriesThatCanCreateSameItem_Fails()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object, factory.Object });

            IItem createItem;
            builder.CreateItem(id, out createItem);
        }
        public void CreateItemReturningItem_WithFactoryAndKnownIdentifier_ReturnsTheNewItem()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            IItem createItem;
            builder.CreateItem(id, out createItem);

            Assert.AreEqual(item, createItem);
        }
        public void CreateItem_WithNoFactory_Fails()
        {
            var id = new Mock<IIdentifier>().Object;

            IEquationBuilder builder = new EquationBuilder();

            builder.CreateItem(id);
        }
        public void CreateItem_WithFactoryAndKnownIdentifier_ReturnsTheBuilder()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            var returnedBuilder = builder.CreateItem(id);

            Assert.AreEqual(builder, returnedBuilder);
        }