public void Should_be_able_generate_from_a_simple_invalid_feature()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator = remoteFactory.CreateGenerator(new ProjectSettings()
                {
                    ProjectFolder = Path.GetTempPath()
                });

                FeatureFileInput featureFileInput = new FeatureFileInput("Test.feature")
                {
                    FeatureFileContent = @"
Feature: Addition
Scenario: Add two numbers
	Given I have entered 50 into the calculator
    AndXXX the keyword is misspelled
"
                };
                var result = generator.GenerateTestFile(featureFileInput, new GenerationSettings());

                result.ShouldNotBeNull();
                result.Success.ShouldBeFalse();
                result.Errors.ShouldNotBeNull();
                result.Errors.ShouldNotBeEmpty();
            }
        }
        private RemoteAppDomainTestGeneratorFactory CreateRemoteAppDomainTestGeneratorFactory(string generatorFolder)
        {
            var factory = new RemoteAppDomainTestGeneratorFactory(tracerStub.Object);

            factory.Setup(generatorFolder);
            return(factory);
        }
        public void Should_be_able_generate_from_a_simple_valid_feature()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator = remoteFactory.CreateGenerator(new ProjectSettings()
                {
                    ProjectFolder = Path.GetTempPath()
                });

                FeatureFileInput featureFileInput = new FeatureFileInput("Test.feature")
                {
                    FeatureFileContent = @"
Feature: Addition

@mytag
Scenario: Add two numbers
	Given I have entered 50 into the calculator
	And I have entered 70 into the calculator
	When I press add
	Then the result should be 120 on the screen
"
                };
                var result = generator.GenerateTestFile(featureFileInput, new GenerationSettings());

                result.ShouldNotBeNull();
                result.Success.ShouldBeTrue();
                result.GeneratedTestCode.ShouldNotBeNull();
            }
        }
 public void Should_be_able_to_initialize()
 {
     using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
     {
         remoteFactory.Initialize();
         remoteFactory.IsRunning.ShouldBeTrue();
     }
 }
        public void Should_be_able_to_create_generator_with_default_config()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator = remoteFactory.CreateGenerator(new ProjectSettings());

                generator.ShouldNotBeNull();
            }
        }
        public void Should_start_running_delayed()
        {
            RemoteAppDomainTestGeneratorFactory remoteFactory;

            using (remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                remoteFactory.IsRunning.ShouldBeFalse();
            }
        }
        public void Should_be_able_to_return_generator_version()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var version = remoteFactory.GetGeneratorVersion();

                version.ShouldNotBeNull();
                version.ShouldEqual(TestGeneratorFactory.GeneratorVersion);
            }
        }
        public void Should_cleanup_after_generator_disposed()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator = remoteFactory.CreateGenerator(new ProjectSettings());
                generator.Dispose();

                remoteFactory.IsRunning.ShouldBeFalse();
            }
        }
        public void Should_not_cleanup_when_one_generator_is_still_used()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator1 = remoteFactory.CreateGenerator(new ProjectSettings());
                var generator2 = remoteFactory.CreateGenerator(new ProjectSettings());
                generator1.Dispose();

                remoteFactory.IsRunning.ShouldBeTrue();
            }
        }
        public void Should_cleanup_ater_dispose()
        {
            RemoteAppDomainTestGeneratorFactory remoteFactory;

            using (remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                remoteFactory.Initialize();
            }

            remoteFactory.IsRunning.ShouldBeFalse();
        }
        public void Should_cleanup_when_all_generators_are_disposed()
        {
            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator1 = remoteFactory.CreateGenerator(new ProjectSettings());
                var generator2 = remoteFactory.CreateGenerator(new ProjectSettings());
                generator1.Dispose();
                generator2.Dispose();

                remoteFactory.IsRunning.ShouldBeFalse();
            }
        }
        public void Should_be_able_to_load_generator_from_another_folder()
        {
            using (var tempFolder = new TempFolder())
            {
                var generatorAssemblyFile = typeof(TestGeneratorFactory).Assembly.Location;
                var utilsAssemblyFile     = typeof(FileSystemHelper).Assembly.Location;
                FileSystemHelper.CopyFileToFolder(generatorAssemblyFile, tempFolder.FolderName);
                FileSystemHelper.CopyFileToFolder(utilsAssemblyFile, tempFolder.FolderName);

                using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(tempFolder.FolderName))
                {
                    var generator = remoteFactory.CreateGenerator(new ProjectSettings());
                    generator.ShouldNotBeNull();
                }
            }
        }
        public void Should_create_custom_generator_when_configured_so()
        {
            var configurationHolder = new SpecFlowConfigurationHolder(string.Format(@"
                <specFlow>
                  <generator>
                  <dependencies>
                    <register type=""{0}"" as=""{1}""/>
                  </dependencies>
                  </generator>
                </specFlow>",
                                                                                    typeof(DummyGenerator).AssemblyQualifiedName,
                                                                                    typeof(ITestGenerator).AssemblyQualifiedName));

            var projectSettings = new ProjectSettings();

            projectSettings.ConfigurationHolder = configurationHolder;

            using (var remoteFactory = new RemoteAppDomainTestGeneratorFactory(currentGeneratorFolder))
            {
                var generator = remoteFactory.CreateGenerator(projectSettings);
                generator.ToString().ShouldEqual("DummyGenerator"); // since the type is wrapped, we can only check it this way
            }
        }