public SpecflowStepsDefinitionsCacheEntries Unmarshal(UnsafeReader reader) { var entries = new SpecflowStepsDefinitionsCacheEntries(); var classCount = reader.ReadInt(); for (var i = 0; i < classCount; i++) { var className = reader.ReadString(); var cacheClassEntry = new SpecflowStepDefinitionCacheClassEntry(className); var methodCount = reader.ReadInt(); for (var j = 0; j < methodCount; j++) { var methodName = reader.ReadString(); var methodCacheEntry = cacheClassEntry.AddMethod(methodName); var stepCount = reader.ReadInt(); for (var k = 0; k < stepCount; k++) { var type = reader.ReadInt(); var pattern = reader.ReadString(); methodCacheEntry.AddStep((GherkinStepKind)type, pattern); } } entries.Add(cacheClassEntry); } return(entries); }
private SpecflowStepDefinitionCacheClassEntry BuildBindingClassCacheEntry(IClassDeclaration classDeclaration) { var classCacheEntry = new SpecflowStepDefinitionCacheClassEntry(classDeclaration.CLRName); foreach (var member in classDeclaration.MemberDeclarations) { if (!(member is IMethodDeclaration methodDeclaration)) { continue; } var methodCacheEntry = classCacheEntry.AddMethod(methodDeclaration.DeclaredName); foreach (var attributeInstance in methodDeclaration.Attributes.Select(x => x.GetAttributeInstance())) { if (attributeInstance.PositionParameterCount == 0) { continue; } var parameter = attributeInstance.PositionParameter(0); var regex = parameter.ConstantValue.Value as string; if (regex == null) { continue; } if (attributeInstance.GetAttributeType().GetClrName().Equals(SpecflowAttributeHelper.GivenAttribute)) { methodCacheEntry.AddStep(GherkinStepKind.Given, regex); } if (attributeInstance.GetAttributeType().GetClrName().Equals(SpecflowAttributeHelper.WhenAttribute)) { methodCacheEntry.AddStep(GherkinStepKind.When, regex); } if (attributeInstance.GetAttributeType().GetClrName().Equals(SpecflowAttributeHelper.ThenAttribute)) { methodCacheEntry.AddStep(GherkinStepKind.Then, regex); } } } return(classCacheEntry); }