Ejemplo n.º 1
0
        public async Task GetLibraryCompletionSetAsync_ReturnsCompletionWithLatestVersion()
        {
            //Arrange
            var packageSearch = new Mock <INpmPackageSearch>();
            var infoFactory   = new Mock <INpmPackageInfoFactory>();
            var testPkgInfo   = new NpmPackageInfo(name: "testPkg", description: "description", latestVersion: "1.2.3");

            var packages = new List <NpmPackageInfo>()
            {
                testPkgInfo
            };

            packageSearch.Setup(p => p.GetPackageNamesAsync(It.Is <string>(s => string.Equals(s, "testPkg")), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult((IEnumerable <NpmPackageInfo>)packages));

            infoFactory.Setup(p => p.GetPackageInfoAsync(It.Is <string>(s => string.Equals(s, "testPkg")), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(testPkgInfo));


            JsDelivrCatalog sut = SetupCatalog(packageSearch: packageSearch.Object, infoFactory: infoFactory.Object);

            //Act
            CompletionSet result = await sut.GetLibraryCompletionSetAsync("testPkg", 7);

            //Assert
            Assert.AreEqual(1, result.Completions.Count());
            Assert.AreEqual("testPkg", result.Completions.First().DisplayText);
            Assert.AreEqual("[email protected]", result.Completions.First().InsertionText);
        }
Ejemplo n.º 2
0
        public async Task GetLibraryCompletionSetAsync_ScopedPackageNameisSingleAt_ReturnsNoCompletions()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@", 1);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
        }
Ejemplo n.º 3
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInVersionsSubstring()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/react@1", 14);

            Assert.AreEqual(13, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/react"));
        }
Ejemplo n.º 4
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndTrailingAt_CursorAtName()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/react@", 6);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(13, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/react"));
        }
Ejemplo n.º 5
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInNameSubstring()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/[email protected]", 8);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(17, result.Length);
            Assert.AreEqual(1, result.Completions.Count());
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/node"));
        }
Ejemplo n.º 6
0
        public async Task GetLibraryCompletionSetAsync_EmptyString()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CancellationToken token  = CancellationToken.None;
            CompletionSet     result = await sut.GetLibraryCompletionSetAsync(string.Empty, 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
        }
Ejemplo n.º 7
0
        public async Task GetLibraryCompletionSetAsync_EmptyString_MakesNoWebRequest()
        {
            var             mockRequestHandler = new Mock <IWebRequestHandler>();
            JsDelivrCatalog sut = SetupCatalog(mockRequestHandler.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(string.Empty, 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
            mockRequestHandler.Verify(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 8
0
        [Ignore] // Enable it after version completion sorting is committed.
                 // TODO: Also add a test for GitHub version completion
        public async Task GetLibraryCompletionSetAsync_Versions()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("jquery@", 7);

            Assert.AreEqual(7, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.AreEqual("1.5.1", result.Completions.Last().DisplayText);
            Assert.AreEqual("[email protected]", result.Completions.Last().InsertionText);
        }
Ejemplo n.º 9
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithName()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/node", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            Assert.AreEqual(25, result.Completions.Count());
            Assert.AreEqual("@types/node", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/node"));
        }
Ejemplo n.º 10
0
        public async Task GetLibraryCompletionSetAsync_Names()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("jquery", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(6, result.Length);
            Assert.AreEqual(100, result.Completions.Count());
            Assert.AreEqual("jquery", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("jquery"));
        }
Ejemplo n.º 11
0
        public async Task GetLibraryCompletionsSetAsync_Versions_GitHub_CacheRequestFails_ShouldReturnEmptyList()
        {
            var cacheService = new Mock <ICacheService>();

            cacheService.SetupBlockRequests();
            JsDelivrCatalog sut = SetupCatalog(cacheService: cacheService.Object);

            string        fakeLibName = "fake/fakeLib@abcdef";
            CompletionSet result      = await sut.GetLibraryCompletionSetAsync(fakeLibName, fakeLibName.IndexOf('c'));

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Completions.Any());
        }
Ejemplo n.º 12
0
        public async Task GetLibraryCompletionsSetAsync_Versions_GitHub_ResultsFromCache()
        {
            var cacheService = new Mock <ICacheService>();

            cacheService.SetupGitHubLibraryVersions("fake/fakeLib");
            JsDelivrCatalog sut = SetupCatalog(cacheService: cacheService.Object);

            string        fakeLibraryId = "fake/fakeLib@abcdef";
            CompletionSet result        = await sut.GetLibraryCompletionSetAsync(fakeLibraryId, fakeLibraryId.IndexOf('c'));

            Assert.IsNotNull(result);
            CollectionAssert.AreEquivalent(new[] { "0.1.2", "1.2.3", "latest" }, result.Completions.Select(x => x.DisplayText).ToList());
        }
Ejemplo n.º 13
0
        public async Task GetLibraryCompletionSetAsync_LibraryNameWithLeadingAndTrailingWhitespace()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CancellationToken token  = CancellationToken.None;
            CompletionSet     result = await sut.GetLibraryCompletionSetAsync("    jquery ", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            Assert.AreEqual(100, result.Completions.Count());
            Assert.AreEqual("jquery", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("jquery"));
        }
Ejemplo n.º 14
0
        public async Task GetLibraryCompletionSetAsync_ScopedPackageNameisSingleAt_ReturnsNoCompletions_MakesNoWebRequest()
        {
            var             mockRequestHandler = new Mock <IWebRequestHandler>();
            JsDelivrCatalog sut = SetupCatalog(mockRequestHandler.Object);

            (string nameStart, int caretPos) = ExtractCaret("@|");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
            mockRequestHandler.Verify(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 15
0
        public async Task GetLibraryCompletionSetAsync_LibraryNameWithLeadingAndTrailingWhitespace_WhitespaceIncludedInSearchTerm()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            mockSearch.Setup(m => m.GetPackageNamesAsync("    jquery ", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("    jquery ", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 16
0
        public async Task GetLibraryCompletionSetAsync_Versions_Npm_ResultsFromCache()
        {
            var fakeNpmPackageInfoFactory = new Mock <INpmPackageInfoFactory>();

            fakeNpmPackageInfoFactory.Setup(x => x.GetPackageInfoAsync("fakeLib", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new NpmPackageInfo("fakeLib", "Fake library", "1.0.0", new[] { SemanticVersion.Parse("1.0.0"), SemanticVersion.Parse("2.0.0-beta") })));
            JsDelivrCatalog sut = SetupCatalog(infoFactory: fakeNpmPackageInfoFactory.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("fakeLib@", 8);

            Assert.AreEqual(8, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            CollectionAssert.AreEquivalent(new[] { "1.0.0", "2.0.0-beta", "latest" },
                                           result.Completions.Select(x => x.DisplayText).ToList());
        }
Ejemplo n.º 17
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithName()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            mockSearch.Setup(m => m.GetPackageNamesAsync("@testscope/package", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            (string nameStart, int caretPos) = ExtractCaret("|@testscope/package");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(18, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 18
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInNameSubstring()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            // TODO: do we really not strip the version out here?  Seems like we should...
            mockSearch.Setup(m => m.GetPackageNamesAsync("@types/[email protected]", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            (string nameStart, int caretPos) = ExtractCaret("@types/no|[email protected]");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(17, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 19
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInVersionsSubstring()
        {
            var mockPackageInfoFactory = new Mock <INpmPackageInfoFactory>();

            mockPackageInfoFactory.Setup(m => m.GetPackageInfoAsync("@types/react", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new NpmPackageInfo("fakepackage", "", "2.0.0", new List <SemanticVersion> {
                SemanticVersion.Parse("1.0.0"), SemanticVersion.Parse("2.0.0")
            })));
            JsDelivrCatalog sut = SetupCatalog(infoFactory: mockPackageInfoFactory.Object);

            (string nameStart, int caretPos) = ExtractCaret("@types/react@1|");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(13, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(CompletionSortOrder.Version, result.CompletionType);
            CollectionAssert.AreEqual(new[] { "2.0.0", "1.0.0", "latest" },
                                      result.Completions.Select(c => c.DisplayText).ToList());
        }