コード例 #1
0
        public void Fails_WhenStaticWebAsset_DoesNotContainContentRoot()
        {
            // Arrange
            var errorMessages = new List <string>();
            var buildEngine   = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogErrorEvent(It.IsAny <BuildErrorEventArgs>()))
            .Callback <BuildErrorEventArgs>(args => errorMessages.Add(args.Message));

            var task = new GenerateStaticWebAsssetsPropsFile
            {
                BuildEngine     = buildEngine.Object,
                StaticWebAssets = new TaskItem[]
                {
                    CreateItem(Path.Combine("wwwroot", "js", "sample.js"), new Dictionary <string, string>
                    {
                        ["SourceType"]   = "",
                        ["SourceId"]     = "MyLibrary",
                        ["BasePath"]     = "_content/mylibrary",
                        ["RelativePath"] = Path.Combine("js", "sample.js"),
                    })
                }
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().BeFalse();
            var expectedError = $"Missing required metadata 'ContentRoot' for '{Path.Combine("wwwroot", "js", "sample.js")}'.";

            errorMessages.Should().ContainSingle(message => message == expectedError);
        }
コード例 #2
0
        public void Fails_WhenStaticWebAsset_HaveDifferentContentRoot()
        {
            // Arrange
            var expectedError = "Static web assets have different 'ContentRoot' metadata values " +
                                @"'$(MSBuildThisFileDirectory)..\staticwebassets' and '..\staticwebassets' " +
                                $"for '{Path.Combine("wwwroot", "js", "sample.js")}' and '{Path.Combine("wwwroot", "css", "site.css")}'.";

            var errorMessages = new List <string>();
            var buildEngine   = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogErrorEvent(It.IsAny <BuildErrorEventArgs>()))
            .Callback <BuildErrorEventArgs>(args => errorMessages.Add(args.Message));

            var task = new GenerateStaticWebAsssetsPropsFile
            {
                BuildEngine     = buildEngine.Object,
                StaticWebAssets = new TaskItem[]
                {
                    CreateItem(Path.Combine("wwwroot", "js", "sample.js"), new Dictionary <string, string>
                    {
                        ["SourceType"]             = "Discovered",
                        ["SourceId"]               = "MyLibrary",
                        ["ContentRoot"]            = @"$(MSBuildThisFileDirectory)..\staticwebassets",
                        ["BasePath"]               = "_content/mylibrary",
                        ["RelativePath"]           = Path.Combine("js", "sample.js"),
                        ["AssetKind"]              = "All",
                        ["AssetMode"]              = "All",
                        ["AssetRole"]              = "Primary",
                        ["RelatedAsset"]           = "",
                        ["AssetTraitName"]         = "",
                        ["AssetTraitValue"]        = "",
                        ["CopyToOutputDirectory"]  = "Never",
                        ["CopyToPublishDirectory"] = "PreserveNewest"
                    }),
                    CreateItem(Path.Combine("wwwroot", "css", "site.css"), new Dictionary <string, string>
                    {
                        ["SourceType"]             = "Discovered",
                        ["SourceId"]               = "MyLibrary",
                        ["ContentRoot"]            = @"..\staticwebassets",
                        ["BasePath"]               = "_content/mylibrary",
                        ["RelativePath"]           = Path.Combine("css", "site.css"),
                        ["AssetKind"]              = "All",
                        ["AssetMode"]              = "All",
                        ["AssetRole"]              = "Primary",
                        ["RelatedAsset"]           = "",
                        ["AssetTraitName"]         = "",
                        ["AssetTraitValue"]        = "",
                        ["CopyToOutputDirectory"]  = "Never",
                        ["CopyToPublishDirectory"] = "PreserveNewest"
                    })
                }
            };

            // Act
            var result = task.Execute();

            // Assert
            result.Should().BeFalse();
            errorMessages.Should().ContainSingle(message => message == expectedError);
        }
コード例 #3
0
        public void WritesPropsFile_WhenThereIsAtLeastOneStaticAsset()
        {
            // Arrange
            var file             = Path.GetTempFileName();
            var expectedDocument = @"<Project>
  <ItemGroup>
    <StaticWebAsset Include=""$(MSBuildThisFileDirectory)..\staticwebassets\js\sample.js"">
      <SourceType>Package</SourceType>
      <SourceId>MyLibrary</SourceId>
      <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot>
      <BasePath>_content/mylibrary</BasePath>
      <RelativePath>js/sample.js</RelativePath>
    </StaticWebAsset>
  </ItemGroup>
</Project>";

            try
            {
                var buildEngine = new Mock <IBuildEngine>();

                var task = new GenerateStaticWebAsssetsPropsFile
                {
                    BuildEngine         = buildEngine.Object,
                    TargetPropsFilePath = file,
                    StaticWebAssets     = new TaskItem[]
                    {
                        CreateItem(Path.Combine("wwwroot", "js", "sample.js"), new Dictionary <string, string>
                        {
                            ["SourceType"]   = "",
                            ["SourceId"]     = "MyLibrary",
                            ["ContentRoot"]  = @"$(MSBuildThisFileDirectory)..\staticwebassets",
                            ["BasePath"]     = "_content/mylibrary",
                            ["RelativePath"] = Path.Combine("js", "sample.js").Replace("\\", "/"),
                        }),
                    }
                };

                // Act
                var result = task.Execute();

                // Assert
                result.Should().BeTrue();
                var document = File.ReadAllText(file);
                document.Should().Contain(expectedDocument);
            }
            finally
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }
            }
        }
コード例 #4
0
        public void WritesIndividualItems_WithTheirRespectiveBaseAndRelativePaths()
        {
            // Arrange
            var file             = Path.GetTempFileName();
            var expectedDocument = @"<Project>
  <ItemGroup>
    <StaticWebAsset Include=""$(MSBuildThisFileDirectory)..\staticwebassets\App.styles.css"">
      <SourceType>Package</SourceType>
      <SourceId>MyLibrary</SourceId>
      <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot>
      <BasePath>/</BasePath>
      <RelativePath>App.styles.css</RelativePath>
    </StaticWebAsset>
    <StaticWebAsset Include=""$(MSBuildThisFileDirectory)..\staticwebassets\js\sample.js"">
      <SourceType>Package</SourceType>
      <SourceId>MyLibrary</SourceId>
      <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot>
      <BasePath>_content/mylibrary</BasePath>
      <RelativePath>js/sample.js</RelativePath>
    </StaticWebAsset>
  </ItemGroup>
</Project>";

            try
            {
                var buildEngine = new Mock <IBuildEngine>();

                var task = new GenerateStaticWebAsssetsPropsFile
                {
                    BuildEngine         = buildEngine.Object,
                    TargetPropsFilePath = file,
                    StaticWebAssets     = new TaskItem[]
                    {
                        CreateItem(Path.Combine("wwwroot", "js", "sample.js"), new Dictionary <string, string>
                        {
                            ["SourceType"]   = "",
                            ["SourceId"]     = "MyLibrary",
                            ["ContentRoot"]  = @"$(MSBuildThisFileDirectory)..\staticwebassets",
                            ["BasePath"]     = "_content/mylibrary",
                            ["RelativePath"] = Path.Combine("js", "sample.js").Replace("\\", "/"),
                        }),
                        CreateItem(Path.Combine("wwwroot", "App.styles.css"), new Dictionary <string, string>
                        {
                            ["SourceType"]   = "",
                            ["SourceId"]     = "MyLibrary",
                            ["ContentRoot"]  = @"$(MSBuildThisFileDirectory)..\staticwebassets",
                            ["BasePath"]     = "/",
                            ["RelativePath"] = "App.styles.css",
                        }),
                    }
                };

                // Act
                var result = task.Execute();

                // Assert
                Assert.True(result);
                var document = File.ReadAllText(file);
                Assert.Equal(expectedDocument, document, ignoreLineEndingDifferences: true);
            }
            finally
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }
            }
        }
コード例 #5
0
        public void WritesPropsFile_WhenThereIsAtLeastOneStaticAsset()
        {
            // Arrange
            var file             = Path.GetTempFileName();
            var expectedDocument = @"<Project>
  <ItemGroup>
    <StaticWebAsset Include=""$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\js\sample.js))"">
      <SourceType>Package</SourceType>
      <SourceId>MyLibrary</SourceId>
      <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot>
      <BasePath>_content/mylibrary</BasePath>
      <RelativePath>js/sample.js</RelativePath>
      <AssetKind>All</AssetKind>
      <AssetMode>All</AssetMode>
      <AssetRole>Primary</AssetRole>
      <RelatedAsset></RelatedAsset>
      <AssetTraitName></AssetTraitName>
      <AssetTraitValue></AssetTraitValue>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      <OriginalItemSpec>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\js\sample.js))</OriginalItemSpec>
    </StaticWebAsset>
  </ItemGroup>
</Project>";

            try
            {
                var buildEngine = new Mock <IBuildEngine>();

                var task = new GenerateStaticWebAsssetsPropsFile
                {
                    BuildEngine         = buildEngine.Object,
                    TargetPropsFilePath = file,
                    StaticWebAssets     = new TaskItem[]
                    {
                        CreateItem(Path.Combine("wwwroot", "js", "sample.js"), new Dictionary <string, string>
                        {
                            ["SourceType"]             = "Discovered",
                            ["SourceId"]               = "MyLibrary",
                            ["ContentRoot"]            = @"$(MSBuildThisFileDirectory)..\staticwebassets",
                            ["BasePath"]               = "_content/mylibrary",
                            ["RelativePath"]           = Path.Combine("js", "sample.js").Replace("\\", "/"),
                            ["AssetKind"]              = "All",
                            ["AssetMode"]              = "All",
                            ["AssetRole"]              = "Primary",
                            ["RelatedAsset"]           = "",
                            ["AssetTraitName"]         = "",
                            ["AssetTraitValue"]        = "",
                            ["CopyToOutputDirectory"]  = "Never",
                            ["CopyToPublishDirectory"] = "PreserveNewest"
                        }),
                    }
                };

                // Act
                var result = task.Execute();

                // Assert
                result.Should().BeTrue();
                var document = File.ReadAllText(file);
                document.Should().Contain(expectedDocument);
            }
            finally
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }
            }
        }