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")); }
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")); }
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"); }
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"); }
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"); }
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); }
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"); }
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) { }
public TagComparer(TagRuleEngine tagEngine, StringComparer nameComparer = null) { this.tagEngine = tagEngine; this.nameComparer = nameComparer ?? StringComparer.CurrentCultureIgnoreCase; }
public SqlDialect(TagRuleEngine tagEngine, bool excludeHidden, AnsiSqlCompiler parentCompiler) : base(tagEngine, excludeHidden, parentCompiler) { }
public static Color?GetTagColor(this TagRuleEngine tagEngine, string tag) => ColorService.ParseColor(tagEngine.GetPropertyValue(tag, "color"));
public SqlSearchCompiler(TagRuleEngine tagEngine, bool excludeHidden, Func <string, Term> getSavedSearch) : base(getSavedSearch) { this.tagEngine = tagEngine; this.excludeHidden = excludeHidden; }
public SearchDialect(TagRuleEngine tagEngine, bool excludeHidden = true) { this.tagEngine = tagEngine; this.excludeHidden = excludeHidden; }
public static string FindProperty(this TagRuleEngine tagEngine, string tag, Func <string, bool> predicate) => tagEngine.GetAllTagProperties(tag).Where(predicate).FirstOrDefault();
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)); }
public SearchDialect(TagRuleEngine tagEngine, bool excludeHidden, QueryCompiler <T> parentCompiler) { this.TagEngine = tagEngine; this.ExcludeHidden = excludeHidden; this.ParentCompiler = parentCompiler; }
public static string FindProperty(this TagRuleEngine tagEngine, string tag, string prefix) => tagEngine.FindProperty(tag, p => p.StartsWith(prefix, StringComparison.Ordinal));