summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java')
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java276
1 files changed, 276 insertions, 0 deletions
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java
new file mode 100644
index 00000000000..17d94639d87
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/parser/SchemaParserTestCase.java
@@ -0,0 +1,276 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.parser;
+
+import com.yahoo.config.model.application.provider.BaseDeployLogger;
+import com.yahoo.config.model.deploy.TestProperties;
+import com.yahoo.io.IOUtils;
+import static com.yahoo.config.model.test.TestUtil.joinLines;
+
+import java.io.File;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertThrows;
+
+/**
+ * @author arnej
+ */
+public class SchemaParserTestCase {
+
+ ParsedSchema parseString(String input) throws Exception {
+ var deployLogger = new BaseDeployLogger();
+ var modelProperties = new TestProperties();
+ var stream = new SimpleCharStream(input);
+ try {
+ var parser = new SchemaParser(stream, deployLogger, modelProperties);
+ return parser.schema();
+ } catch (ParseException pe) {
+ throw new ParseException(stream.formatException(pe.getMessage()));
+ }
+ }
+
+ ParsedSchema parseFile(String fileName) throws Exception {
+ File file = new File(fileName);
+ return parseString(IOUtils.readFile(file));
+ }
+
+ @Test
+ public void minimal_schema_can_be_parsed() throws Exception {
+ String input = joinLines
+ ("schema foo {",
+ " document foo {",
+ " }",
+ "}");
+ ParsedSchema schema = parseString(input);
+ assertEquals("foo", schema.name());
+ assertTrue(schema.hasDocument());
+ assertEquals("foo", schema.getDocument().name());
+ }
+
+ @Test
+ public void document_only_can_be_parsed() throws Exception {
+ String input = joinLines
+ ("document bar {",
+ "}");
+ ParsedSchema schema = parseString(input);
+ assertEquals("bar", schema.name());
+ assertTrue(schema.hasDocument());
+ assertEquals("bar", schema.getDocument().name());
+ }
+
+ @Test
+ public void multiple_documents_disallowed() {
+ String input = joinLines
+ ("schema foo {",
+ " document foo {",
+ " }",
+ " document foo2 {",
+ " }",
+ "}");
+ var e = assertThrows(IllegalArgumentException.class, () -> parseString(input));
+ assertEquals("schema 'foo' error: already has document 'foo' so cannot add document 'foo2'", e.getMessage());
+ }
+
+ @Test
+ public void backwards_path_is_disallowed() {
+ assertEquals("'..' is not allowed in path",
+ assertThrows(IllegalArgumentException.class,
+ () -> parseString("schema foo {\n" +
+ " constant my_constant_tensor {\n" +
+ " file: foo/../bar\n" +
+ " type: tensor<float>(x{},y{})\n" +
+ " }\n" +
+ "}\n")).getMessage());
+ }
+
+ void checkFileParses(String fileName) throws Exception {
+ var schema = parseFile(fileName);
+ assertNotNull(schema);
+ assertNotNull(schema.name());
+ assertNotEquals("", schema.name());
+ }
+
+ @Test
+ public void parse_various_old_sdfiles() throws Exception {
+ checkFileParses("src/test/cfg/search/data/travel/schemas/TTData.sd");
+ checkFileParses("src/test/cfg/search/data/travel/schemas/TTEdge.sd");
+ checkFileParses("src/test/cfg/search/data/travel/schemas/TTPOI.sd");
+ checkFileParses("src/test/configmodel/types/other_doc.sd");
+ checkFileParses("src/test/configmodel/types/types.sd");
+ checkFileParses("src/test/configmodel/types/type_with_doc_field.sd");
+ checkFileParses("src/test/derived/advanced/advanced.sd");
+ checkFileParses("src/test/derived/annotationsimplicitstruct/annotationsimplicitstruct.sd");
+ checkFileParses("src/test/derived/annotationsinheritance2/annotationsinheritance2.sd");
+ checkFileParses("src/test/derived/annotationsinheritance/annotationsinheritance.sd");
+ checkFileParses("src/test/derived/annotationsoutsideofdocument/annotationsoutsideofdocument.sd");
+ checkFileParses("src/test/derived/annotationspolymorphy/annotationspolymorphy.sd");
+ checkFileParses("src/test/derived/annotationsreference2/annotationsreference2.sd");
+ checkFileParses("src/test/derived/annotationsreference/annotationsreference.sd");
+ checkFileParses("src/test/derived/annotationssimple/annotationssimple.sd");
+ checkFileParses("src/test/derived/annotationsstruct/annotationsstruct.sd");
+ checkFileParses("src/test/derived/annotationsstructarray/annotationsstructarray.sd");
+ checkFileParses("src/test/derived/array_of_struct_attribute/test.sd");
+ checkFileParses("src/test/derived/arrays/arrays.sd");
+ checkFileParses("src/test/derived/attributeprefetch/attributeprefetch.sd");
+ checkFileParses("src/test/derived/attributerank/attributerank.sd");
+ checkFileParses("src/test/derived/attributes/attributes.sd");
+ checkFileParses("src/test/derived/combinedattributeandindexsearch/combinedattributeandindexsearch.sd");
+ checkFileParses("src/test/derived/complex/complex.sd");
+ checkFileParses("src/test/derived/deriver/child.sd");
+ checkFileParses("src/test/derived/deriver/grandparent.sd");
+ checkFileParses("src/test/derived/deriver/parent.sd");
+ checkFileParses("src/test/derived/emptychild/child.sd");
+ checkFileParses("src/test/derived/emptychild/parent.sd");
+ checkFileParses("src/test/derived/emptydefault/emptydefault.sd");
+ checkFileParses("src/test/derived/exactmatch/exactmatch.sd");
+ checkFileParses("src/test/derived/fieldset/test.sd");
+ checkFileParses("src/test/derived/flickr/flickrphotos.sd");
+ checkFileParses("src/test/derived/function_arguments/test.sd");
+ checkFileParses("src/test/derived/function_arguments_with_expressions/test.sd");
+ checkFileParses("src/test/derived/gemini2/gemini.sd");
+ checkFileParses("src/test/derived/hnsw_index/test.sd");
+ checkFileParses("src/test/derived/id/id.sd");
+ checkFileParses("src/test/derived/importedfields/child.sd");
+ checkFileParses("src/test/derived/importedfields/grandparent.sd");
+ checkFileParses("src/test/derived/imported_fields_inherited_reference/child_a.sd");
+ checkFileParses("src/test/derived/imported_fields_inherited_reference/child_b.sd");
+ checkFileParses("src/test/derived/imported_fields_inherited_reference/child_c.sd");
+ checkFileParses("src/test/derived/imported_fields_inherited_reference/parent.sd");
+ checkFileParses("src/test/derived/importedfields/parent_a.sd");
+ checkFileParses("src/test/derived/importedfields/parent_b.sd");
+ checkFileParses("src/test/derived/imported_position_field/child.sd");
+ checkFileParses("src/test/derived/imported_position_field/parent.sd");
+ checkFileParses("src/test/derived/imported_position_field_summary/child.sd");
+ checkFileParses("src/test/derived/imported_position_field_summary/parent.sd");
+ checkFileParses("src/test/derived/imported_struct_fields/child.sd");
+ checkFileParses("src/test/derived/imported_struct_fields/parent.sd");
+ checkFileParses("src/test/derived/indexinfo_fieldsets/indexinfo_fieldsets.sd");
+ checkFileParses("src/test/derived/indexinfo_lowercase/indexinfo_lowercase.sd");
+ checkFileParses("src/test/derived/indexschema/indexschema.sd");
+ checkFileParses("src/test/derived/indexswitches/indexswitches.sd");
+ checkFileParses("src/test/derived/inheritance/child.sd");
+ checkFileParses("src/test/derived/inheritance/father.sd");
+ checkFileParses("src/test/derived/inheritance/grandparent.sd");
+ checkFileParses("src/test/derived/inheritance/mother.sd");
+ checkFileParses("src/test/derived/inheritdiamond/child.sd");
+ checkFileParses("src/test/derived/inheritdiamond/father.sd");
+ checkFileParses("src/test/derived/inheritdiamond/grandparent.sd");
+ checkFileParses("src/test/derived/inheritdiamond/mother.sd");
+ checkFileParses("src/test/derived/inheritfromgrandparent/child.sd");
+ checkFileParses("src/test/derived/inheritfromgrandparent/grandparent.sd");
+ checkFileParses("src/test/derived/inheritfromgrandparent/parent.sd");
+ checkFileParses("src/test/derived/inheritfromnull/inheritfromnull.sd");
+ checkFileParses("src/test/derived/inheritfromparent/child.sd");
+ checkFileParses("src/test/derived/inheritfromparent/parent.sd");
+ checkFileParses("src/test/derived/inheritstruct/child.sd");
+ checkFileParses("src/test/derived/inheritstruct/parent.sd");
+ checkFileParses("src/test/derived/integerattributetostringindex/integerattributetostringindex.sd");
+ checkFileParses("src/test/derived/language/language.sd");
+ checkFileParses("src/test/derived/lowercase/lowercase.sd");
+ checkFileParses("src/test/derived/mail/mail.sd");
+ checkFileParses("src/test/derived/map_attribute/test.sd");
+ checkFileParses("src/test/derived/map_of_struct_attribute/test.sd");
+ checkFileParses("src/test/derived/mlr/mlr.sd");
+ checkFileParses("src/test/derived/multiplesummaries/multiplesummaries.sd");
+ checkFileParses("src/test/derived/music3/music3.sd");
+ checkFileParses("src/test/derived/music/music.sd");
+ checkFileParses("src/test/derived/namecollision/collision.sd");
+ checkFileParses("src/test/derived/namecollision/collisionstruct.sd");
+ checkFileParses("src/test/derived/nearestneighbor/test.sd");
+ checkFileParses("src/test/derived/neuralnet/neuralnet.sd");
+ checkFileParses("src/test/derived/newrank/newrank.sd");
+ checkFileParses("src/test/derived/nuwa/newsindex.sd");
+ checkFileParses("src/test/derived/orderilscripts/orderilscripts.sd");
+ checkFileParses("src/test/derived/position_array/position_array.sd");
+ checkFileParses("src/test/derived/position_attribute/position_attribute.sd");
+ checkFileParses("src/test/derived/position_extra/position_extra.sd");
+ checkFileParses("src/test/derived/position_nosummary/position_nosummary.sd");
+ checkFileParses("src/test/derived/position_summary/position_summary.sd");
+ checkFileParses("src/test/derived/predicate_attribute/predicate_attribute.sd");
+ checkFileParses("src/test/derived/prefixexactattribute/prefixexactattribute.sd");
+ checkFileParses("src/test/derived/rankingexpression/rankexpression.sd");
+ checkFileParses("src/test/derived/rankprofileinheritance/child.sd");
+ checkFileParses("src/test/derived/rankprofileinheritance/parent1.sd");
+ checkFileParses("src/test/derived/rankprofileinheritance/parent2.sd");
+ checkFileParses("src/test/derived/rankprofilemodularity/test.sd");
+ checkFileParses("src/test/derived/rankprofiles/rankprofiles.sd");
+ checkFileParses("src/test/derived/rankproperties/rankproperties.sd");
+ checkFileParses("src/test/derived/ranktypes/ranktypes.sd");
+ checkFileParses("src/test/derived/reference_fields/ad.sd");
+ checkFileParses("src/test/derived/reference_fields/campaign.sd");
+ checkFileParses("src/test/derived/renamedfeatures/foo.sd");
+ checkFileParses("src/test/derived/reserved_position/reserved_position.sd");
+ checkFileParses("src/test/derived/schemainheritance/child.sd");
+ checkFileParses("src/test/derived/schemainheritance/importedschema.sd");
+ checkFileParses("src/test/derived/schemainheritance/parent.sd");
+ checkFileParses("src/test/derived/slice/test.sd");
+ checkFileParses("src/test/derived/streamingjuniper/streamingjuniper.sd");
+ checkFileParses("src/test/derived/streamingstructdefault/streamingstructdefault.sd");
+ checkFileParses("src/test/derived/streamingstruct/streamingstruct.sd");
+ checkFileParses("src/test/derived/structandfieldset/test.sd");
+ checkFileParses("src/test/derived/structanyorder/structanyorder.sd");
+ checkFileParses("src/test/derived/structinheritance/bad.sd");
+ checkFileParses("src/test/derived/structinheritance/simple.sd");
+ checkFileParses("src/test/derived/tensor2/first.sd");
+ checkFileParses("src/test/derived/tensor2/second.sd");
+ checkFileParses("src/test/derived/tensor/tensor.sd");
+ checkFileParses("src/test/derived/tokenization/tokenization.sd");
+ checkFileParses("src/test/derived/twostreamingstructs/streamingstruct.sd");
+ checkFileParses("src/test/derived/twostreamingstructs/whatever.sd");
+ checkFileParses("src/test/derived/types/types.sd");
+ checkFileParses("src/test/derived/uri_array/uri_array.sd");
+ checkFileParses("src/test/derived/uri_wset/uri_wset.sd");
+ checkFileParses("src/test/examples/arrays.sd");
+ checkFileParses("src/test/examples/arraysweightedsets.sd");
+ checkFileParses("src/test/examples/attributeposition.sd");
+ checkFileParses("src/test/examples/attributesettings.sd");
+ checkFileParses("src/test/examples/attributesexactmatch.sd");
+ checkFileParses("src/test/examples/casing.sd");
+ checkFileParses("src/test/examples/comment.sd");
+ checkFileParses("src/test/examples/documentidinsummary.sd");
+ checkFileParses("src/test/examples/fieldoftypedocument.sd");
+ checkFileParses("src/test/examples/implicitsummaries_attribute.sd");
+ checkFileParses("src/test/examples/implicitsummaryfields.sd");
+ checkFileParses("src/test/examples/incorrectrankingexpressionfileref.sd");
+ checkFileParses("src/test/examples/indexing_extra.sd");
+ checkFileParses("src/test/examples/indexing_modify_field_no_output.sd");
+ checkFileParses("src/test/examples/indexing.sd");
+ checkFileParses("src/test/examples/indexrewrite.sd");
+ checkFileParses("src/test/examples/indexsettings.sd");
+ checkFileParses("src/test/examples/integerindex2attribute.sd");
+ checkFileParses("src/test/examples/invalidimplicitsummarysource.sd");
+ checkFileParses("src/test/examples/multiplesummaries.sd");
+ checkFileParses("src/test/examples/music.sd");
+ checkFileParses("src/test/examples/nextgen/boldedsummaryfields.sd");
+ checkFileParses("src/test/examples/nextgen/dynamicsummaryfields.sd");
+ checkFileParses("src/test/examples/nextgen/extrafield.sd");
+ checkFileParses("src/test/examples/nextgen/implicitstructtypes.sd");
+ checkFileParses("src/test/examples/nextgen/simple.sd");
+ checkFileParses("src/test/examples/nextgen/summaryfield.sd");
+ checkFileParses("src/test/examples/nextgen/toggleon.sd");
+ checkFileParses("src/test/examples/nextgen/untransformedsummaryfields.sd");
+ checkFileParses("src/test/examples/ngram.sd");
+ checkFileParses("src/test/examples/outsidedoc.sd");
+ checkFileParses("src/test/examples/outsidesummary.sd");
+ checkFileParses("src/test/examples/position_array.sd");
+ checkFileParses("src/test/examples/position_attribute.sd");
+ checkFileParses("src/test/examples/position_base.sd");
+ checkFileParses("src/test/examples/position_extra.sd");
+ checkFileParses("src/test/examples/position_index.sd");
+ checkFileParses("src/test/examples/position_inherited.sd");
+ checkFileParses("src/test/examples/position_summary.sd");
+ checkFileParses("src/test/examples/rankmodifier/literal.sd");
+ checkFileParses("src/test/examples/rankpropvars.sd");
+ checkFileParses("src/test/examples/reserved_words_as_field_names.sd");
+ checkFileParses("src/test/examples/simple.sd");
+ checkFileParses("src/test/examples/stemmingdefault.sd");
+ checkFileParses("src/test/examples/stemmingsetting.sd");
+ checkFileParses("src/test/examples/strange.sd");
+ checkFileParses("src/test/examples/struct.sd");
+ checkFileParses("src/test/examples/summaryfieldcollision.sd");
+ checkFileParses("src/test/examples/weightedset-summaryto.sd");
+ }
+}