public void ComputeDevelopmentManifest_UsesIdentityWhenContentRootStartsByIdentity()
        {
            // Arrange
            var messages    = new List <string>();
            var buildEngine = new Mock <IBuildEngine>();

            buildEngine.Setup(e => e.LogMessageEvent(It.IsAny <BuildMessageEventArgs>()))
            .Callback <BuildMessageEventArgs>(args => messages.Add(args.Message));

            var expectedManifest = CreateExpectedManifest(
                CreateIntermediateNode(
                    ("index.html", CreateMatchNode(0, StaticWebAsset.Normalize(Path.Combine("some", "subfolder", "index.build.html"))))),
                Environment.CurrentDirectory);

            var task = new GenerateStaticWebAssetsDevelopmentManifest()
            {
                BuildEngine = buildEngine.Object,
                Source      = "CurrentProjectId"
            };

            var assets = new[] {
                CreateAsset(Path.Combine("some", "subfolder", "index.build.html"), "index.html"),
            };
            var patterns = Array.Empty <StaticWebAssetsManifest.DiscoveryPattern>();

            // Act
            var manifest = task.ComputeDevelopmentManifest(assets, patterns);

            // Assert
            manifest.ShouldBeEquivalentTo(expectedManifest);
        }
        private ITaskItem CreateCandidate(
            string itemSpec,
            string sourceId,
            string sourceType,
            string relativePath,
            string assetKind,
            string assetMode)
        {
            var result = new StaticWebAsset()
            {
                Identity               = Path.GetFullPath(itemSpec),
                SourceId               = sourceId,
                SourceType             = sourceType,
                ContentRoot            = Directory.GetCurrentDirectory(),
                BasePath               = "base",
                RelativePath           = relativePath,
                AssetKind              = assetKind,
                AssetMode              = assetMode,
                AssetRole              = "Primary",
                RelatedAsset           = "",
                AssetTraitName         = "",
                AssetTraitValue        = "",
                CopyToOutputDirectory  = "",
                CopyToPublishDirectory = "",
                OriginalItemSpec       = itemSpec,
            };

            result.ApplyDefaults();
            result.Normalize();

            return(result.ToTaskItem());
        }
        private static StaticWebAsset CreateAsset(
            string itemSpec,
            string sourceId,
            string sourceType,
            string relativePath,
            string assetKind,
            string assetMode,
            string basePath                = "base",
            string assetRole               = "Primary",
            string relatedAsset            = "",
            string assetTraitName          = "",
            string assetTraitValue         = "",
            string copyToOutputDirectory   = "Never",
            string copytToPublishDirectory = "PreserveNewest")
        {
            var result = new StaticWebAsset()
            {
                Identity               = Path.GetFullPath(itemSpec),
                SourceId               = sourceId,
                SourceType             = sourceType,
                ContentRoot            = Directory.GetCurrentDirectory(),
                BasePath               = basePath,
                RelativePath           = relativePath,
                AssetKind              = assetKind,
                AssetMode              = assetMode,
                AssetRole              = assetRole,
                RelatedAsset           = relatedAsset,
                AssetTraitName         = assetTraitName,
                AssetTraitValue        = assetTraitValue,
                CopyToOutputDirectory  = copyToOutputDirectory,
                CopyToPublishDirectory = copytToPublishDirectory,
                OriginalItemSpec       = itemSpec,
            };

            result.ApplyDefaults();
            result.Normalize();

            return(result);
        }