예제 #1
0
        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);
        }
예제 #2
0
        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);
        }