From 54be959f7f932282fb6268a77f44ae0135154a1b Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Sun, 11 Jun 2023 09:18:54 +0200 Subject: Revert "Hmusum/revert validate semantic rules" --- .../model/container/search/SemanticRulesTest.java | 48 ++++++++++++++-------- .../rules/one.sr | 5 +++ .../rules/other.sr | 5 +++ .../semanticrules_with_errors/rules/invalid.sr | 7 ++++ 4 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/one.sr create mode 100644 config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/other.sr create mode 100644 config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_errors/rules/invalid.sr (limited to 'config-model/src/test/java/com') diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/SemanticRulesTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/search/SemanticRulesTest.java index d9e2ae59ef6..e20e14f9465 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/SemanticRulesTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/SemanticRulesTest.java @@ -2,52 +2,66 @@ package com.yahoo.vespa.model.container.search; import com.yahoo.config.model.application.provider.FilesApplicationPackage; -import com.yahoo.language.simple.SimpleLinguistics; import com.yahoo.prelude.semantics.RuleBase; -import com.yahoo.prelude.semantics.RuleImporter; import com.yahoo.prelude.semantics.SemanticRulesConfig; import com.yahoo.prelude.semantics.parser.ParseException; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - import java.io.File; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + /** * @author bratseth */ public class SemanticRulesTest { - private final static String root = "src/test/java/com/yahoo/vespa/model/container/search/semanticrules"; + private static final String basePath = "src/test/java/com/yahoo/vespa/model/container/search/"; + private static final String root = basePath + "semanticrules"; + private static final String rootWithErrors = basePath + "semanticrules_with_errors"; + private static final String rootWithDuplicateDefault = basePath + "semanticrules_with_duplicate_default_rule"; @Test - void semanticRulesTest() throws ParseException, IOException { + void semanticRulesTest() throws ParseException, IOException { SemanticRuleBuilder ruleBuilder = new SemanticRuleBuilder(); SemanticRules rules = ruleBuilder.build(FilesApplicationPackage.fromFile(new File(root))); SemanticRulesConfig.Builder configBuilder = new SemanticRulesConfig.Builder(); rules.getConfig(configBuilder); SemanticRulesConfig config = new SemanticRulesConfig(configBuilder); - Map ruleBases = toMap(config); + Map ruleBases = SemanticRuleBuilder.toMap(config); assertEquals(2, ruleBases.size()); assertTrue(ruleBases.containsKey("common")); assertTrue(ruleBases.containsKey("other")); assertFalse(ruleBases.get("common").isDefault()); assertTrue(ruleBases.get("other").isDefault()); + assertTrue(ruleBases.get("other").includes("common")); + assertNotNull(ruleBases.get("other").getCondition("stopword")); } - private static Map toMap(SemanticRulesConfig config) throws ParseException, IOException { - RuleImporter ruleImporter = new RuleImporter(config, new SimpleLinguistics()); - Map ruleBaseMap = new HashMap<>(); - for (SemanticRulesConfig.Rulebase ruleBaseConfig : config.rulebase()) { - RuleBase ruleBase = ruleImporter.importConfig(ruleBaseConfig); - if (ruleBaseConfig.isdefault()) - ruleBase.setDefault(true); - ruleBaseMap.put(ruleBase.getName(), ruleBase); + @Test + void rulesWithErrors() { + try { + new SemanticRuleBuilder().build(FilesApplicationPackage.fromFile(new File(rootWithErrors))); + fail("should fail with exception"); + } catch (Exception e) { + assertEquals("com.yahoo.prelude.semantics.parser.ParseException: Could not parse 'semantic-rules.cfg'", e.getMessage()); + } + } + + @Test + void rulesWithDuplicateDefault() { + try { + new SemanticRuleBuilder().build(FilesApplicationPackage.fromFile(new File(rootWithDuplicateDefault))); + fail("should fail with exception"); + } catch (Exception e) { + assertEquals("Rules [one, other] are both marked as the default rule, there can only be one", e.getMessage()); } - return ruleBaseMap; } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/one.sr b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/one.sr new file mode 100644 index 00000000000..4f2271e91ba --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/one.sr @@ -0,0 +1,5 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@default + +# Spelling correction +bahc -> bach; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/other.sr b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/other.sr new file mode 100644 index 00000000000..29f7e85967f --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_duplicate_default_rule/rules/other.sr @@ -0,0 +1,5 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@default + +# Spelling correction +list-> liszt; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_errors/rules/invalid.sr b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_errors/rules/invalid.sr new file mode 100644 index 00000000000..9d89cab7e31 --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules_with_errors/rules/invalid.sr @@ -0,0 +1,7 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +# Stopwords +[stopword] -> ; +[stopword] :- and, or, the, what, why, how; + +# Synonyms, with wrong character at end of line +[bill] :- Bill, bill, William: -- cgit v1.2.3 From b226cf513893863e06750a8e3d813392cc2ce002 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Sun, 11 Jun 2023 13:10:59 +0200 Subject: Ignore automata when validating semantic rules --- .../com/yahoo/vespa/model/container/search/SemanticRuleBuilder.java | 4 ++-- .../yahoo/vespa/model/container/search/semanticrules/rules/common.sr | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'config-model/src/test/java/com') diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/SemanticRuleBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/SemanticRuleBuilder.java index 4a295d49a32..4923c41224e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/SemanticRuleBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/SemanticRuleBuilder.java @@ -25,7 +25,7 @@ import java.util.Map; // TODO: Move into SemanticRules public class SemanticRuleBuilder { - /** Build the set of semantic rules for an application package and validates them */ + /** Builds the semantic rules for an application package and validates them */ public SemanticRules build(ApplicationPackage applicationPackage) { var ruleFiles = applicationPackage.getFiles(ApplicationPackage.RULES_DIR, "sr"); var rules = new SemanticRules(ruleFiles.stream().map(this::toRuleBaseConfigView).toList()); @@ -73,7 +73,7 @@ public class SemanticRuleBuilder { } static Map toMap(SemanticRulesConfig config) throws ParseException, IOException { - RuleImporter ruleImporter = new RuleImporter(config, new SimpleLinguistics()); + RuleImporter ruleImporter = new RuleImporter(config, true, new SimpleLinguistics()); Map ruleBaseMap = new HashMap<>(); for (SemanticRulesConfig.Rulebase ruleBaseConfig : config.rulebase()) { RuleBase ruleBase = ruleImporter.importConfig(ruleBaseConfig); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules/rules/common.sr b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules/rules/common.sr index 3833641a56c..92b279aada4 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules/rules/common.sr +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/semanticrules/rules/common.sr @@ -1,4 +1,5 @@ # Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@automata(etc/vespa/fsa/stopwords.fsa) ## Some test rules # Spelling correction -- cgit v1.2.3