public async Task CanSendReferencesCodeLensRequest()
        {
            string filePath = NewTestFile(@"
function CanSendReferencesCodeLensRequest {

}

CanSendReferencesCodeLensRequest
");

            CodeLensContainer codeLenses = await LanguageClient.SendRequest <CodeLensContainer>(
                "textDocument/codeLens",
                new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(filePath)
                }
            });

            CodeLens codeLens = Assert.Single(codeLenses);

            Range range = codeLens.Range;

            Assert.Equal(1, range.Start.Line);
            Assert.Equal(0, range.Start.Character);
            Assert.Equal(3, range.End.Line);
            Assert.Equal(1, range.End.Character);

            CodeLens codeLensResolveResult = await LanguageClient.SendRequest <CodeLens>(
                "codeLens/resolve",
                codeLens);

            Assert.Equal("1 reference", codeLensResolveResult.Command.Title);
        }
コード例 #2
0
        public async Task Should_Resolve_Partial()
        {
            var(client, server) = await Initialize(
                options => { }, options => {
                options.OnCodeLens(
                    (codeLensParams, observer) => {
                    var a = new CodeLensContainer(
                        new CodeLens {
                        Command = new Command {
                            Name      = "execute-a",
                            Arguments = JArray.FromObject(new object[] { 1, "2", false })
                        },
                    }
                        );

                    observer.OnNext(a);
                    observer.OnCompleted();
                },
                    codeLens => {
                    codeLens.Command.Name = "resolved";
                    return(Task.FromResult(codeLens));
                },
                    new CodeLensRegistrationOptions()
                    );
            }
                );

            var item = await client.RequestCodeLens(new CodeLensParams()).SelectMany(z => z).Take(1).ToTask(CancellationToken);

            item = await client.ResolveCodeLens(item);

            item.Command.Name.Should().Be("resolved");
        }
        public async Task CanSendPesterLegacyCodeLensRequest()
        {
            // Make sure LegacyCodeLens is enabled because we'll need it in this test.
            LanguageClient.Workspace.DidChangeConfiguration(JObject.Parse(@"
{
    ""powershell"": {
        ""pester"": {
            ""useLegacyCodeLens"": true
        }
    }
}
"));

            string filePath = NewTestFile(@"
Describe 'DescribeName' {
    Context 'ContextName' {
        It 'ItName' {
            1 | Should - Be 1
        }
    }
}
", isPester: true);

            CodeLensContainer codeLenses = await LanguageClient.SendRequest <CodeLensContainer>(
                "textDocument/codeLens",
                new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(filePath)
                }
            });

            Assert.Collection(codeLenses,
                              codeLens1 =>
            {
                Range range = codeLens1.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Run tests", codeLens1.Command.Title);
            },
                              codeLens2 =>
            {
                Range range = codeLens2.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Debug tests", codeLens2.Command.Title);
            });
        }
コード例 #4
0
        protected void RunCodeLens(string testfile)
        {
            CodeLensParams codeLensParams = new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier(new Uri(testfile))
            };

            Client.TextDocument.DidOpen(testfile, "dfy");
            var response = Client.SendRequest <CodeLensContainer>("textDocument/codeLens", codeLensParams, CancellationToken.None);

            codelensResults = response.Result;
        }
        public async Task Should_Update_CodeLensContainer_With_HandlerType()
        {
            // Given
            var resolveHandler = Substitute.For(
                new[] {
                typeof(ICodeLensHandler),
                typeof(ICodeLensResolveHandler),
                typeof(ICanBeIdentifiedHandler)
            }, new object[0]
                );

            (resolveHandler as ICanBeIdentifiedHandler)?.Id.Returns(TrueId);
            var descriptor = new LspHandlerDescriptor(
                TextDocumentNames.CodeLens,
                "Key",
                resolveHandler as IJsonRpcHandler,
                resolveHandler.GetType(),
                typeof(CodeLensParams),
                null,
                null,
                () => false,
                null,
                null,
                () => { },
                Substitute.For <ILspHandlerTypeDescriptor>()
                );
            var handlerMatcher = new ResolveCommandPipeline <CodeLensParams, CodeLensContainer>(
                new RequestContext {
                Descriptor = descriptor
            },
                Substitute.For <ILogger <ResolveCommandPipeline <CodeLensParams, CodeLensContainer> > >()
                );

            var item = new CodeLens {
                Data = JObject.FromObject(new { hello = "world" })
            };
            var list = new CodeLensContainer(item);

            (list is IEnumerable <ICanBeResolved>).Should().BeTrue();

            // When
            var response = await handlerMatcher.Handle(new CodeLensParams(), CancellationToken.None, () => Task.FromResult(list));

            // Then
            response.Should().BeEquivalentTo(list);
            response.Should().Contain(item);
            var responseItem = response.First();

            responseItem.Data[Constants.PrivateHandlerId].Value <Guid>().Should().Be(TrueId);
            responseItem.Data["hello"].Value <string>().Should().Be("world");
        }
コード例 #6
0
        public async Task Should_Update_CodeLensContainer_With_HandlerType()
        {
            // Given
            var resolveHandler = Substitute.For(new Type[] {
                typeof(ICodeLensHandler),
                typeof(ICodeLensResolveHandler)
            }, new object[0]);

            (resolveHandler as ICodeLensResolveHandler).CanResolve(Arg.Any <CodeLens>()).Returns(true);
            var descriptor = new HandlerDescriptor(
                DocumentNames.CodeLens,
                "Key",
                resolveHandler as IJsonRpcHandler,
                resolveHandler.GetType(),
                typeof(CodeLensParams),
                null,
                null,
                false,
                null,
                () => { });
            var handlerMatcher = new ResolveCommandPipeline <CodeLensParams, CodeLensContainer>(
                new RequestContext()
            {
                Descriptor = descriptor
            },
                Substitute.For <ILogger <ResolveCommandPipeline <CodeLensParams, CodeLensContainer> > >());

            var item = new CodeLens()
            {
                Data = JObject.FromObject(new { hello = "world" })
            };
            var list = new CodeLensContainer(new[] { item });

            (list is IEnumerable <ICanBeResolved>).Should().BeTrue();

            // When
            var response = await handlerMatcher.Handle(new CodeLensParams(), CancellationToken.None, () => Task.FromResult(list));

            // Then
            response.Should().BeEquivalentTo(list);
            (response as CodeLensContainer).Should().Contain(item);
            var responseItem = (response as CodeLensContainer).First();

            responseItem.Data[ResolveCommandMatcher.PrivateHandlerTypeName].Value <string>().Should().NotBeNullOrEmpty();
            responseItem.Data[ResolveCommandMatcher.PrivateHandlerKey].Value <string>().Should().NotBeNullOrEmpty();
            responseItem.Data["data"]["hello"].Value <string>().Should().Be("world");
        }
コード例 #7
0
        public async Task CanSendPesterCodeLensRequest()
        {
            string filePath = NewTestFile(@"
Describe 'DescribeName' {
    Context 'ContextName' {
        It 'ItName' {
            1 | Should - Be 1
        }
    }
}
", isPester: true);

            CodeLensContainer codeLenses = await LanguageClient.SendRequest <CodeLensContainer>(
                "textDocument/codeLens",
                new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(filePath)
                }
            });

            Assert.Collection(codeLenses,
                              codeLens1 =>
            {
                Range range = codeLens1.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Run tests", codeLens1.Command.Title);
            },
                              codeLens2 =>
            {
                Range range = codeLens2.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Debug tests", codeLens2.Command.Title);
            });
        }
コード例 #8
0
        public async Task Should_Resolve_With_Partial_Data()
        {
            var(client, server) = await Initialize(
                options => { }, options => {
                options.OnCodeLens <Data>(
                    (codeLensParams, observer) => {
                    var a = new CodeLensContainer <Data>(
                        new CodeLens <Data> {
                        Command = new Command {
                            Name      = "execute-a",
                            Arguments = JArray.FromObject(new object[] { 1, "2", false })
                        },
                        Data = new Data {
                            Child = new Nested {
                                Date = DateTimeOffset.MinValue
                            },
                            Id   = Guid.NewGuid(),
                            Name = "name"
                        }
                    }
                        );

                    observer.OnNext(a);
                    observer.OnCompleted();
                },
                    codeLens => {
                    codeLens.Data.Id.Should().NotBeEmpty();
                    codeLens.Data.Child.Should().NotBeNull();
                    codeLens.Data.Name.Should().Be("name");
                    codeLens.Command.Name = "resolved";
                    return(Task.FromResult(codeLens));
                },
                    new CodeLensRegistrationOptions()
                    );
            }
                );

            var item = await client.RequestCodeLens(new CodeLensParams()).SelectMany(z => z).Take(1).ToTask(CancellationToken);

            item = await client.ResolveCodeLens(item);

            item.Command.Name.Should().Be("resolved");
        }
        public async Task NoMessageIfPesterCodeLensDisabled()
        {
            // Make sure Pester legacy CodeLens is disabled because we'll need it in this test.
            PsesLanguageClient.Workspace.DidChangeConfiguration(
                new DidChangeConfigurationParams
            {
                Settings = JObject.Parse(@"
{
    ""powershell"": {
        ""pester"": {
            ""codeLens"": false
        }
    }
}
")
            });

            string filePath = NewTestFile(@"
Describe 'DescribeName' {
    Context 'ContextName' {
        It 'ItName' {
            1 | Should - Be 1
        }
    }
}
", isPester: true);

            CodeLensContainer codeLenses = await PsesLanguageClient
                                           .SendRequest <CodeLensParams>(
                "textDocument/codeLens",
                new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(filePath)
                }
            })
                                           .Returning <CodeLensContainer>(CancellationToken.None).ConfigureAwait(false);

            Assert.Empty(codeLenses);
        }
コード例 #10
0
        public void Should_Update_CodeLensContainer_With_HandlerType()
        {
            // Given
            var handlerMatcher = new ResolveCommandMatcher(_logger);
            var resolveHandler = Substitute.For(new Type[] {
                typeof(ICodeLensHandler),
                typeof(ICodeLensResolveHandler)
            }, new object[0]);

            (resolveHandler as ICodeLensResolveHandler).CanResolve(Arg.Any <CodeLens>()).Returns(true);
            var descriptor = new HandlerDescriptor(
                DocumentNames.CodeLens,
                "Key",
                resolveHandler as IJsonRpcHandler,
                resolveHandler.GetType(),
                typeof(CodeLensParams),
                null,
                null,
                () => { });

            var item = new CodeLens()
            {
                Data = JObject.FromObject(new { hello = "world" })
            };
            var list = new CodeLensContainer(new[] { item });

            (list is IEnumerable <ICanBeResolved>).Should().BeTrue();

            // When
            var response = handlerMatcher.Process(descriptor, new CodeLensParams(), list);

            // Then
            response.Should().Be(list);
            (response as CodeLensContainer).Should().Contain(item);
            var responseItem = (response as CodeLensContainer).First();

            responseItem.Data[ResolveCommandMatcher.PrivateHandlerTypeName].Value <string>().Should().NotBeNullOrEmpty();
            responseItem.Data[ResolveCommandMatcher.PrivateHandlerKey].Value <string>().Should().NotBeNullOrEmpty();
            responseItem.Data["data"]["hello"].Value <string>().Should().Be("world");
        }
コード例 #11
0
        public async Task CanSendPesterCodeLensRequestAsync()
        {
            // Make sure Pester legacy CodeLens is disabled because we'll need it in this test.
            PsesLanguageClient.Workspace.DidChangeConfiguration(
                new DidChangeConfigurationParams
            {
                Settings = JObject.Parse(@"
{
    ""powershell"": {
        ""pester"": {
            ""useLegacyCodeLens"": false
        }
    }
}
")
            });

            string filePath = NewTestFile(@"
Describe 'DescribeName' {
    Context 'ContextName' {
        It 'ItName' {
            1 | Should - Be 1
        }
    }
}
", isPester: true);

            CodeLensContainer codeLenses = await PsesLanguageClient
                                           .SendRequest <CodeLensParams>(
                "textDocument/codeLens",
                new CodeLensParams
            {
                TextDocument = new TextDocumentIdentifier
                {
                    Uri = new Uri(filePath)
                }
            })
                                           .Returning <CodeLensContainer>(CancellationToken.None).ConfigureAwait(false);

            Assert.Collection(codeLenses,
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Run tests", codeLens.Command.Title);
            },
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(1, range.Start.Line);
                Assert.Equal(0, range.Start.Character);
                Assert.Equal(7, range.End.Line);
                Assert.Equal(1, range.End.Character);

                Assert.Equal("Debug tests", codeLens.Command.Title);
            },
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(2, range.Start.Line);
                Assert.Equal(4, range.Start.Character);
                Assert.Equal(6, range.End.Line);
                Assert.Equal(5, range.End.Character);

                Assert.Equal("Run tests", codeLens.Command.Title);
            },
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(2, range.Start.Line);
                Assert.Equal(4, range.Start.Character);
                Assert.Equal(6, range.End.Line);
                Assert.Equal(5, range.End.Character);

                Assert.Equal("Debug tests", codeLens.Command.Title);
            },
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(3, range.Start.Line);
                Assert.Equal(8, range.Start.Character);
                Assert.Equal(5, range.End.Line);
                Assert.Equal(9, range.End.Character);

                Assert.Equal("Run test", codeLens.Command.Title);
            },
                              codeLens =>
            {
                Range range = codeLens.Range;

                Assert.Equal(3, range.Start.Line);
                Assert.Equal(8, range.Start.Character);
                Assert.Equal(5, range.End.Line);
                Assert.Equal(9, range.End.Character);

                Assert.Equal("Debug test", codeLens.Command.Title);
            });
        }
コード例 #12
0
 public void CleanResults()
 {
     codelensResults = null;
 }