public void SelectorByType()
        {
            var form = new TestForm();

            form.button1.BackColor = Color.Black;

            ApplyAndAssertBackColorRed(form, "Form");
            Assert.Equal(Color.Black, form.button1.BackColor);
            ApplyAndAssertBackColorRed(form, "TestForm");
            ApplyAndAssertBackColorRed(form, "Button", form.DescendantsControls().OfType <Button>().ToArray());
        }
        public void HtmlColorTest()
        {
            var form = new TestForm {
                BackColor = Color.Black
            };
            const string htmlColor = "#2060ff";
            var          theme     = new Theme(new[] { new SelectorBlock("Form", new[] { new Property("BackColor", htmlColor) }) });

            theme.ApplyTheme(form);

            Assert.Equal(ColorTranslator.FromHtml(htmlColor), form.BackColor);
        }
        public void SelectWithVariables()
        {
            IWinformThemeElement variables = new VariableBlock(new[] { new Property("colorOfSky", "Blue") });
            IWinformThemeElement selector  = new SelectorBlock("Form", new[] { new Property("BackColor", "@colorOfSky") });
            var theme = new Theme(new[] { variables, selector });
            var form  = new TestForm {
                BackColor = Color.Black
            };

            theme.ApplyTheme(form);

            Assert.Equal(Color.Blue, form.BackColor);
        }
        public void SelectorByName()
        {
            var form = new TestForm {
                Name = "TestName"
            };

            ApplyAndAssertBackColorRed(form, "#TestName");

            form.button1.Name      = "BTN";
            form.button2.BackColor = Color.Black;
            ApplyAndAssertBackColorRed(form, "#BTN", form.button1);
            Assert.Equal(Color.Black, form.button2.BackColor);
        }
        public void NestedSelectors()
        {
            var form = new TestForm();

            form.button1.Tag = form.button2.Tag = "yellow";
            form.BackColor   = form.button1.BackColor = form.button2.BackColor = Color.Black;

            IWinformThemeElement yellowClassSelector = new SelectorBlock(".yellow", new[] { new Property("BackColor", "Yellow") });
            IWinformThemeElement panel1Selector      = new SelectorBlock("#panel1", new[] { new Property("BackColor", "Blue"), yellowClassSelector });
            var theme = new Theme(new[] { panel1Selector });

            theme.ApplyTheme(form);
            Assert.Equal(Color.Black, form.BackColor);
            Assert.Equal(Color.Black, form.button1.BackColor);
            Assert.Equal(Color.Yellow, form.button2.BackColor);
            Assert.Equal(Color.Blue, form.panel1.BackColor);
        }
        public void SelectorByClass()
        {
            var form = new TestForm();

            form.Tag = "Red";
            ApplyAndAssertBackColorRed(form, ".Red");

            form.Tag = "SomeClass NotRed";
            Assert.Throws <AllException>(() => ApplyAndAssertBackColorRed(form, ".Red"));

            form.Tag = "SomeClass Red";
            ApplyAndAssertBackColorRed(form, ".Red");

            form.button1.Tag       = "BTN Red";
            form.button2.BackColor = Color.Black;

            ApplyAndAssertBackColorRed(form, ".BTN", form.button1);
            Assert.Equal(Color.Black, form.button2.BackColor);
        }
        public void RegisterMessage()
        {
            var form = new TestForm();

            form.button1.BackColor = form.button2.BackColor = form.BackColor = Color.Black;
            var theme = new Theme(new[] { new SelectorBlock("Button", new[] { new Property("BackColor", nameof(Color.AliceBlue)) }) });

            using (ThemeHooker.HookTheme(theme))
            {
                var timer = new Timer();
                timer.Tick    += (s, e) => form.Close();
                timer.Interval = 1000;
                timer.Start();
                Application.Run(form);
            }

            Assert.Equal(Color.AliceBlue, form.button1.BackColor);
            Assert.Equal(Color.AliceBlue, form.button2.BackColor);
            Assert.Equal(Color.Black, form.BackColor);
        }
        public void ThemeWithInlude()
        {
            IWinformThemeElement variables = new VariableBlock(new[] { new Property("colorOfSky", "Blue") });
            IWinformThemeElement selector  = new SelectorBlock("Form", new[] { new Property("BackColor", "@colorOfSky") });
            var theme  = new Theme(new[] { variables, selector });
            var theme2 = new Theme(new[] { new SelectorBlock("Button", new[] { new Property("BackColor", "Yellow") }) });

            theme.IncludeThemes.Add(theme2);
            var form = new TestForm {
                BackColor = Color.Black
            };

            form.button1.BackColor = Color.Black;
            form.button2.BackColor = Color.Black;

            theme.ApplyTheme(form);

            Assert.Equal(Color.Blue, form.BackColor);
            Assert.Equal(Color.Yellow, form.button1.BackColor);
            Assert.Equal(Color.Yellow, form.button2.BackColor);
        }