Skip to content

Scss/Sass files are now invalidated whenever any other Scss/Sass file… #269

Scss/Sass files are now invalidated whenever any other Scss/Sass file…

Scss/Sass files are now invalidated whenever any other Scss/Sass file… #269

GitHub Actions / Test Results (macos-latest) succeeded Jan 9, 2024 in 1s

Test Results (macos-latest) ✅

Tests passed successfully

Report Passed Failed Skipped Time
Statiq.Web/tests/Statiq.Web.Hosting.Tests/TestResults/test-results.trx 22✅ 2s
Statiq.Web/tests/Statiq.Web.Tests/TestResults/test-results.trx 254✅ 268s

✅ Statiq.Web/tests/Statiq.Web.Hosting.Tests/TestResults/test-results.trx

22 tests were completed in 2s with 22 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Statiq.Web.Hosting.Tests.Middleware.DefaultExtensionsMiddlewareTests 4✅ 186ms
Statiq.Web.Hosting.Tests.Middleware.DisableCacheMiddlewareTests 1✅ 13ms
Statiq.Web.Hosting.Tests.Middleware.ScriptInjectionMiddlewareTests 4✅ 26ms
Statiq.Web.Hosting.Tests.Middleware.VirtualDirectoryMiddlewareTests 9✅ 22ms
Statiq.Web.Hosting.Tests.ServerTests 4✅ 341ms

✅ Statiq.Web.Hosting.Tests.Middleware.DefaultExtensionsMiddlewareTests

✅ DoesNotReturnsFileWithNonDefaultExtension
✅ ReturnsFileWithCustomExtensionWithDot
✅ ReturnsFileWithCustomExtensionWithoutDot
✅ ReturnsFileWithDefaultExtension

✅ Statiq.Web.Hosting.Tests.Middleware.DisableCacheMiddlewareTests

✅ AddsCacheHeaders

✅ Statiq.Web.Hosting.Tests.Middleware.ScriptInjectionMiddlewareTests

✅ ShouldInjectScriptAtCorrectLocation("BasicHtmlDocument.html","<script type=\"text/javascript\" src=\"/livereload.js\"></script></body>",133)
✅ ShouldInjectScriptAtCorrectLocation("BasicHtmlDocumentNoBody.html","<script type=\"text/javascript\" src=\"/livereload.js\"></script></html>",130)
✅ ShouldInjectScriptAtCorrectLocation("BasicHtmlDocumentNoHtml.html","<script type=\"text/javascript\" src=\"/livereload.js\"></script>",77)
✅ ShouldNotInjectNonHtmlContent

✅ Statiq.Web.Hosting.Tests.Middleware.VirtualDirectoryMiddlewareTests

✅ DoesNotGetFileNotUnderVirtualDirectory
✅ GetsFileUnderVirtualDirectory("/foo")
✅ GetsFileUnderVirtualDirectory("/foo/")
✅ GetsFileUnderVirtualDirectory("/foo/bar")
✅ GetsFileUnderVirtualDirectory("/foo/bar/")
✅ GetsFileUnderVirtualDirectory("foo")
✅ GetsFileUnderVirtualDirectory("foo/")
✅ GetsFileUnderVirtualDirectory("foo/bar")
✅ GetsFileUnderVirtualDirectory("foo/bar/")

✅ Statiq.Web.Hosting.Tests.ServerTests

✅ ServerShouldAcceptRequestsFrom127001
✅ ServerShouldAcceptRequestsFromLocalhost
✅ ServerShouldBindOnConstructionWithoutUrlReservations
✅ ServerShouldBindOnStartWithoutUrlReservations

✅ Statiq.Web/tests/Statiq.Web.Tests/TestResults/test-results.trx

254 tests were completed in 268s with 254 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Statiq.Web.Tests.Analyzers.Html.Analyzers.ValidateAbsoluteLinksFixture+AnalyzeTests 6✅ 2s
Statiq.Web.Tests.Analyzers.Html.Analyzers.ValidateRelativeLinksFixture+AnalyzeTests 83✅ 523ms
Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddSettingTests 2✅ 8s
Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddThemePathTests 1✅ 124ms
Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddWebTests 3✅ 4s
Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+SetThemePathTests 1✅ 311ms
Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+GetXrefDocumentTests 1✅ 16ms
Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+GetXrefLinkTests 2✅ 3ms
Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+TryGetXrefDocumentTests 6✅ 12ms
Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+TryGetXrefLinkTests 3✅ 3ms
Statiq.Web.Tests.Modules.RenderContentPostProcessTemplatesFixture+ExecuteTests 2✅ 123ms
Statiq.Web.Tests.Modules.ResolveXrefsFixture+ExecuteTests 5✅ 15ms
Statiq.Web.Tests.Pipelines.ArchivesFixture+ExecuteTests 9✅ 337s
Statiq.Web.Tests.Pipelines.AssetsFixture+ExecuteTests 6✅ 25s
Statiq.Web.Tests.Pipelines.ContentFixture+ExecuteTests 23✅ 207s
Statiq.Web.Tests.Pipelines.DataFixture+ExecuteTests 22✅ 65s
Statiq.Web.Tests.Pipelines.FeedsFixture+ExecuteTests 10✅ 77s
Statiq.Web.Tests.Pipelines.InputsFixture+ExecuteTests 8✅ 22s
Statiq.Web.Tests.Pipelines.RedirectsFixture+ExecuteTests 15✅ 132s
Statiq.Web.Tests.Pipelines.SearchIndexFixture+ExecuteTests 7✅ 56s
Statiq.Web.Tests.Pipelines.SitemapFixture+ExecuteTests 3✅ 4s
Statiq.Web.Tests.Shortcodes.EmbedShortcodeFixture+ExecuteTests 1✅ 23ms
Statiq.Web.Tests.Shortcodes.FigureShortcodeFixture+ExecuteTests 3✅ 13ms
Statiq.Web.Tests.Shortcodes.GistShortcodeFixture+ExecuteTests 3✅ 4ms
Statiq.Web.Tests.Shortcodes.LinkShortcodeFixture+ExecuteTests 21✅ 46ms
Statiq.Web.Tests.Shortcodes.TableShortcodeFixture+ExecuteTests 2✅ 9ms
Statiq.Web.Tests.Themes.ThemeManagerFixture+AddPathsFromSettingsTests 6✅ 1s

✅ Statiq.Web.Tests.Analyzers.Html.Analyzers.ValidateAbsoluteLinksFixture+AnalyzeTests

✅ CanValidateRelativeLinkWithAbsoluteBaseUri
✅ DoesNotThrowForInvalidLink
✅ DoesNotValidateMailToLinks("mailto:foo@bar.com")
✅ DoesNotValidateMailToLinks("mailto:foo&#64;bar.com")
✅ ValidatesAbsoluteLink(False)
✅ ValidatesAbsoluteLink(True)

✅ Statiq.Web.Tests.Analyzers.Html.Analyzers.ValidateRelativeLinksFixture+AnalyzeTests

✅ CanValidateAscendingRelativeLink("../foobar.html",False)
✅ CanValidateAscendingRelativeLink("../target.html?query=parameter",True)
✅ CanValidateAscendingRelativeLink("../target.html?query=parameter#fragment",True)
✅ CanValidateAscendingRelativeLink("../target.html",True)
✅ CanValidateAscendingRelativeLink("../target.html#fragment",True)
✅ CanValidateExtensionlessLinks("../foo/target",True)
✅ CanValidateExtensionlessLinks("../target",False)
✅ CanValidateExtensionlessLinks("/foo/target",True)
✅ CanValidateExtensionlessLinks("/target",False)
✅ CanValidateExtensionlessLinks("foo/target",False)
✅ CanValidateExtensionlessLinks("target",False)
✅ CanValidateIndexLinks("../foo",True)
✅ CanValidateIndexLinks("../foo/index.html",True)
✅ CanValidateIndexLinks("../foo/index",True)
✅ CanValidateIndexLinks("../index.html",False)
✅ CanValidateIndexLinks("../index",False)
✅ CanValidateIndexLinks("/",True)
✅ CanValidateIndexLinks("/foo.html",False)
✅ CanValidateIndexLinks("/foo",True)
✅ CanValidateIndexLinks("/foo/index.html",True)
✅ CanValidateIndexLinks("/foo/index",True)
✅ CanValidateIndexLinks("/index.html",False)
✅ CanValidateIndexLinks("/index",False)
✅ CanValidateIndexLinks("foo",False)
✅ CanValidateIndexLinks("foo/index.html",False)
✅ CanValidateIndexLinks("foo/index",False)
✅ CanValidateIndexLinks("index.html",False)
✅ CanValidateIndexLinks("index",False)
✅ CanValidateRelativeLinkWithBaseUri("","/test/document.html","nested/target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("/","/test/document.html","nested/target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("/foobar","/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("/foobar","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("/foobar/","/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("/foobar/","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("/nested","/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("/nested","/test/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("/nested/","/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("/nested/","/test/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("foobar","/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("foobar","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("foobar/","/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("foobar/","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("nested","/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("nested","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithBaseUri("nested/","/document.html","target.html",True)
✅ CanValidateRelativeLinkWithBaseUri("nested/","/test/document.html","target.html",False)
✅ CanValidateRelativeLinkWithLinkRoot("../../link-root/foo/target.html",True)
✅ CanValidateRelativeLinkWithLinkRoot("../foo/target.html",True)
✅ CanValidateRelativeLinkWithLinkRoot("../link-root/foo/target.html",False)
✅ CanValidateRelativeLinkWithLinkRoot("../target.html",False)
✅ CanValidateRelativeLinkWithLinkRoot("/link-root/foo/target.html",True)
✅ CanValidateRelativeLinkWithLinkRoot("/link-root/target.html",False)
✅ CanValidateRelativeLinkWithLinkRoot("link-root/foo/target.html",False)
✅ CanValidateRelativeLinkWithLinkRoot("link-root/target.html",False)
✅ DoesNotValidateHash("#","/document.html",True)
✅ DoesNotValidateHash("#","/foo/document.html",True)
✅ DoesNotValidateHash("#foo","/document.html",True)
✅ DoesNotValidateHash("#foo","/foo/document.html",True)
✅ DoesNotValidateHash("target#foo","/document.html",True)
✅ DoesNotValidateHash("target#foo","/foo/document.html",False)
✅ DoesNotValidateHash("target2#foo","/document.html",False)
✅ DoesNotValidateHash("target2#foo","/foo/document.html",False)
✅ DoesNotValidateMailToLinks("mailto:foo@bar.com")
✅ DoesNotValidateMailToLinks("mailto:foo&#64;bar.com")
✅ DoesNotValidateQueryString("?","/document.html",True)
✅ DoesNotValidateQueryString("?","/foo/document.html",True)
✅ DoesNotValidateQueryString("?#bar","/document.html",True)
✅ DoesNotValidateQueryString("?#bar","/foo/document.html",True)
✅ DoesNotValidateQueryString("?foo","/document.html",True)
✅ DoesNotValidateQueryString("?foo","/foo/document.html",True)
✅ DoesNotValidateQueryString("?foo#bar","/document.html",True)
✅ DoesNotValidateQueryString("?foo#bar","/foo/document.html",True)
✅ DoesNotValidateQueryString("target?foo","/document.html",True)
✅ DoesNotValidateQueryString("target?foo","/foo/document.html",False)
✅ DoesNotValidateQueryString("target?foo#bar","/document.html",True)
✅ DoesNotValidateQueryString("target?foo#bar","/foo/document.html",False)
✅ DoesNotValidateQueryString("target2?foo","/document.html",False)
✅ DoesNotValidateQueryString("target2?foo","/foo/document.html",False)
✅ DoesNotValidateQueryString("target2?foo#bar","/document.html",False)
✅ DoesNotValidateQueryString("target2?foo#bar","/foo/document.html",False)
✅ HandlesEscapedUnicode
✅ HandlesSpecialCharacters("targ%C3%ABt")
✅ HandlesSpecialCharacters("targët")

✅ Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddSettingTests

✅ CommandLineShouldOverrideSettingsInputPaths
✅ ShouldAddInputPaths

✅ Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddThemePathTests

✅ AddsThemePath

✅ Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+AddWebTests

✅ AddsDefaultThemeInputPath
✅ AddsThemeInputPaths
✅ SetsThemePathsFromSettings

✅ Statiq.Web.Tests.Bootstrapper.BootstrapperExtensionsFixture+SetThemePathTests

✅ SetsThemePath

✅ Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+GetXrefDocumentTests

✅ ThrowsForNoMatch

✅ Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+GetXrefLinkTests

✅ ThrowsForNoLink
✅ ThrowsForNoMatch

✅ Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+TryGetXrefDocumentTests

✅ DoesNotIncludeChildDocuments
✅ FindsXref
✅ FindXrefIsCaseInsensitive
✅ NullXrefDoesNotThrow
✅ ReturnsFalseForAmbiguousMatches
✅ ReturnsFalseForNoMatch

✅ Statiq.Web.Tests.IExecutionContextXrefExtensionsFixture+TryGetXrefLinkTests

✅ ReturnsFalseForNoLink
✅ ReturnsFalseForNoMatch
✅ ReturnsLink

✅ Statiq.Web.Tests.Modules.RenderContentPostProcessTemplatesFixture+ExecuteTests

✅ MakesRelativeLinksAbsolute
✅ MakesRelativeLinksRootRelative

✅ Statiq.Web.Tests.Modules.ResolveXrefsFixture+ExecuteTests

✅ PreservesFragment
✅ PreservesQuery
✅ PreservesQueryAndFragment
✅ ResolvesMatchingXref
✅ ReturnsInputDocumentForNoXref

✅ Statiq.Web.Tests.Pipelines.ArchivesFixture+ExecuteTests

✅ ArchiveKey
✅ ComputedArchiveKey
✅ ComputedOrder
✅ ComputedOrderAfterKeyedOrder
✅ ExcludesAssetContentType
✅ GeneratesArchiveWithChildren
✅ KeyedOrder
✅ ScriptArchive
✅ ScriptArchiveWithExtensionPrefix

✅ Statiq.Web.Tests.Pipelines.AssetsFixture+ExecuteTests

✅ ProcessesJsonSidecarFileWithDifferentExtension
✅ RemoveScriptExtensionIsFalse
✅ ReturnsMultipleDocuments
✅ ReturnsSingleDocument
✅ ReturnsStringContent
✅ SetsDestinationFromFrontMatter

✅ Statiq.Web.Tests.Pipelines.ContentFixture+ExecuteTests

✅ DefaultGatherHeadingsLevel
✅ DocumentGatherHeadingsLevelSetting
✅ ExcerptShouldNotDoubleEscapeEntities
✅ GlobalGatherHeadingsLevelSetting
✅ HtmlCommentFrontMatter
✅ HtmlDoesNotApplyLayout
✅ HtmlFragmentAppliesAlternateLayout
✅ HtmlFragmentAppliesAlternateLayoutModule
✅ HtmlFragmentAppliesLayout
✅ HtmlFragmentFileAppliesAlternateLayout
✅ HtmlFragmentFileAppliesAlternateLayoutModule
✅ HtmlFragmentFileAppliesLayout
✅ LayoutMetadata
✅ LayoutViewStart
✅ RazorCommentFrontMatter
✅ ScriptWithCsxExtensionAndMediaTypeReturnsMarkdownContent
✅ ScriptWithMarkdownExtensionReturnsMarkdownContent
✅ ScriptWithMdAndCsxExtensionReturnsMarkdownContent
✅ ShouldChangeMarkdownExtensionsViaSettings
✅ ShouldChangeMarkdownExtensionsViaTemplates
✅ ShouldHighlightCode
✅ ShouldNotHighlightCodeByDefault
✅ ShouldNotHighlightCodeForUnspecifiedLanguage

✅ Statiq.Web.Tests.Pipelines.DataFixture+ExecuteTests

✅ AddsDirectoryMetadata
✅ AddsLocalRecursiveDirectoryMetadata
✅ ClearsDataContentIfSet
✅ CloserMetadataOverridesDirectoryMetadata
✅ ContentOverridesSidecarFile
✅ DoesNotAddNonRecursiveDirectoryMetadata
✅ DoesNotApplyDirectoryMetadataIfSettingIsFalse
✅ DoesNotClearDataContentIfNotSet
✅ DoesNotReadUnderscoreFilesByDefault
✅ EnumeratesValues
✅ FiltersExcludedFiles
✅ FrontMatterOverridesDirectoryMetadata
✅ IncludesDocumentsFromDependencies
✅ JsonScriptReturn
✅ LocalMetadataOverridesDirectoryMetadata
✅ ParsesJson
✅ ParsesJsonWithFrontMatter
✅ ParsesYaml
✅ ParsesYamlWithFrontMatter
✅ ProcessesJsonSidecarFile
✅ SidecarFileWithAppendedExtension
✅ SidecarFileWithDifferentExtension

✅ Statiq.Web.Tests.Pipelines.FeedsFixture+ExecuteTests

✅ AllowsStringIds
✅ ExcludesAssetContentType
✅ ShouldSetCorrectFeedDescription("a","b","c","a")
✅ ShouldSetCorrectFeedDescription(null,"b","c","b")
✅ ShouldSetCorrectFeedDescription(null,null,"c","c")
✅ ShouldSetCorrectFeedTitle("a","b","c","a")
✅ ShouldSetCorrectFeedTitle(null,"b","c","b")
✅ ShouldSetCorrectFeedTitle(null,null,"c","c")
✅ ShouldSetCorrectFeedTitle(null,null,null,"Feed")
✅ ToggleFeedWithPath

✅ Statiq.Web.Tests.Pipelines.InputsFixture+ExecuteTests

✅ ShouldChangeDestinationOfStatiqFile
✅ ShouldExcludeUnderscoreFiles
✅ ShouldIncludeAdditionalInputFiles
✅ ShouldNotExcludeUnderscoreStatiqFiles
✅ ShouldProcessFrontMatterForStatiqFile
✅ ShouldRemoveStatiqFileExtension("/input/foo.statiq","foo")
✅ ShouldRemoveStatiqFileExtension("/input/foo.txt.statiq","foo.txt")
✅ ShouldSkipFrontMatterDelimiterInStatiqBodyFileWithEmptyFrontMatter

✅ Statiq.Web.Tests.Pipelines.RedirectsFixture+ExecuteTests

✅ GeneratesClientRedirects
✅ GeneratesNetlifyRedirects
✅ ShouldCombineAllNetlifyRedirects
✅ ShouldCombineWithExistingNetlifyFile
✅ ShouldGenerateNetlifyPrefixRedirectsByDefault
✅ ShouldGeneratePrefixRedirectForFile
✅ ShouldGeneratePrefixRedirectForNestedFile
✅ ShouldGenerateSinglePrefixRedirectForMultipleFiles
✅ ShouldNotGenerateNetlifyPrefixRedirects
✅ ShouldNotOutputNetlifyFileIfNoRedirects
✅ ShouldOnlyGenerateParentPrefixRedirect
✅ ShouldOutputExistingNetlifyFile
✅ ShouldRedirectedNestedPrefixFolder
✅ ShouldRedirectedNestedPrefixFolderWithNestedFile
✅ ShouldUseAlternateRedirectPrefix

✅ Statiq.Web.Tests.Pipelines.SearchIndexFixture+ExecuteTests

✅ ShouldGenerateIndexAtAlternatePath
✅ ShouldGenerateResultsAtAlternatePath
✅ ShouldGenerateScriptAtAlternatePath
✅ ShouldGenerateScriptAtDefaultPath
✅ ShouldNotGenerateSearchIndexByDefault
✅ ShouldNotZipIndexFile
✅ ShouldNotZipResultsFile

✅ Statiq.Web.Tests.Pipelines.SitemapFixture+ExecuteTests

✅ ExcludeFromSitemapWhenSpecified
✅ IncludeInSitemapByDefault
✅ IncludeInSitemapWhenSpecified

✅ Statiq.Web.Tests.Shortcodes.EmbedShortcodeFixture+ExecuteTests

✅ IssuesRequestToCorrectEndpoint

✅ Statiq.Web.Tests.Shortcodes.FigureShortcodeFixture+ExecuteTests

✅ DoesNotRenderLinkIfNoImage
✅ RendersFigure
✅ RendersFigureWithoutLink

✅ Statiq.Web.Tests.Shortcodes.GistShortcodeFixture+ExecuteTests

✅ RendersGist
✅ RendersGistWithoutFile
✅ RendersGistWithoutUsername

✅ Statiq.Web.Tests.Shortcodes.LinkShortcodeFixture+ExecuteTests

✅ RendersLink("//foo/bar","//foo/bar")
✅ RendersLink("/foo/bar","/foo/bar")
✅ RendersLink("foo/bar","/foo/bar")
✅ RendersLink("http://foo.com/bar","http://foo.com/bar")
✅ RendersLink("https://foo.com/bar","https://foo.com/bar")
✅ RendersLinkWithAlternateHost("//foo/bar","http://google.com//foo/bar")
✅ RendersLinkWithAlternateHost("/foo/bar","http://google.com/foo/bar")
✅ RendersLinkWithAlternateHost("foo/bar","http://google.com/foo/bar")
✅ RendersLinkWithAlternateHost("http://foo.com/bar","http://foo.com/bar")
✅ RendersLinkWithAlternateHost("https://foo.com/bar","https://foo.com/bar")
✅ RendersLinkWithHost("//foo/bar","http://domain.com//foo/bar")
✅ RendersLinkWithHost("/foo/bar","http://domain.com/foo/bar")
✅ RendersLinkWithHost("foo/bar","http://domain.com/foo/bar")
✅ RendersLinkWithHost("http://foo.com/bar","http://foo.com/bar")
✅ RendersLinkWithHost("https://foo.com/bar","https://foo.com/bar")
✅ ShouldPreserveTrailingSlashForHiddenPages("/a/b/index.html","/a/b","false")
✅ ShouldPreserveTrailingSlashForHiddenPages("/a/b/index.html","/a/b",null)
✅ ShouldPreserveTrailingSlashForHiddenPages("/a/b/index.html","/a/b/","true")
✅ ShouldRenderAbsoluteLink("index.html","/index.html","true")
✅ ShouldRenderAbsoluteLink("index.html","/index.html",null)
✅ ShouldRenderAbsoluteLink("index.html","index.html","false")

✅ Statiq.Web.Tests.Shortcodes.TableShortcodeFixture+ExecuteTests

✅ RendersTableWithoutSettings
✅ RendersTableWithSettings

✅ Statiq.Web.Tests.Themes.ThemeManagerFixture+AddPathsFromSettingsTests

✅ ShouldAddThemePathsBeforeBootstrapperInputPaths
✅ ShouldAddThemePathsBeforeCliInputPaths
✅ ShouldAddThemePathsBeforeDefaultInputPath
✅ ShouldAddThemePathsBeforeSettingsInputPaths
✅ ShouldAddThemePathsInCorrectOrder
✅ ShouldSetThemePath