private DeveroomTag CreateFeatureStructure(string[] featureTags, string[] scenarioTags, string[] scenarioOutlineTags = null, string[] soHeaders = null, string[][] soCells = null, bool includeScenario = true, bool includeOutline = true, string[] outlineExamplesTags = null)
        {
            featureTags         = featureTags ?? new string[0];
            scenarioTags        = scenarioTags ?? new string[0];
            scenarioOutlineTags = scenarioOutlineTags ?? new string[0];
            outlineExamplesTags = outlineExamplesTags ?? new string[0];
            soHeaders           = soHeaders ?? new[] { "param1", "param2" };
            soCells             = soCells ?? new[] { new[] { "r1c1", "r1c2" }, new[] { "r2c1", "r2c2" } };

            var scenarioDefinitions = new List <StepsContainer>();

            scenarioDefinitions.Add(new Background(null, "Background", "my background", null, new Step[0]));
            if (includeScenario)
            {
                scenarioDefinitions.Add(new SingleScenario(scenarioTags.Select(t => new Tag(null, t)).ToArray(), null, "Scenario", "my scenario", null, new Step[0]));
            }
            if (includeOutline)
            {
                scenarioDefinitions.Add(new ScenarioOutline(scenarioOutlineTags.Select(t => new Tag(null, t)).ToArray(), null, "Scenario Outline", "my scenario outline", null, new Step[0], new Examples[]
                {
                    new Examples(outlineExamplesTags.Select(t => new Tag(null, t)).ToArray(), null, "Examples", "my examples", null, new TableRow(null, soHeaders.Select(h => new TableCell(null, h)).ToArray()), soCells.Select(r => new TableRow(null, r.Select(c => new TableCell(null, c)).ToArray())).ToArray()),
                }));
            }

            var feature = new Feature(featureTags.Select(t => new Tag(null, t)).ToArray(), null, "en", "Feature",
                                      "my feature", null, scenarioDefinitions.ToArray());
            var featureTag    = new DeveroomTag(DeveroomTagTypes.FeatureBlock, default(SnapshotSpan), feature);
            var backgroundTag = new DeveroomTag(DeveroomTagTypes.ScenarioDefinitionBlock, default(SnapshotSpan), feature.Children.OfType <Background>().First());

            featureTag.AddChild(backgroundTag);
            if (includeScenario)
            {
                var scenarioTag = new DeveroomTag(DeveroomTagTypes.ScenarioDefinitionBlock, default(SnapshotSpan), feature.Children.OfType <Scenario>().First());
                featureTag.AddChild(scenarioTag);
            }
            if (includeOutline)
            {
                var scenarioOutlineTag = new DeveroomTag(DeveroomTagTypes.ScenarioDefinitionBlock, default(SnapshotSpan), feature.Children.OfType <ScenarioOutline>().First());
                featureTag.AddChild(scenarioOutlineTag);
            }
            return(featureTag);
        }
 private void AddClassificationForTag(List <ClassificationSpan> classifications, DeveroomTag tag, SnapshotSpan span)
 {
     if (TagClassificationTypeMapping.TryGetValue(tag.Type, out var classification))
     {
         classifications.Add(new ClassificationSpan(span, _classificationTypeRegistry.GetClassificationType(classification)));
     }
 }