public void Should_resolve_to_user_defined_themes_directory_When_url_starts_with_macro() { var resolver = new ThemeCssUrlResolver(CreateMockThemePathProvider()); var resolvedPath = resolver.ResolveCssUrl("{UserAppData}/dark.css"); resolvedPath.Should().Be(Path.Combine(UserDefinedThemesMockPath, "dark.css")); }
public void Should_resolve_to_preinstalled_themes_directory_by_default() { var resolver = new ThemeCssUrlResolver(CreateMockThemePathProvider()); var resolvedPath = resolver.ResolveCssUrl("dark.css"); resolvedPath.Should().Be(Path.Combine(PreinstalledThemesMockPath, "dark.css")); }
public void Should_override_imported_color_When_current_theme_redefines_it( [Values(KnownColor.Control)] KnownColor colorName, [ValueSource(nameof(TestColorValues))] Color baseColor, [ValueSource(nameof(AlternativeTestColorValues))] Color colorOverride) { var pathProvider = CreateMockPathProvider(); var resolver = new ThemeCssUrlResolver(pathProvider); string themePath = Path.Combine(pathProvider.AppThemesDirectory, "theme.css"); string baseThemePath = Path.Combine(pathProvider.AppThemesDirectory, "base.css"); var mockFileReader = CreateMockFileReader(new Dictionary <string, string> { [baseThemePath] = GetThemeContent(colorName, baseColor), [themePath] = "@import url(\"base.css\");" + Environment.NewLine + GetThemeContent(colorName, colorOverride) }); var loader = new ThemeLoader(resolver, mockFileReader); var theme = loader.LoadTheme(themePath, new ThemeId("theme", isBuiltin: true), allowedClasses: ThemeVariations.None); theme.GetColor(colorName).ToArgb().Should().Be(colorOverride.ToArgb()); }
public void Should_honor_css_import_directive( [Values(KnownColor.Control)] KnownColor colorName, [ValueSource(nameof(TestColorValues))] Color baseColor) { var pathProvider = CreateMockPathProvider(); var resolver = new ThemeCssUrlResolver(pathProvider); string themePath = Path.Combine(pathProvider.AppThemesDirectory, "theme.css"); string baseThemePath = Path.Combine(pathProvider.AppThemesDirectory, "base.css"); var mockFileReader = CreateMockFileReader(new Dictionary <string, string> { [baseThemePath] = GetThemeContent(colorName, baseColor), [themePath] = "@import url(\"base.css\");", }); var loader = new ThemeLoader(resolver, mockFileReader); var theme = loader.LoadTheme(themePath, new ThemeId("theme", isBuiltin: true), allowedClasses: ThemeVariations.None); theme.GetColor(colorName).ToArgb().Should().Be(baseColor.ToArgb()); }
public void Should_throw_When_cyclic_css_imports() { var pathProvider = CreateMockPathProvider(); var resolver = new ThemeCssUrlResolver(pathProvider); string themePath = Path.Combine(pathProvider.AppThemesDirectory, "theme.css"); string baseThemePath = Path.Combine(pathProvider.AppThemesDirectory, "base.css"); var mockFileReader = CreateMockFileReader(new Dictionary <string, string> { [baseThemePath] = "@import url(\"theme.css\");", [themePath] = "@import url(\"base.css\");" }); var loader = new ThemeLoader(resolver, mockFileReader); loader.Invoking(_ => _.LoadTheme( themePath, new ThemeId("theme", isBuiltin: true), allowedClasses: ThemeVariations.None)) .Should().Throw <ThemeException>() .Which.Message.Should().Contain("Cycling CSS import"); }