Пример #1
0
        public void Evaluate_Always_ConsidersRulesInOrder(FilterSetResult expectedResult, FilterRuleType[] ruleTypes, bool[] states)
        {
            FilterRule<object>[] filterRules = new FilterRule<object>[ruleTypes.Length];
            for (int i = 0; i < ruleTypes.Length; i++)
                filterRules[i] = new FilterRule<object>(ruleTypes[i],
                    states[i] ? (Filter<object>)new AnyFilter<object>() : new NoneFilter<object>());

            FilterSet<object> filterSet = new FilterSet<object>(filterRules);
            Assert.AreEqual(expectedResult, filterSet.Evaluate(null));
        }
Пример #2
0
        public void Evaluate_Always_ConsidersRulesInOrder(FilterSetResult expectedResult, FilterRuleType[] ruleTypes, bool[] states)
        {
            FilterRule <object>[] filterRules = new FilterRule <object> [ruleTypes.Length];
            for (int i = 0; i < ruleTypes.Length; i++)
            {
                filterRules[i] = new FilterRule <object>(ruleTypes[i],
                                                         states[i] ? (Filter <object>) new AnyFilter <object>() : new NoneFilter <object>());
            }

            FilterSet <object> filterSet = new FilterSet <object>(filterRules);

            Assert.AreEqual(expectedResult, filterSet.Evaluate(null));
        }
        private ManagedTestCommand CreateFilteredClosure(Dictionary <Test, ManagedTestCommand> commands,
                                                         Test test, FilterSet <ITestDescriptor> filterSet, bool exactFilter, bool hasExplicitAncestor, ITestContextManager contextManager)
        {
            FilterSetResult filterSetResult = filterSet.Evaluate(test);

            if (filterSetResult == FilterSetResult.Exclude)
            {
                return(null);
            }

            bool isMatch          = filterSetResult == FilterSetResult.Include;
            bool isExplicit       = isMatch && !hasExplicitAncestor;
            bool hasExplicitChild = false;

            var children = new List <ManagedTestCommand>(test.Children.Count);

            foreach (Test child in test.Children)
            {
                ManagedTestCommand childMonitor = CreateFilteredClosure(commands, child, filterSet, exactFilter,
                                                                        hasExplicitAncestor || isExplicit, contextManager);
                if (childMonitor != null)
                {
                    children.Add(childMonitor);

                    if (childMonitor.IsExplicit)
                    {
                        hasExplicitChild = true;
                    }
                }
            }

            if (isMatch || children.Count != 0 || (!exactFilter && hasExplicitAncestor))
            {
                return(CreateCommand(commands, test, children, isExplicit || hasExplicitChild, contextManager));
            }

            return(null);
        }