Exemple #1
0
        public void A_Step_Table_Is_Formatted()
        {
            var mockStyle = new MockStylist
            {
                StepFormat = "Keyword: {0} Step: {1}"
            };
            var step = new Step()
            {
                NativeKeyword = "Natkey ", Name = "I am a step"
            };

            var stepTable = new Table();

            stepTable.HeaderRow = new TableRow(new[] { "Col1", "Col2" });
            stepTable.DataRows  = new System.Collections.Generic.List <ObjectModel.TableRow>();
            stepTable.DataRows.Add(new TableRow(new[] { "Col1Row1", "Col2Row1" }));
            stepTable.DataRows.Add(new TableRow(new[] { "Col1Row2", "Col2Row2" }));
            step.TableArgument = stepTable;

            var stepBlock    = new StepBlock(step, mockStyle);
            var actualString = stepBlock.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

            Assert.AreEqual("Keyword: Natkey Step: I am a step", actualString[0]);
            Assert.AreEqual(">", actualString[1]);
            Assert.AreEqual("> | Col1 | Col2 |", actualString[2]);
            Assert.AreEqual("> | --- | --- |", actualString[3]);
            Assert.AreEqual("> | Col1Row1 | Col2Row1 |", actualString[4]);
            Assert.AreEqual("> | Col1Row2 | Col2Row2 |", actualString[5]);
            Assert.AreEqual(7, actualString.Length);
        }
Exemple #2
0
        public void The_Step_Is_Formatted()
        {
            var mockStyle = new MockStylist
            {
                StepFormat = "Keyword: {0} Step: {1}"
            };
            var step = new Step()
            {
                NativeKeyword = "Natkey ", Name = "I am a step"
            };

            var stepBlock    = new StepBlock(step, mockStyle);
            var actualString = stepBlock.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

            Assert.AreEqual("Keyword: Natkey Step: I am a step", actualString[0]);
            Assert.AreEqual(2, actualString.Length);
        }
Exemple #3
0
        private Exception ExecuteStep(StepDefinition instance, StepBlock stepBlock, Step step)
        {
            var attribute           = Attributes[stepBlock];
            var methodAndParameters = instance.GetType().GetMethods()
                                      .Select(m =>
            {
                var attr = (BddAttribute)m.GetCustomAttribute(attribute);

                if (attr == null)
                {
                    return(null);
                }
                var match = Regex.Match(step.Text, attr.Message);
                if (!match.Success)
                {
                    return(null);
                }
                var parameters = new List <object>();
                for (var i = 1; i < match.Groups.Count; i++)
                {
                    parameters.Add(match.Groups[i].Value);
                }
                if (step.Argument is DocString)
                {
                    parameters.Add(((DocString)step.Argument).Content);
                }
                else if (step.Argument != null)
                {
                    parameters.Add(step.Argument);
                }
                var methodParameters = m.GetParameters();
                for (var i = parameters.Count; i < methodParameters.Length; i++)
                {
                    // Try to complete with default parameter values
                    var paramInfo = methodParameters[i];
                    if (!paramInfo.HasDefaultValue)
                    {
                        break;
                    }
                    parameters.Add(paramInfo.DefaultValue);
                }
                if (methodParameters.Length != parameters.Count)
                {
                    return(null);
                }
                return(Tuple.Create(m, parameters.ToArray()));
            })
                                      .FirstOrDefault(t => t != null);

            if (methodAndParameters == null)
            {
                throw new InvalidOperationException(
                          $"There is no step definition method for {stepBlock} '{step.Text}'");
            }
            try
            {
                var method         = methodAndParameters.Item1;
                var parameters     = methodAndParameters.Item2;
                var parameterInfos = method.GetParameters();
                for (var i = 0; i < parameterInfos.Length; i++)
                {
                    var paramInfo = parameterInfos[i];
                    // Do some minimal conversion => regex capturing groups to int
                    if (paramInfo.ParameterType == typeof(int))
                    {
                        parameters[i] = Convert.ToInt32(parameters[i]);
                    }
                }
                method.Invoke(instance, parameters);
            }
            catch (TargetInvocationException ex)
            {
                // Exceptions should not be thrown
                // Should be captured for result
                return(ex.InnerException);
            }
            catch (Exception ex)
            {
                return(ex);
            }
            // Success
            return(null);
        }