public override void Setup()
        {
            base.Setup();

            var commands = new[]
            {
                new CommandDescriptor("IdentityRunnable", String.Empty, Enumerable.Empty<ArgumentDescriptor>(), new[] {"IdentityRunnable"}),
                new CommandDescriptor("IncrementRunnable", String.Empty, new[]
                {
                    new ArgumentDescriptor
                    {
                        ArgumentType = typeof (Double),
                        ArgumentName = "value",
                        DefaultValue = 0,
                        IsOptional = false,
                        Position = 0
                    }
                }, new[] {"IncrementRunnable", "increment", "inc"})
            };

            var runnableFactory = new DefaultRunnableFactory(new[] {typeof (IdentityRunnable), typeof (IncrementRunnable)});

            var repository = new MemoryDescriptorRepository(commandDescriptors: commands);
            var commandCallResolver = new DefaultCommandCallResolver(repository, runnableFactory);
            var selectorManager = new DefaultSelectorFactory();
            var nodeSelectorResolver = new DefaultSelectorResolver(selectorManager, repository);
            var runnableManager = new DefaultRunnableManager();
            var executor = new StandardExecutor(runnableManager);

            // initialize compiler and control flow factory
            ControlFlowFactory = new DefaultControlFlowFactory(commandCallResolver, nodeSelectorResolver, executor);
            Compiler = new CodeQueryCompiler();
        }
            public void ShouldReturnDefinedCombinatorDescriptors_AfterCallingIt()
            {
                // Given in setup
                var combinators = new[]
                {
                    new CombinatorDescriptor("test-combinator", "test", typeof (Object))
                };
                var underTest = new MemoryDescriptorRepository(combinatorDescriptors: combinators);

                // When
                var result = underTest.GetCombinatorDescriptors();

                // Then
                Assert.That(result, Is.EquivalentTo(new[]
                {
                    new CombinatorDescriptor("test-combinator", "test", typeof (Object))
                }));
            }
            public void ShouldReturnDefinedSelectorDescriptors_AfterCallingIt()
            {
                // Given
                var selectors = new[]
                {
                    new SelectorDescriptor("test-selector", "test-selector", typeof (Object))
                };

                var underTest = new MemoryDescriptorRepository(selectorDescriptors: selectors);

                // When
                var result = underTest.GetSelectorDescriptors();

                // Then
                Assert.That(result, Is.EquivalentTo(new[]
                {
                    new SelectorDescriptor("test-selector", "test-selector", typeof (Object)),
                }));
            }
            public void ShouldReturnDefinedModifierSelectorDescriptors_AfterCallingIt()
            {
                // Given in setup
                var modifierDescriptors = new[]
                {
                    new ModifierDescriptor("test-modifier", "test-modifier", Enumerable.Empty<String>(), typeof (Object),
                        false),
                };
                var underTest = new MemoryDescriptorRepository(modifierDescriptors: modifierDescriptors);

                // When
                var result = underTest.GetModifierDescriptors();

                // Then
                Assert.That(result, Is.EquivalentTo(new[]
                {
                    new ModifierDescriptor("test-modifier", "test-modifier", Enumerable.Empty<String>(), typeof (Object),
                        false)
                }));
            }
            public void ShouldReturnDefinedCommandDescriptors_AfterCallingIt()
            {
                // Given
                var commandDescriptors = new[]
                {
                    new CommandDescriptor(
                        commandNames: new[] {"test"},
                        arguments: Enumerable.Empty<ArgumentDescriptor>(),
                        description: "test description",
                        name: "test-command")
                };
                var underTest = new MemoryDescriptorRepository(commandDescriptors: commandDescriptors);

                // When
                var result = underTest.GetCommandDescriptors();

                // Then
                Assert.That(result, Is.EquivalentTo(new[]
                {
                    new CommandDescriptor(
                        commandNames: new[] {"test"},
                        arguments: Enumerable.Empty<ArgumentDescriptor>(),
                        description: "test description",
                        name: "test-command")
                }));
            }