コード例 #1
0
        public void Invoke(Document activeDocument)
        {
            var editorContext = GherkinEditorContext.FromDocument(activeDocument, gherkinLanguageServiceFactory);

            if (editorContext == null)
            {
                return;
            }

            GoToDefinition(editorContext);
        }
コード例 #2
0
        public bool IsEnabled(Document activeDocument)
        {
            var editorContext = GherkinEditorContext.FromDocument(activeDocument, gherkinLanguageServiceFactory);

            if (editorContext == null)
            {
                return(false);
            }

            return(CanGoToDefinition(editorContext));
        }
        private void Invoke(Document activeDocument)
        {
            var editorContext = GherkinEditorContext.FromDocument(activeDocument, gherkinLanguageServiceFactory);

            if (editorContext == null)
            {
                return;
            }

            GenerateStepDefinitionSkeleton(editorContext);
        }
コード例 #4
0
        private GherkinStep GetCurrentStep(GherkinEditorContext editorContext)
        {
            var fileScope = editorContext.LanguageService.GetFileScope(waitForLatest: true);

            if (fileScope == null)
            {
                return(null);
            }

            SnapshotPoint caret = editorContext.TextView.Caret.Position.BufferPosition;
            IStepBlock    block;
            var           step = fileScope.GetStepAtPosition(caret.GetContainingLine().LineNumber, out block);

            if (step != null && block is IScenarioOutlineBlock)
            {
                step = step.GetSubstitutedStep((IScenarioOutlineBlock)block);
            }

            return(step);
        }
コード例 #5
0
        public bool GoToDefinition(GherkinEditorContext editorContext)
        {
            var step = GetCurrentStep(editorContext);

            if (step == null)
            {
                return(false);
            }

            var bindingMatchService = GetBindingMatchService(editorContext.LanguageService);

            if (bindingMatchService == null)
            {
                return(false);
            }

            if (!bindingMatchService.Ready)
            {
                MessageBox.Show("Step bindings are still being analyzed. Please wait.", "Go to binding");
                return(true);
            }

            List <BindingMatch>           candidatingMatches;
            StepDefinitionAmbiguityReason ambiguityReason;
            CultureInfo bindingCulture = editorContext.ProjectScope.SpecFlowConfiguration.BindingCulture ?? step.StepContext.Language;
            var         match          = bindingMatchService.GetBestMatch(step, bindingCulture, out ambiguityReason, out candidatingMatches);
            var         binding        = match.StepBinding;

            if (!match.Success)
            {
                if (candidatingMatches.Any())
                {
                    string bindingsText = string.Join(Environment.NewLine, candidatingMatches.Select(b => b.StepBinding.Method.GetShortDisplayText()));
                    MessageBox.Show("Multiple matching bindings found. Navigating to the first match..."
                                    + Environment.NewLine + Environment.NewLine + bindingsText, "Go to binding");
                    binding = candidatingMatches.First().StepBinding;
                }
                else
                {
                    var language = editorContext.ProjectScope is VsProjectScope?VsProjectScope.GetTargetLanguage(((VsProjectScope)editorContext.ProjectScope).Project) : ProgrammingLanguage.CSharp;

                    var    stepDefinitionSkeletonStyle = editorContext.ProjectScope.SpecFlowConfiguration.StepDefinitionSkeletonStyle;
                    string skeleton = stepDefinitionSkeletonProvider.GetStepDefinitionSkeleton(language, step, stepDefinitionSkeletonStyle, bindingCulture);

                    var result = MessageBox.Show("No matching step binding found for this step! Do you want to copy the step binding skeleton to the clipboard?"
                                                 + Environment.NewLine + Environment.NewLine + skeleton, "Go to binding", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (result == DialogResult.Yes)
                    {
                        Clipboard.SetText(skeleton);
                    }
                    return(true);
                }
            }

            var method       = binding.Method;
            var codeFunction = new VsBindingMethodLocator().FindCodeFunction(((VsProjectScope)editorContext.ProjectScope), method);

            if (codeFunction != null)
            {
                if (!codeFunction.ProjectItem.IsOpen)
                {
                    codeFunction.ProjectItem.Open();
                }
                var navigatePoint = codeFunction.GetStartPoint(vsCMPart.vsCMPartHeader);
                navigatePoint.TryToShow();
                navigatePoint.Parent.Selection.MoveToPoint(navigatePoint);
            }

            return(true);
        }
コード例 #6
0
 public bool CanGoToDefinition(GherkinEditorContext editorContext)
 {
     return(GetBindingMatchService(editorContext.LanguageService) != null && GetCurrentStep(editorContext) != null);
 }
コード例 #7
0
 public bool InvokeFromEditor(GherkinEditorContext editorContext, TestRunnerTool?runnerTool)
 {
     return(testRunnerEngine.RunFromEditor(editorContext.LanguageService, false, runnerTool));
 }
        private bool GenerateStepDefinitionSkeleton(GherkinEditorContext editorContext)
        {
            var bindingMatchService = GetBindingMatchService(editorContext.LanguageService);

            if (bindingMatchService == null)
            {
                return(false);
            }

            var fileScope = editorContext.LanguageService.GetFileScope(waitForLatest: true);

            if (fileScope == null)
            {
                return(false);
            }

            var featureTitle   = GetFeatureTitle(fileScope);
            var bindingCulture = editorContext.ProjectScope.SpecFlowConfiguration.BindingCulture ?? fileScope.GherkinDialect.CultureInfo;
            var steps          = GetUnboundSteps(bindingMatchService, fileScope, bindingCulture).ToArray();

            if (steps.Length == 0)
            {
                MessageBox.Show("All steps are bound!", "Generate step definition skeleton");
                return(true);
            }

            var specFlowProject             = ((VsProjectScope)editorContext.ProjectScope).Project;
            var defaultLanguage             = VsProjectScope.GetTargetLanguage(specFlowProject);
            var stepDefinitionSkeletonStyle = editorContext.ProjectScope.SpecFlowConfiguration.StepDefinitionSkeletonStyle;

            using (var skeletonGeneratorForm = new GenerateStepDefinitionSkeletonForm(featureTitle, steps, specFlowProject, stepDefinitionSkeletonStyle, defaultLanguage, dte))
            {
                skeletonGeneratorForm.OnPreview = (form) =>
                {
                    var skeleton = stepDefinitionSkeletonProvider.GetBindingClassSkeleton(
                        defaultLanguage, form.SelectedSteps, "MyNamespace",
                        form.ClassName, form.Style, bindingCulture);
                    MessageBox.Show(skeleton, "Step definition skeleton preview");
                };
                skeletonGeneratorForm.OnCopy = (form) =>
                {
                    var skeleton = string.Join(Environment.NewLine,
                                               form.SelectedSteps.Select(si => stepDefinitionSkeletonProvider.GetStepDefinitionSkeleton(
                                                                             defaultLanguage, si, form.Style, bindingCulture)).Distinct()).Indent(StepDefinitionSkeletonProvider.METHOD_INDENT);

                    Clipboard.SetText(skeleton);
                    return(true);
                };
                skeletonGeneratorForm.OnGenerate = (form, targetPath) =>
                {
                    var project  = GetTartgetProject(targetPath, specFlowProject);
                    var language = VsProjectScope.GetTargetLanguage(project);

                    var skeleton = stepDefinitionSkeletonProvider.GetBindingClassSkeleton(
                        language, form.SelectedSteps, CalculateNamespace(targetPath, project),
                        form.ClassName, form.Style, bindingCulture);

                    string folder = Path.GetDirectoryName(targetPath);
                    if (folder != null && !Directory.Exists(folder))
                    {
                        Directory.CreateDirectory(folder);
                    }
                    File.WriteAllText(targetPath, skeleton, Encoding.UTF8);

                    var projectItem = VsxHelper.FindProjectItemByFilePath(project, targetPath);
                    if (projectItem == null)
                    {
                        projectItem = project.ProjectItems.AddFromFile(targetPath);
                    }

                    if (projectItem != null)
                    {
                        projectItem.Open();
                    }

                    return(true);
                };

                skeletonGeneratorForm.ShowDialog();
            }

            return(true);
        }