コード例 #1
0
            public async Task InvalidatesAllWithSameSource()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a1");
                TestDocument a2 = new TestDocument(new NormalizedPath("/a"), "a2");
                TestDocument a3 = new TestDocument(new NormalizedPath("/a"), "a3");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false));

                // When
                _ = await ExecuteAsync(new[] { a1, a2, b1 }, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(new[] { a1, a3, b1 }, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a1", "a2", "b", "a1", "a3" });
                results.Select(x => x.Content).ShouldBe(new[] { "b", "a1", "a3" });
            }
コード例 #2
0
            public async Task DocumentDependenciesChange()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a1");
                TestDocument a2 = new TestDocument(new NormalizedPath("/a"), "a2");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");
                TestDocument d1 = new TestDocument(new NormalizedPath("/d1"), "d1");
                TestDocument d2 = new TestDocument(new NormalizedPath("/d2"), "d2");
                TestDocument d3 = new TestDocument(new NormalizedPath("/d2"), "d3");

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false))
                                                .WithDocumentDependencies(Config.FromDocument(async doc =>
                                                                                              (await doc.GetContentStringAsync()).Equals("a2")
                            ? (missedContent.Count == 0
                                ? new[] { d1, d2 }
                                : new[] { d1, d3 })
                            : (IEnumerable <IDocument>)null));

                // When
                _ = await ExecuteAsync(new[] { a1, a2, b1 }, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(new[] { a1, a2, b1 }, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a1", "a2", "b", "a1", "a2" });
                results.Select(x => x.Content).ShouldBe(new[] { "b", "a1", "a2" });
            }
コード例 #3
0
            public async Task CachesDocumentsForSameDependencies()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");
                TestDocument d1 = new TestDocument(new NormalizedPath("/d1"), "d1");
                TestDocument d2 = new TestDocument(new NormalizedPath("/d2"), "d2");

                TestExecutionContext executionContext = new TestExecutionContext(new[] { a1, b1 });

                executionContext.Outputs.Dictionary["Foo"] = ImmutableArray.Create <IDocument>(d1, d2);

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false))
                                                .WithPipelineDependencies("Foo");

                // When
                _ = await ExecuteAsync(executionContext, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(executionContext, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a", "b" });
                results.Select(x => x.Content).ShouldBe(new[] { "a", "b" });
            }
コード例 #4
0
            public async Task ResetsCache()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");
                TestDocument b2 = new TestDocument(new NormalizedPath("/b"), "b2");

                TestExecutionContext executionContext1 = new TestExecutionContext(new[] { a1, b1 });
                TestExecutionContext executionContext2 = new TestExecutionContext(new[] { a1, b2 });

                executionContext2.Settings.Add(Keys.ResetCache, "true");
                TestExecutionContext executionContext3 = new TestExecutionContext(new[] { a1, b2 });

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false));

                // When
                _ = await ExecuteAsync(executionContext1, cacheDocuments);

                _ = await ExecuteAsync(executionContext2, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(executionContext3, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a", "b", "a", "b2", });
                results.Select(x => x.Content).ShouldBe(new[] { "a", "b2" });
            }
コード例 #5
0
            public async Task CachesDocuments()
            {
                // Given
                TestDocument   a1             = new TestDocument(new FilePath("/input/a"), "a");
                TestDocument   b1             = new TestDocument(new FilePath("/input/b"), "b");
                TestDocument   a2             = new TestDocument(new FilePath("/input/a"), "aa");
                TestDocument   b2             = new TestDocument(new FilePath("/input/b"), "b");
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new SetMetadata("Content", Config.FromDocument(async doc => await doc.GetContentStringAsync())));

                // When
                _ = await ExecuteAsync(new[] { a1, b1 }, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(new[] { a2, b2 }, cacheDocuments);

                // Then
                CollectionAssert.AreEqual(new[] { "b", "aa" }, results.Select(x => x["Content"]));
                CollectionAssert.AreEqual(new[] { b1.Id, a2.Id }, results.Select(x => x.Id));
            }
コード例 #6
0
            public async Task OnlySendsCacheMissesToChildModules()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");
                TestDocument b2 = new TestDocument(new NormalizedPath("/b"), "b2");

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false));

                // When
                _ = await ExecuteAsync(new[] { a1, b1 }, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(new[] { a1, b2 }, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a", "b", "b2" });
                results.Select(x => x.Content).ShouldBe(new[] { "a", "b2" });
            }
コード例 #7
0
            public async Task ExplicitlyInvalidateDocument()
            {
                // Given
                TestDocument a1 = new TestDocument(new NormalizedPath("/a"), "a");
                TestDocument b1 = new TestDocument(new NormalizedPath("/b"), "b");

                List <string>  missedContent  = new List <string>();
                CacheDocuments cacheDocuments = new CacheDocuments(
                    new ExecuteConfig(Config.FromDocument(async doc =>
                {
                    missedContent.Add(await doc.GetContentStringAsync());
                    return(doc);
                })).WithParallelExecution(false))
                                                .InvalidateDocumentsWhere(Config.FromDocument(async doc => (await doc.GetContentStringAsync()).Equals("b")));

                // When
                _ = await ExecuteAsync(new[] { a1, b1 }, cacheDocuments);

                IReadOnlyList <TestDocument> results = await ExecuteAsync(new[] { a1, b1 }, cacheDocuments);

                // Then
                missedContent.ShouldBe(new[] { "a", "b", "b" });
                results.Select(x => x.Content).ShouldBe(new[] { "a", "b" });
            }