bool LoadCurrentCategory()
        {
            var    key = provider.Name + ".CurrentCategory";
            string value;

            if (settings.TryGetValue(key, out value))
            {
                TestCategory category;
                if (string.Equals(value, "all", StringComparison.OrdinalIgnoreCase))
                {
                    category = TestCategory.All;
                }
                else if (string.Equals(value, "global", StringComparison.OrdinalIgnoreCase))
                {
                    category = TestCategory.Global;
                }
                else
                {
                    category = categories.FirstOrDefault(c => c.Name.Equals(value)) ?? TestCategory.All;
                }
                if (category == currentCategory)
                {
                    return(false);
                }
                currentCategory = category;
                return(true);
            }

            currentCategory = TestCategory.All;
            settings.SetValue(key, currentCategory.Name);
            return(true);
        }
        public TestConfiguration(ITestConfigurationProvider provider, SettingsBag settings)
        {
            this.provider = provider;
            this.settings = settings;
            features      = new Dictionary <string, bool> ();
            categories    = new List <TestCategory> ();

            foreach (var feature in provider.Features)
            {
                features.Add(feature.Name, false);
            }

            categories.AddRange(provider.Categories);
            currentCategory = TestCategory.All;
            Load(false);

            settings.PropertyChanged += (sender, e) => Load(true);
        }
 public ReadOnlySnapshot(ITestConfigurationProvider provider, IReadOnlyDictionary <string, bool> features, TestCategory currentCategory)
 {
     this.features        = features;
     this.currentCategory = currentCategory;
 }