Пример #1
0
        public ThemeSwitcher(string assemblyDir = null)
        {
            var reader    = new CacheableResourceReader <Theme>();
            var rootDir   = assemblyDir ?? Directory.GetParent(Assembly.GetCallingAssembly().Location).ToString();
            var themeDir  = Path.Combine(rootDir, "Themes");
            var resources = new ResourceDirectory <Theme>(new ThemeKeyValueGenerator(), themeDir, "*.xaml");

            _finder = new ResourceFinder <Theme>(resources);
            _state  = new ResourceState <Theme>(new ResourceUpdater <Theme>(reader, Application.Current.Resources.MergedDictionaries));
        }
Пример #2
0
        public void ResourceCompositeTest()
        {
            var dir    = new ResourceDirectory <Theme>(new ThemeKeyValueGenerator(), _themeDir, "*.xaml");
            var finder = new ResourceFinder <Theme>(dir);

            var reader             = new CacheableResourceReader <Theme>();
            var r                  = new ResourceDictionary();
            var mergedDictionaries = r.MergedDictionaries;
            var switcher           = new ResourceState <Theme>(new ResourceUpdater <Theme>(reader, mergedDictionaries));

            PrivateObject po        = new PrivateObject(reader);
            var           cachedDic = (po.GetField("_cachedDictionaries") as IDictionary <string, ResourceDictionary>);

            Assert.AreEqual(0, cachedDic.Count);

            switcher.Switch(finder, "General");
            Assert.AreEqual("General", switcher.Current.Id);
            Assert.AreEqual(1, cachedDic.Count);

            switcher.Switch(finder, "Solarized");
            Assert.AreEqual("Solarized", switcher.Current.Id);
            Assert.AreEqual(2, cachedDic.Count);

            switcher.SwitchNext(finder);
            Assert.AreEqual("General", switcher.Current.Id);
            Assert.AreEqual(2, cachedDic.Count);

            switcher.Switch(finder, "Solarized");
            Assert.AreEqual("Solarized", switcher.Current.Id);
            Assert.AreEqual(2, cachedDic.Count);

            switcher.SwitchNext(finder);
            Assert.AreEqual("General", switcher.Current.Id);
            Assert.AreEqual(2, cachedDic.Count);

            switcher.SwitchNext(finder);
            Assert.AreEqual("General2", switcher.Current.Id);
            Assert.AreEqual(3, cachedDic.Count);

            switcher.SwitchNext(finder);
            Assert.AreEqual("Solarized", switcher.Current.Id);
            Assert.AreEqual(3, cachedDic.Count);

            switcher.SwitchNext(finder);
            Assert.AreEqual("General", switcher.Current.Id);
            Assert.AreEqual(3, cachedDic.Count);
        }
Пример #3
0
        public void LanguageTest()
        {
            var dir    = new ResourceDirectory <Language>(new LanguageKeyValueGenerator(), _languageDir, "*.xaml");
            var finder = new ResourceFinder <Language>(dir);

            var reader             = new CacheableResourceReader <Language>();
            var r                  = new ResourceDictionary();
            var mergedDictionaries = r.MergedDictionaries;
            var switcher           = new ResourceState <Language>(new ResourceUpdater <Language>(reader, mergedDictionaries));

            switcher.Switch(finder, "en-US");
            Assert.AreEqual("en-US", switcher.Current.Id);

            switcher.Switch(finder, "ja-JP");
            Assert.AreEqual("ja-JP", switcher.Current.Id);

            switcher.Switch(finder, null);
            Assert.AreEqual("en-US", switcher.Current.Id);
        }
Пример #4
0
        public void ResourceUpdaterTest()
        {
            var r = new ResourceDictionary();
            var mergedDictionaries = r.MergedDictionaries;

            var reader  = new CacheableResourceReader <Theme>();
            var updater = new ResourceUpdater <Theme>(reader, mergedDictionaries);

            Assert.AreEqual(0, mergedDictionaries.Count);

            // General to General (update, merge)
            updater.Update(_generalTheme, _generalTheme);
            Assert.AreEqual(1, mergedDictionaries.Count);

            // General to Solarized (update, merge, remove)
            updater.Update(_generalTheme, _solarizedTheme);
            Assert.AreEqual(1, mergedDictionaries.Count);
            Assert.AreEqual("Solarized theme", mergedDictionaries[0]["ThemeName"] as string);

            // Solarized to General2 (update, merge, remove)
            updater.Update(_solarizedTheme, _general2Theme);
            Assert.AreEqual(1, mergedDictionaries.Count);
            Assert.AreEqual("General2 theme", mergedDictionaries[0]["ThemeName"] as string);
        }
Пример #5
0
        public void CacheableResourceReaderTest()
        {
            var reader = new CacheableResourceReader <Theme>();

            PrivateObject po        = new PrivateObject(reader);
            var           cachedDic = (po.GetField("_cachedDictionaries") as IDictionary <string, ResourceDictionary>);

            var result = reader.Read(_themeDic["General"]);

            Assert.AreEqual("General theme", result["ThemeName"]);
            Assert.AreEqual(1, cachedDic.Count);

            result = reader.Read(_themeDic["Solarized"]);
            Assert.AreEqual("Solarized theme", result["ThemeName"]);
            Assert.AreEqual(2, cachedDic.Count);

            result = reader.Read(_themeDic["General"]);
            Assert.AreEqual("General theme", result["ThemeName"]);
            Assert.AreEqual(2, cachedDic.Count);

            result = reader.Read(_themeDic["Solarized"]);
            Assert.AreEqual("Solarized theme", result["ThemeName"]);
            Assert.AreEqual(2, cachedDic.Count);
        }