private static async Task<MemoryStream> CopyToStream(BuildTaskResult source) { var memoryStream = new MemoryStream(); var streamTask = source.Content.ReadAsync(); if (streamTask != null) { using (var stream = await streamTask.ConfigureAwait(false)) { await stream.CopyToAsync(memoryStream).ConfigureAwait(false); } } return memoryStream; }
public async Task TestBuilderSingleItemOnAddWithBuildInBackgroundOption() { var kind = "test"; var projectItem = new ProjectItem("p1", kind); var project = new Project(); var target = new Mock<IBuildTask>(); const string targetName = "test"; target.SetupGet(t => t.Name).Returns(targetName); target.SetupGet(t => t.DependsOn).Returns(BuildQuery.SingleFromKind(kind)); target.SetupGet(t => t.Options).Returns(BuildOptions.BuildInBackground); var id = new ProjectItemIdentifier("gugus", "created"); const string contentString = "test"; var source = new BuildTaskResult(id, new ProjectItemContentFromAction(() => GenerateStreamFromString(contentString))); SetupProceed(target, projectItem).Returns(new [] { source }); var underTest = new Builder(project); underTest.AddTask(target.Object); project.AddItem(new ProjectItem("p2")); project.AddItem(projectItem); var generatedItem = project.GetItemById(id); Assert.NotNull(generatedItem); Assert.Equal(id, generatedItem.Identifier); var stream = await generatedItem.OpenRead(); //Second Stream var stream2 = await generatedItem.OpenRead(); AssertStream(stream, contentString); AssertStream(stream2, contentString); var links = projectItem.GetLinkedItems(); Assert.NotNull(links); var linkList = links.ToList(); Assert.Equal(1, linkList.Count); Assert.Equal(generatedItem, linkList[0].ProjectItem); Assert.Equal(targetName, linkList[0].Description.Name); }
//[Fact] public void Test_BuilderAddedLinks_CalledOnChange() { var kind = "test"; var project = new Project(); var observerMock = new Mock<IProjectObserver>(); project.AddObserver(observerMock.Object); var p1 = AddAndCreateItem(kind, project, "p1"); var p2 = AddAndCreateItem("related", project, "p2"); var id1 = new ProjectItemIdentifier("created", "created"); var task = new Mock<IBuildTask>(); task.SetupGet(p => p.DependsOn).Returns(BuildQuery.SingleFromKind(kind).Or(BuildQuery.Exact(p2.Identifier))); var s1 = new BuildTaskResult(id1, NullProjectItemContent.Instance); SetupProceed(task, p1).Returns(new[] { s1 }); var builder = new Builder(project); builder.AddTask(task.Object); project.Touch(p2); observerMock.Verify(s => s.NotifyItemChanged(project, It.Is<ProjectItem>(i => i.Identifier.Kind == kind)), Times.Once()); }
public void Test_Many_RemoveItemTouchesGeneratedItems() { var kind = "test"; var project = new Project(); var p1 = AddAndCreateItem(kind, project, "p1"); var p2 = AddAndCreateItem(kind, project, "p2"); var task = new Mock<IBuildTask>(); task.SetupGet(p => p.DependsOn).Returns(BuildQuery.AllFromKind(kind)); var id1 = new ProjectItemIdentifier("created", "created"); var s1 = new BuildTaskResult(id1, NullProjectItemContent.Instance); task.Setup(p => p.Proceed(It.Is<IEnumerable<ProjectItem>>(list => list.SequenceEqual(new [] {p1, p2})))) .Returns(new [] { s1 }); task.Setup(p => p.Proceed(It.Is<IEnumerable<ProjectItem>>(list => list.SequenceEqual(new [] { p2 })))) .Returns(new[] { s1 }); var builder = new Builder(project); builder.AddTask(task.Object); project.RemoveItem(p1); task.VerifyAll(); }
public void Test_OneToMany_RemoveItemRemovesGeneratedItems() { var kind = "test"; var project = new Project(); var p1 = AddAndCreateItem(kind, project, "p1"); var task = new Mock<IBuildTask>(); task.SetupGet(p => p.DependsOn).Returns(BuildQuery.SingleFromKind(kind)); var id1 = new ProjectItemIdentifier("created", "created"); var id2 = new ProjectItemIdentifier("created2", "created"); var s1 = new BuildTaskResult(id1, NullProjectItemContent.Instance); var s2 = new BuildTaskResult(id2, NullProjectItemContent.Instance); SetupProceed(task, p1).Returns(new[] { s1, s2 }); var builder = new Builder(project); builder.AddTask(task.Object); project.RemoveItem(p1); var result = project.GetItems(); Assert.NotNull(result); Assert.Empty(result); }
public void TestOneToMany() { var kind = "test"; var project = new Project(); var p1 = AddAndCreateItem(kind, project, "p1"); AddAndCreateItem(kind, project, "p2"); AddAndCreateItem(kind, project, "p3"); var task = new Mock<IBuildTask>(); task.SetupGet(p => p.DependsOn).Returns(BuildQuery.SingleFromKind(kind)); var id1 = new ProjectItemIdentifier("created", "created"); var id2 = new ProjectItemIdentifier("created2", "created"); var s1 = new BuildTaskResult(id1, NullProjectItemContent.Instance); var s2 = new BuildTaskResult(id2, NullProjectItemContent.Instance); SetupProceed(task, p1).Returns(new [] { s1, s2 }); var builder = new Builder(project); builder.AddTask(task.Object); var result = project.GetItemById(id1); Assert.NotNull(result); var linkedItems = result.GetLinkedItems(); Assert.NotNull(linkedItems); var linkedItemsList = linkedItems.ToList(); Assert.Equal(1, linkedItemsList.Count); var otherItem = linkedItemsList[0].ProjectItem.GetLinkedItems(); Assert.NotNull(otherItem); var otherItemList = otherItem.ToList(); Assert.Equal(2, otherItemList.Count); }
private static async Task<ProjectItem> BuildInMemoryItem(BuildTaskResult source) { var memoryStream = await CopyToStream(source); return new InMemoryProjectItem(source.Identifier, memoryStream.ToArray()); }