示例#1
0
 public string ToPlainText(Step step, string prefix)
 {
     return string.Format(
         "{0} {1} {2}",
         prefix,
         step.Title,
         GetResultLabel(step)
         );
 }
示例#2
0
        internal static Step CreateStep(DateTime starttime, MethodBase method, params object[] args)
        {
            var methodName = method.Name;

            var step = new Step
            {
                Title = method.Name,
                Steps = new List<Step>(),
                StartTime = starttime
            };

            var attr = method.GetCustomAttributes(true).OfType<StepDefinitionBaseAttribute>().FirstOrDefault();
            if (attr != null)
            {
                // Handle regex style
                if (!String.IsNullOrEmpty(attr.Regex))
                {
                    step.Title = attr.Regex;

                    for (var i = 0; i < args.Length; i++)
                    {
                        var arg = args[i];
                        var table = arg as Table;
                        if (table != null)
                        {
                            step.Table = new TableParam
                            {
                                Columns = table.Header.ToList(),
                                Rows = table.Rows.Select(x => x.Keys.ToDictionary(
                                    k => k,
                                    k => x[k]
                                    )).ToList()
                            };
                        }
                        else
                        {
                            var titleRegex = new Regex(step.Title);
                            var match = titleRegex.Match(step.Title);
                            if (match.Groups.Count > 1)
                            {
                                step.Title = step.Title.ReplaceFirst(match.Groups[1].Value, args[i].ToString());
                            }
                            else
                            {
                                step.MultiLineParameter = args[i].ToString();
                            }
                        }
                    }
                }
                else
                {
                    if (methodName.Contains('_'))
                    {
                        // underscore style
                        step.Title = methodName.Replace("_", " ");
                        step.Title = step.Title.Substring(step.Title.IndexOf(' ') + 1);

                        var methodInfo = method as MethodInfo;
                        for (var i = 0; i < args.Length; i++)
                        {
                            var arg = args[i];
                            var table = arg as Table;
                            if (table != null)
                            {
                                step.Table = new TableParam
                                {
                                    Columns = table.Header.ToList(),
                                    Rows = table.Rows.Select(x => x.Keys.ToDictionary(
                                        k => k,
                                        k => x[k]
                                        )).ToList()
                                };
                            }
                            else
                            {
                                var name = methodInfo.GetParamName(i).ToUpper();
                                var value = arg.ToString();
                                if (step.Title.Contains(name + " "))
                                {
                                    step.Title = step.Title.ReplaceFirst(name + " ", value + " ");
                                }
                                else
                                {
                                    step.Title = step.Title.ReplaceFirst(" " + name, " " + value);
                                }
                            }
                        }
                    }
                    else
                    {
                        // pascal naming style
                        throw new NotSupportedException("Pascal naming style not supported yet");
                    }
                }
            }

            return step;
        }