public void Analyze_WithAMissingTag_InlcudesTheTagInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat" });

            Assert.Contains(results.SuggestedTags, t => t.Result == "tail");
        }
        public void Analyze_WithAnExcludedTag_DoesNotIncludeTheExcludedTagInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Music);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "rock", "instrumental" });

            Assert.DoesNotContain(results.SuggestedTags, s => s.Result == "vocals");
        }
        public void Analyze_WithARejectedMissingTag_DoesNotIncludeTheRejectedTagInMissingTagSets()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat" }, new[] { "hair" });

            Assert.DoesNotContain(results.MissingTagSets, s => s.Result.Contains("hair"));
        }
        public void Analyze_WithARejectedExistingTag_IncludesTheExistingTagInTheExistingRejectedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat" }, new[] { "mammal" });

            Assert.Contains(results.ExistingRejectedTags, t => t == "cat");
        }
        public void Analyze_WithARejecteSuggestedTag_DoesNotIncludeTheRejectedTagInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "whale" }, new[] { "hair" });

            Assert.DoesNotContain(results.SuggestedTags, s => s.Result == "whiskers");
        }
        public void Analyze_WithAMissingTag_DoesNotIncludesRootAbstractDescdendantTagsInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "tail" });

            Assert.Contains(results.SuggestedTags, s => s.Result == "animal");
        }
        public void Analyze_WithAMissingTag_InlcudesTheTagInMissingTagSets()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat" });

            Assert.Contains(results.MissingTagSets, s => s.Result.Contains("tail"));
        }
Esempio n. 8
0
        public static double GetTagOrder(this TagRuleEngine tagEngine, string tag)
        {
            var value = tagEngine.GetPropertyValue(tag, "order")?.Trim();

            if (string.IsNullOrEmpty(value) || !double.TryParse(value, out var order) || double.IsNaN(order))
            {
                return(100);
            }

            return(order);
        }
        public void Analyze_WithAMoreSpecificImplication_IncludesBothTagsInMissingTagSets()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "dog" });

            Assert.Contains(results.MissingTagSets, s => s.Result.Contains("hair"));
            Assert.Contains(results.MissingTagSets, s => s.Result.Contains("fur"));
        }
Esempio n. 10
0
        public void Analyze_WithAMissingTag_InlcudesTheFirstConcreteTagInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "tail" });

            Assert.Contains(results.SuggestedTags, s => s.Result == "mammal");
            Assert.DoesNotContain(results.SuggestedTags, s => s.Result == "cat");
        }
Esempio n. 11
0
        public void Analyze_WithATagAlias_ReplacesTheAliasWithTheCanonicalTagInEffectiveTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "feline" });

            Assert.Contains(results.EffectiveTags, t => t == "cat");
            Assert.DoesNotContain(results.EffectiveTags, t => t == "feline");
        }
Esempio n. 12
0
        public void Analyze_WithAMoreSpecificSuggestion_IncludesBothTagsInSuggestedTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "whale" });

            Assert.Contains(results.SuggestedTags, s => s.Result == "hair");
            Assert.Contains(results.SuggestedTags, s => s.Result == "whiskers");
        }
Esempio n. 13
0
        public void Analyze_WithAFullyDescribedScenario_DoesNotSuggestExtraTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat", "tail", "fur", "whiskers" });

            Assert.Empty(results.MissingTagSets);
            Assert.Empty(results.SuggestedTags);
        }
Esempio n. 14
0
        public void Analyze_WithADescendantTag_InlcudesAncestorsOfTheTagInEffectiveTags()
        {
            var parser = new TagRulesParser();
            var rules  = parser.Parse(Resources.Animals);
            var engine = new TagRuleEngine(rules);

            var results = engine.Analyze(new[] { "cat" });

            Assert.Contains(results.EffectiveTags, t => t == "mammal");
            Assert.Contains(results.EffectiveTags, t => t == "animal");
            Assert.Contains(results.EffectiveTags, t => t == "object");
        }
Esempio n. 15
0
 public static TagComparer GetTagComparer(this TagRuleEngine tagEngine, StringComparer nameComparer = null) => new TagComparer(tagEngine, nameComparer);
 public PredicateDialect(TagRuleEngine tagEngine, bool excludeHidden, PredicateSearchCompiler parentCompiler)
     : base(tagEngine, excludeHidden, parentCompiler)
 {
 }
Esempio n. 17
0
 public TagComparer(TagRuleEngine tagEngine, StringComparer nameComparer = null)
 {
     this.tagEngine    = tagEngine;
     this.nameComparer = nameComparer ?? StringComparer.CurrentCultureIgnoreCase;
 }
Esempio n. 18
0
 public SqlDialect(TagRuleEngine tagEngine, bool excludeHidden, AnsiSqlCompiler parentCompiler)
     : base(tagEngine, excludeHidden, parentCompiler)
 {
 }
Esempio n. 19
0
 public static Color?GetTagColor(this TagRuleEngine tagEngine, string tag) =>
 ColorService.ParseColor(tagEngine.GetPropertyValue(tag, "color"));
Esempio n. 20
0
 public SqlSearchCompiler(TagRuleEngine tagEngine, bool excludeHidden, Func <string, Term> getSavedSearch)
     : base(getSavedSearch)
 {
     this.tagEngine     = tagEngine;
     this.excludeHidden = excludeHidden;
 }
Esempio n. 21
0
 public SearchDialect(TagRuleEngine tagEngine, bool excludeHidden = true)
 {
     this.tagEngine     = tagEngine;
     this.excludeHidden = excludeHidden;
 }
Esempio n. 22
0
 public static string FindProperty(this TagRuleEngine tagEngine, string tag, Func <string, bool> predicate) =>
 tagEngine.GetAllTagProperties(tag).Where(predicate).FirstOrDefault();
Esempio n. 23
0
        public static string GetPropertyValue(this TagRuleEngine tagEngine, string tag, string propertyName)
        {
            var value = tagEngine.FindProperty(tag, propertyName + "=");

            return(value == null ? value : value.Substring(propertyName.Length + 1));
        }
Esempio n. 24
0
 public SearchDialect(TagRuleEngine tagEngine, bool excludeHidden, QueryCompiler <T> parentCompiler)
 {
     this.TagEngine      = tagEngine;
     this.ExcludeHidden  = excludeHidden;
     this.ParentCompiler = parentCompiler;
 }
Esempio n. 25
0
 public static string FindProperty(this TagRuleEngine tagEngine, string tag, string prefix) =>
 tagEngine.FindProperty(tag, p => p.StartsWith(prefix, StringComparison.Ordinal));