public void CodeBehindGeneratorCreatesScenarioWithSteps()
        {
            var features = TestCodeBehindData.FeatureWithScenarioAndNoStep();

            features[0].Scenarios[0].Steps.Add(new NodeStep("GivenIHaveAStep"));
            features[0].Scenarios[0].Steps.Add(new NodeStep("WhenIHaveAStep"));
            features[0].Scenarios[0].Steps.Add(new NodeStep("ThenIHaveAStep"));

            var files = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            string parameterName = string.Empty;

            string[] stringsExpected = new string[] {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{",
                string.Format("\t\t{0}({1});", features[0].Scenarios[0].Steps[0].Name, parameterName),
                string.Format("\t\t{0}({1});", features[0].Scenarios[0].Steps[1].Name, parameterName),
                string.Format("\t\t{0}({1});", features[0].Scenarios[0].Steps[2].Name, parameterName),
                "\t}",
                "}"
            };

            AssertExt.ContentsOfStringArray(stringsExpected, files[0]);
        }
        public void CodeBehindGeneratorCreatesScenarioOutlineWithStepAndParameterized()
        {
            var features = TestCodeBehindData.FeatureWithScenarioOutlineAndStepAndParameterized("string");

            var files = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            List <string> stringsExpected = new List <string> {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{"
            };
            NodeScenarioOutline outline = (NodeScenarioOutline)features[0].Scenarios[0];

            for (int i = 1; i < outline.Examples.Rows.Count; i++)             // skip header row
            {
                foreach (var step in outline.Steps)
                {
                    stringsExpected.Add(string.Format("\t\t{0}(\"{1}\", \"{2}\");",
                                                      step.Name,
                                                      outline.Examples.Rows[i][0],
                                                      outline.Examples.Rows[i][1]));
                }
            }
            List <string> stringsExpectedEnd = new List <string> {
                "\t}",
                "}"
            };

            stringsExpected.AddRange(stringsExpectedEnd);

            AssertExt.ContentsOfStringArray(stringsExpected.ToArray(), files[0]);
        }
        public void CodeBehindGeneratorCreatesScenarioWithOneStepAndTable()
        {
            var features = TestCodeBehindData.FeatureWithScenarioAndStep();

            features[0].Scenarios[0].Steps[0].Rows = new List <string[]>()
            {
                new[] { "a", "b", "c" },
                new[] { "1", "2", "3" }
            };

            var files = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            string[] stringsExpected = new string[] {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{",
                "\t\tstd::vector<std::vector<std::string>> table0 = {{",
                "\t\t\t{ \"a\", \"b\", \"c\" },",
                "\t\t\t{ \"1\", \"2\", \"3\" }",
                "\t\t}};",
                string.Format("\t\t{0}(table0,{1},{2});",
                              features[0].Scenarios[0].Steps[0].Name,
                              features[0].Scenarios[0].Steps[0].Rows.Count,
                              features[0].Scenarios[0].Steps[0].Rows[0].Length),
                "\t}",
                "}"
            };

            AssertExt.ContentsOfStringArray(stringsExpected, files[0]);
        }
        public void CodeBehindGeneratorCreatesScenarioWithNoSteps()
        {
            var features = TestCodeBehindData.FeatureWithScenarioAndNoStep();
            var files    = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            string[] stringsExpected = new string[] {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{",
                "\t}",
                "}"
            };

            AssertExt.ContentsOfStringArray(stringsExpected, files[0]);
        }
        public void CodeBehindGeneratorCreatesScenarioOutlineWithStepAndTableDeclaredOnce()
        {
            var features = TestCodeBehindData.FeatureWithScenarioOutlineAndStep();

            features[0].Scenarios[0].Steps[0].Rows = new List <string[]>()
            {
                new[] { "a", "b", "c" },
                new[] { "1", "2", "3" }
            };

            var files = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            List <string> stringsExpected = new List <string> {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{",
                "\t\tstd::vector<std::vector<std::string>> table0 = {{",
                "\t\t\t{ \"a\", \"b\", \"c\" },",
                "\t\t\t{ \"1\", \"2\", \"3\" }",
                "\t\t}};"
            };
            NodeScenarioOutline outline = (NodeScenarioOutline)features[0].Scenarios[0];

            for (int i = 0; i < outline.Examples.Rows.Count - 1; i++)
            {
                foreach (var step in outline.Steps)
                {
                    stringsExpected.Add(string.Format("\t\t{0}(table0,2,3);", step.Name));
                }
            }
            List <string> stringsExpectedEnd = new List <string> {
                "\t}",
                "}"
            };

            stringsExpected.AddRange(stringsExpectedEnd);

            AssertExt.ContentsOfStringArray(stringsExpected.ToArray(), files[0]);
        }
        public void CodeBehindGeneratorCreatesTwoFeaturesWithScenario()
        {
            var features = TestCodeBehindData.TwoFeaturesWithScenario();
            var files    = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            Assert.AreEqual(2, files.Count, "File count mismatch.");
            for (int i = 0; i < files.Count; i++)
            {
                string[] stringsExpected = new string[] {
                    string.Format("#include \"{0}.h\"", features[i].Name),
                    string.Empty,
                    "namespace CppUnitTest",
                    "{",
                    string.Format("\tvoid {0}::{1}()", features[i].Name, features[i].Scenarios[0].Name),
                    "\t{",
                    "\t}",
                    "}"
                };

                AssertExt.ContentsOfStringArray(stringsExpected, files[i]);
            }
        }
        public void CodeBehindGeneratorCreatesStepWithOneNumberParameter()
        {
            var features = TestCodeBehindData.FeatureWithScenarioAndStepAndParameter("int");

            string parameterName = string.Empty;

            var files = GeneratorFactory.Generate(GeneratorType.CodeBehindGenerator, features);

            string[] stringsExpected = new string[] {
                string.Format("#include \"{0}.h\"", features[0].Name),
                string.Empty,
                "namespace CppUnitTest",
                "{",
                string.Format("\tvoid {0}::{1}()", features[0].Name, features[0].Scenarios[0].Name),
                "\t{",
                string.Format("\t\t{0}({1});", features[0].Scenarios[0].Steps[0].Name, features[0].Scenarios[0].Steps[0].Parameters[0].Value),
                "\t}",
                "}"
            };

            AssertExt.ContentsOfStringArray(stringsExpected, files[0]);
        }