public StepBindingNew(IBindingMethod method, BindingType bindingType, Regex regex, BindingScopeNew bindingScope) { Method = method; BindingType = bindingType; Regex = regex; BindingScope = bindingScope; }
private IEnumerable<StepBindingNew> GetSuggestionsFromCodeFunctionForScope(CodeFunction codeFunction, BindingScopeNew bindingScope) { return codeFunction.Attributes.Cast<CodeAttribute2>() .Select(codeAttribute => GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.Given, bindingScope) ?? GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.When, bindingScope) ?? GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.Then, bindingScope)) .Where(binding => binding != null); }
private StepBindingNew CreateStepBinding(CodeAttribute2 attr, CodeFunction codeFunction, BindingType bindingType, BindingScopeNew bindingScope) { try { IBindingMethod bindingMethod = new VsBindingMethod(codeFunction); var regexArg = attr.Arguments.Cast<CodeAttributeArgument>().FirstOrDefault(); if (regexArg == null) return null; var regexString = VsxHelper.ParseCodeStringValue(regexArg.Value, regexArg.Language); var regex = new Regex("^" + regexString + "$", RegexOptions.Compiled | RegexOptions.CultureInvariant); return new StepBindingNew(bindingMethod, bindingType, regex, bindingScope); } catch(Exception) { return null; } }
private StepBindingNew GetBingingFromAttribute(CodeAttribute2 codeAttribute, CodeFunction codeFunction, BindingType bindingType, BindingScopeNew bindingScope) { try { if (codeAttribute.FullName.Equals(string.Format("TechTalk.SpecFlow.{0}Attribute", bindingType))) return CreateStepBinding(codeAttribute, codeFunction, bindingType, bindingScope); return null; } catch(Exception) { return null; } }
private IEnumerable<StepBindingNew> GetSuggestionsFromCodeFunctionForScope(CodeFunction codeFunction, BindingScopeNew bindingScope) { return codeFunction.Attributes.Cast<CodeAttribute2>() .SelectMany(codeAttribute => GetStepDefinitionsFromAttribute(codeAttribute, codeFunction, bindingScope)) .Where(binding => binding != null); }
private IEnumerable<StepBindingNew> GetStepsFromClass(CodeClass codeClass, BindingScopeNew[] classScopes) { return codeClass.Children.OfType<CodeFunction>().SelectMany(codeFunction => GetSuggestionsFromCodeFunction(codeFunction, classScopes)); }
private IEnumerable<StepBindingNew> GetStepDefinitionsFromAttribute(CodeAttribute2 codeAttribute, CodeFunction codeFunction, BindingScopeNew bindingScope) { var normalStepDefinition = GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.Given, bindingScope) ?? GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.When, bindingScope) ?? GetBingingFromAttribute(codeAttribute, codeFunction, BindingType.Then, bindingScope); if (normalStepDefinition != null) { yield return normalStepDefinition; yield break; } if (IsGeneralStepDefinition(codeAttribute)) { yield return CreateStepBinding(codeAttribute, codeFunction, BindingType.Given, bindingScope); yield return CreateStepBinding(codeAttribute, codeFunction, BindingType.When, bindingScope); yield return CreateStepBinding(codeAttribute, codeFunction, BindingType.Then, bindingScope); } }