Example #1
0
        public static IDictionary<string, object> ToDictionary(this TechTalk.SpecFlow.Table data)
        {
            var result = new Dictionary<string, object>();

            if (
                    data.Header.Count == 2 &&
             					_acceptedHeaderFields.Any(a => a.Equals(data.Header.ElementAt(0), StringComparison.InvariantCultureIgnoreCase)) &&
                    data.Header.ElementAt(1).Equals("Value", StringComparison.InvariantCultureIgnoreCase))
            {
                var propertyHeader = data.Header.ElementAt(0);
                var valueHeader = data.Header.ElementAt(1);

                foreach (var row in data.Rows)
                {
                    var p = row[propertyHeader];
                    var v = TypeFactory.FromString(row[valueHeader]);

                    result[p] = v;
                }
            }
            else if (data.Rows.Count > 1)
            {
                int i = 0;
                var keys = data.Header.Select(h => h).ToArray();
                foreach (var row in data.Rows)
                {
                    var table = new TechTalk.SpecFlow.Table(keys);
                    table.AddRow(row);

                    result.Add(i.ToString(CultureInfo.InvariantCulture), table.ToDictionary());
                    i++;
                }
            }
            else
            {
                var keys = data.Header.Select(h => h);
                var values = data.Rows[0];

                foreach (var key in keys)
                {
                    result[key] = TypeFactory.FromString(values[key]);
                }
            }

            return result;
        }