From c6a371abe15783a34049b6139e7e9c4b479eecba Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 30 Sep 2018 12:34:35 -0700 Subject: [PATCH 1/2] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 64 ++++++++++++++++++++-------------------- korebuild-lock.txt | 4 +-- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 4fa4dd792d..fcaf99aff1 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -4,43 +4,43 @@ 0.9.9 - 2.2.0-preview3-35301 - 2.2.0-preview1-20180918.1 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 + 2.2.0-preview3-35359 + 2.2.0-preview1-20180928.5 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 15.6.82 15.6.82 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 2.0.9 2.1.3 - 2.2.0-preview2-26905-02 - 2.2.0-preview3-35301 + 2.2.0-preview3-26927-02 + 2.2.0-preview3-35359 15.6.1 - 2.2.0-preview3-35301 - 2.2.0-preview3-35301 + 2.2.0-preview3-35359 + 2.2.0-preview3-35359 2.0.3 3.12.1 17.17134.0 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 649bf2ba0b..26697a21fa 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-20180918.1 -commithash:ad5e3fc53442741a0dd49bce437d2ac72f4b5800 +version:2.2.0-preview1-20180928.5 +commithash:43faa29f679f47b88689d645b39e6be5e0055d70 From 7d09ec6ccc563b38febaf8cac2a2f5f134dee250 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Wed, 10 Oct 2018 12:12:11 -0700 Subject: [PATCH 2/2] Low hanging fruit (#763) Clean up low hanging fruit --- ...oft.DotNet.Web.Client.ItemTemplates.csproj | 5 +- .../Microsoft.DotNet.Web.ItemTemplates.csproj | 4 +- .../EmptyWeb-CSharp.csproj.in | 4 - ...crosoft.DotNet.Web.ProjectTemplates.csproj | 4 +- .../WebApi-CSharp.csproj.in | 4 - .../content/EmptyWeb-CSharp/wwwroot/-.- | 0 .../Pages/Shared/_Layout.cshtml | 3 +- .../wwwroot/lib/jquery-validation/.bower.json | 41 --------- .../wwwroot/lib/jquery/.bower.json | 26 ------ .../Views/Shared/_Layout.cshtml | 3 +- .../wwwroot/lib/jquery-validation/.bower.json | 41 --------- .../wwwroot/lib/jquery/.bower.json | 26 ------ .../Views/Shared/_Layout.cshtml | 3 +- .../wwwroot/lib/jquery-validation/.bower.json | 41 --------- .../wwwroot/lib/jquery/.bower.json | 26 ------ .../content/WebApi-CSharp/wwwroot/-.- | 0 .../content/WebApi-FSharp/wwwroot/-.- | 0 ...oft.DotNet.Web.Spa.ProjectTemplates.csproj | 4 +- test/Templates.Test/CdnScriptTagTests.cs | 88 +++++++++++++++++-- .../Helpers/TemplateTestBase.cs | 9 +- test/Templates.Test/template-baselines.json | 24 ----- 21 files changed, 106 insertions(+), 250 deletions(-) delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/EmptyWeb-CSharp/wwwroot/-.- delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery-validation/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery/.bower.json delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-CSharp/wwwroot/-.- delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-FSharp/wwwroot/-.- diff --git a/src/Microsoft.DotNet.Web.Client.ItemTemplates/Microsoft.DotNet.Web.Client.ItemTemplates.csproj b/src/Microsoft.DotNet.Web.Client.ItemTemplates/Microsoft.DotNet.Web.Client.ItemTemplates.csproj index a54a8699ca..c6a64d8063 100644 --- a/src/Microsoft.DotNet.Web.Client.ItemTemplates/Microsoft.DotNet.Web.Client.ItemTemplates.csproj +++ b/src/Microsoft.DotNet.Web.Client.ItemTemplates/Microsoft.DotNet.Web.Client.ItemTemplates.csproj @@ -2,7 +2,10 @@ netcoreapp2.2 - Web Client-Side File Templates for Microsoft Template Engine + Web Client-Side File Templates for Microsoft Template Engine + + To install the templates in this package, run 'dotnet new --install $(PackageId)::$(PackageVersion)'. + diff --git a/src/Microsoft.DotNet.Web.ItemTemplates/Microsoft.DotNet.Web.ItemTemplates.csproj b/src/Microsoft.DotNet.Web.ItemTemplates/Microsoft.DotNet.Web.ItemTemplates.csproj index c789a961e6..295513c98e 100644 --- a/src/Microsoft.DotNet.Web.ItemTemplates/Microsoft.DotNet.Web.ItemTemplates.csproj +++ b/src/Microsoft.DotNet.Web.ItemTemplates/Microsoft.DotNet.Web.ItemTemplates.csproj @@ -2,7 +2,9 @@ netcoreapp2.2 - Web File Templates for Microsoft Template Engine + Web File Templates for Microsoft Template Engine + + To install the templates in this package, run 'dotnet new --install $(PackageId)::$(PackageVersion)'. diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/EmptyWeb-CSharp.csproj.in b/src/Microsoft.DotNet.Web.ProjectTemplates/EmptyWeb-CSharp.csproj.in index f1a998425c..de9a229c6a 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/EmptyWeb-CSharp.csproj.in +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/EmptyWeb-CSharp.csproj.in @@ -8,10 +8,6 @@ Company.WebApplication1 - - - - diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj index a66d01d5cc..e532800847 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj @@ -5,7 +5,9 @@ netcoreapp2.2 Microsoft.DotNet.Web.ProjectTemplates.2.2 - ASP.NET Core Web Template Pack for Microsoft Template Engine + ASP.NET Core Web Template Pack for Microsoft Template Engine + + To install the templates in this package, run 'dotnet new --install $(PackageId)::$(PackageVersion)'. diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/WebApi-CSharp.csproj.in b/src/Microsoft.DotNet.Web.ProjectTemplates/WebApi-CSharp.csproj.in index 23f19984ec..5c77b56f48 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/WebApi-CSharp.csproj.in +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/WebApi-CSharp.csproj.in @@ -11,10 +11,6 @@ Company.WebApplication1 - - - - diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/EmptyWeb-CSharp/wwwroot/-.- b/src/Microsoft.DotNet.Web.ProjectTemplates/content/EmptyWeb-CSharp/wwwroot/-.- deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml index f4fc6c9074..630046f2d8 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml @@ -11,7 +11,8 @@ + asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" + integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE="/> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json deleted file mode 100644 index 79824166a0..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "jquery-validation", - "homepage": "https://jqueryvalidation.org/", - "repository": { - "type": "git", - "url": "git://github.com/jquery-validation/jquery-validation.git" - }, - "authors": [ - "Jörn Zaefferer " - ], - "description": "Form validation made easy", - "main": "dist/jquery.validate.js", - "keywords": [ - "forms", - "validation", - "validate" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "demo", - "lib" - ], - "dependencies": { - "jquery": ">= 1.7.2" - }, - "version": "1.17.0", - "_release": "1.17.0", - "_resolution": { - "type": "version", - "tag": "1.17.0", - "commit": "fc9b12d3bfaa2d0c04605855b896edb2934c0772" - }, - "_source": "https://github.com/jzaefferer/jquery-validation.git", - "_target": "^1.17.0", - "_originalSource": "jquery-validation", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery/.bower.json deleted file mode 100644 index 959ddb7137..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/RazorPagesWeb-CSharp/wwwroot/lib/jquery/.bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "jquery", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "package.json" - ], - "keywords": [ - "jquery", - "javascript", - "browser", - "library" - ], - "homepage": "https://github.com/jquery/jquery-dist", - "version": "3.3.1", - "_release": "3.3.1", - "_resolution": { - "type": "version", - "tag": "3.3.1", - "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" - }, - "_source": "https://github.com/jquery/jquery-dist.git", - "_target": "^3.3.1", - "_originalSource": "jquery", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Views/Shared/_Layout.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Views/Shared/_Layout.cshtml index c7cf09d069..50efa44a39 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Views/Shared/_Layout.cshtml +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/Views/Shared/_Layout.cshtml @@ -11,7 +11,8 @@ + asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" + integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE="/> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json deleted file mode 100644 index 79824166a0..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery-validation/.bower.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "jquery-validation", - "homepage": "https://jqueryvalidation.org/", - "repository": { - "type": "git", - "url": "git://github.com/jquery-validation/jquery-validation.git" - }, - "authors": [ - "Jörn Zaefferer " - ], - "description": "Form validation made easy", - "main": "dist/jquery.validate.js", - "keywords": [ - "forms", - "validation", - "validate" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "demo", - "lib" - ], - "dependencies": { - "jquery": ">= 1.7.2" - }, - "version": "1.17.0", - "_release": "1.17.0", - "_resolution": { - "type": "version", - "tag": "1.17.0", - "commit": "fc9b12d3bfaa2d0c04605855b896edb2934c0772" - }, - "_source": "https://github.com/jzaefferer/jquery-validation.git", - "_target": "^1.17.0", - "_originalSource": "jquery-validation", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery/.bower.json deleted file mode 100644 index 959ddb7137..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-CSharp/wwwroot/lib/jquery/.bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "jquery", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "package.json" - ], - "keywords": [ - "jquery", - "javascript", - "browser", - "library" - ], - "homepage": "https://github.com/jquery/jquery-dist", - "version": "3.3.1", - "_release": "3.3.1", - "_resolution": { - "type": "version", - "tag": "3.3.1", - "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" - }, - "_source": "https://github.com/jquery/jquery-dist.git", - "_target": "^3.3.1", - "_originalSource": "jquery", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/Views/Shared/_Layout.cshtml b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/Views/Shared/_Layout.cshtml index e2436ff3cb..36f0469f4f 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/Views/Shared/_Layout.cshtml +++ b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/Views/Shared/_Layout.cshtml @@ -11,7 +11,8 @@ + asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" + integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE=" /> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery-validation/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery-validation/.bower.json deleted file mode 100644 index 79824166a0..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery-validation/.bower.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "jquery-validation", - "homepage": "https://jqueryvalidation.org/", - "repository": { - "type": "git", - "url": "git://github.com/jquery-validation/jquery-validation.git" - }, - "authors": [ - "Jörn Zaefferer " - ], - "description": "Form validation made easy", - "main": "dist/jquery.validate.js", - "keywords": [ - "forms", - "validation", - "validate" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "demo", - "lib" - ], - "dependencies": { - "jquery": ">= 1.7.2" - }, - "version": "1.17.0", - "_release": "1.17.0", - "_resolution": { - "type": "version", - "tag": "1.17.0", - "commit": "fc9b12d3bfaa2d0c04605855b896edb2934c0772" - }, - "_source": "https://github.com/jzaefferer/jquery-validation.git", - "_target": "^1.17.0", - "_originalSource": "jquery-validation", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery/.bower.json b/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery/.bower.json deleted file mode 100644 index 959ddb7137..0000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates/content/StarterWeb-FSharp/wwwroot/lib/jquery/.bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "jquery", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "package.json" - ], - "keywords": [ - "jquery", - "javascript", - "browser", - "library" - ], - "homepage": "https://github.com/jquery/jquery-dist", - "version": "3.3.1", - "_release": "3.3.1", - "_resolution": { - "type": "version", - "tag": "3.3.1", - "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" - }, - "_source": "https://github.com/jquery/jquery-dist.git", - "_target": "^3.3.1", - "_originalSource": "jquery", - "_direct": true -} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-CSharp/wwwroot/-.- b/src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-CSharp/wwwroot/-.- deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-FSharp/wwwroot/-.- b/src/Microsoft.DotNet.Web.ProjectTemplates/content/WebApi-FSharp/wwwroot/-.- deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj index 1e86d7446d..80037b4fda 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj @@ -4,7 +4,9 @@ netcoreapp2.2 - Single Page Application templates for ASP.NET Core + Single Page Application templates for ASP.NET Core + + To install the templates in this package, run 'dotnet new --install $(PackageId)::$(PackageVersion)'. $(PackageTags);spa diff --git a/test/Templates.Test/CdnScriptTagTests.cs b/test/Templates.Test/CdnScriptTagTests.cs index 0a9eaee088..4a4ebc15f0 100644 --- a/test/Templates.Test/CdnScriptTagTests.cs +++ b/test/Templates.Test/CdnScriptTagTests.cs @@ -1,6 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using AngleSharp; +using AngleSharp.Dom; using AngleSharp.Dom.Html; using AngleSharp.Parser.Html; using System; @@ -23,6 +25,7 @@ namespace Templates.Test private static readonly string _solutionDir; private static readonly string _artifactsDir; private static List _scriptTags; + private static List _linkTags; static CdnScriptTagTests() { @@ -31,9 +34,12 @@ namespace Templates.Test var packages = Directory.GetFiles(_artifactsDir, "*.nupkg"); _scriptTags = new List(); + _linkTags = new List(); foreach (var packagePath in packages) { - _scriptTags.AddRange(GetScriptTags(packagePath)); + var tags = GetTags(packagePath); + _scriptTags.AddRange(tags.scripts); + _linkTags.AddRange(tags.links); } } @@ -43,21 +49,33 @@ namespace Templates.Test _httpClient = new HttpClient(); } - public static IEnumerable SubresourceIntegrityCheckData + public static IEnumerable SubresourceIntegrityCheckScriptData { get { var scriptTags = _scriptTags - .Where(st => st.Integrity != null) + .Where(st => st.FallbackSrc != null) .Select(st => new object[] { st }); Assert.NotEmpty(scriptTags); return scriptTags; } } + public static IEnumerable SubresourceIntegrityCheckLinkData + { + get + { + var linkTags = _linkTags + .Where(st => st.FallbackHRef != null) + .Select(st => new object[] { st }); + Assert.NotEmpty(linkTags); + return linkTags; + } + } + [Theory] - [MemberData(nameof(SubresourceIntegrityCheckData))] - public async Task CheckSubresourceIntegrity(ScriptTag scriptTag) + [MemberData(nameof(SubresourceIntegrityCheckScriptData))] + public async Task CheckScriptSubresourceIntegrity(ScriptTag scriptTag) { string expectedIntegrity; using (var responseStream = await _httpClient.GetStreamAsync(scriptTag.Src)) @@ -67,7 +85,28 @@ namespace Templates.Test expectedIntegrity = "sha256-" + Convert.ToBase64String(hash); } - Assert.Equal(expectedIntegrity, scriptTag.Integrity); + if (!expectedIntegrity.Equals(scriptTag.Integrity, StringComparison.OrdinalIgnoreCase)) + { + Assert.False(true, $"Expected {scriptTag.Src} to have Integrity '{expectedIntegrity}' but it had '{scriptTag.Integrity}'."); + } + } + + [Theory] + [MemberData(nameof(SubresourceIntegrityCheckLinkData))] + public async Task CheckLinkSubresourceIntegrity(LinkTag linkTag) + { + string expectedIntegrity; + using (var responseStream = await _httpClient.GetStreamAsync(linkTag.HRef)) + using (var alg = SHA256.Create()) + { + var hash = alg.ComputeHash(responseStream); + expectedIntegrity = "sha256-" + Convert.ToBase64String(hash); + } + + if (!expectedIntegrity.Equals(linkTag.Integrity, StringComparison.OrdinalIgnoreCase)) + { + Assert.False(true, $"Expected {linkTag.HRef} to have Integrity '{expectedIntegrity}' but it had '{linkTag.Integrity}'."); + } } public static IEnumerable FallbackSrcCheckData @@ -96,6 +135,19 @@ namespace Templates.Test Assert.Equal(RemoveLineEndings(cdnContent), RemoveLineEndings(fallbackSrcContent)); } + public struct LinkTag + { + public string Rel; + public string HRef; + public string FallbackHRef; + public string Integrity; + + public override string ToString() + { + return $"{HRef}, {Integrity}"; + } + } + public struct ScriptTag { public string Src; @@ -130,9 +182,10 @@ namespace Templates.Test return null; } - private static List GetScriptTags(string zipFile) + private static (List scripts, List links) GetTags(string zipFile) { var scriptTags = new List(); + var linkTags = new List(); using (var zip = new ZipArchive(File.OpenRead(zipFile), ZipArchiveMode.Read, leaveOpen: false)) { foreach (var entry in zip.Entries) @@ -143,12 +196,28 @@ namespace Templates.Test } IHtmlDocument htmlDocument; - var htmlParser = new HtmlParser(); + var options = new HtmlParserOptions + { + IsStrictMode = false, + IsEmbedded = false, + }; + var config = Configuration.Default; + var htmlParser = new HtmlParser(options, config); using (var reader = new StreamReader(entry.Open())) { htmlDocument = htmlParser.Parse(entry.Open()); } + foreach (IElement link in htmlDocument.Body.GetElementsByTagName("link")) + { + linkTags.Add(new LinkTag + { + HRef = link.GetAttribute("href"), + Integrity = link.GetAttribute("integrity"), + FallbackHRef = link.GetAttribute("asp-fallback-href"), + }); + } + foreach (var scriptElement in htmlDocument.Scripts) { var fallbackSrcAttribute = scriptElement.Attributes @@ -163,9 +232,10 @@ namespace Templates.Test Entry = entry.FullName }); } + } } - return scriptTags; + return (scriptTags, linkTags); } private static string GetSolutionDir() diff --git a/test/Templates.Test/Helpers/TemplateTestBase.cs b/test/Templates.Test/Helpers/TemplateTestBase.cs index 324dcd8d12..88a24c8f4e 100644 --- a/test/Templates.Test/Helpers/TemplateTestBase.cs +++ b/test/Templates.Test/Helpers/TemplateTestBase.cs @@ -183,7 +183,14 @@ $@" { }"; - Assert.Contains(emptyMigration, contents); + + // This comparison can break depending on how GIT checked out newlines on different files. + Assert.Contains(RemoveNewLines(emptyMigration), RemoveNewLines(contents)); + } + + private static string RemoveNewLines(string str) + { + return str.Replace("\n", string.Empty).Replace("\r", string.Empty); } protected void AssertFileExists(string path, bool shouldExist) diff --git a/test/Templates.Test/template-baselines.json b/test/Templates.Test/template-baselines.json index a4e6999674..fe208d58ad 100644 --- a/test/Templates.Test/template-baselines.json +++ b/test/Templates.Test/template-baselines.json @@ -51,12 +51,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -112,12 +110,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -174,12 +170,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -236,12 +230,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -297,12 +289,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -363,12 +353,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -500,12 +488,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -560,12 +546,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -621,12 +605,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -682,12 +664,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -742,12 +722,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js", @@ -803,12 +781,10 @@ "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js", "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "wwwroot/lib/jquery/.bower.json", "wwwroot/lib/jquery/LICENSE.txt", "wwwroot/lib/jquery/dist/jquery.js", "wwwroot/lib/jquery/dist/jquery.min.js", "wwwroot/lib/jquery/dist/jquery.min.map", - "wwwroot/lib/jquery-validation/.bower.json", "wwwroot/lib/jquery-validation/LICENSE.md", "wwwroot/lib/jquery-validation/dist/additional-methods.js", "wwwroot/lib/jquery-validation/dist/additional-methods.min.js",