From fc3e5a0a7c9c64d275fec498f0e80dc02444c12d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 18 Dec 2019 19:09:49 -0500 Subject: Add support for parsing variables This adds a reader flag and serdi option for extending a syntax with support for SPARQL-like variables, for storing things like patterns or simple queries. --- test/bad/bad-var.ttl | 2 ++ test/bad/manifest.ttl | 6 ++++++ test/meson.build | 7 +++++++ test/pattern/bad-pattern.nq | 1 + test/pattern/bad-pattern.ttl | 2 ++ test/pattern/manifest.ttl | 35 +++++++++++++++++++++++++++++++++++ test/pattern/test-pattern.nt | 6 ++++++ test/pattern/test-pattern.ttl | 10 ++++++++++ test/test_overflow.c | 4 +++- 9 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 test/bad/bad-var.ttl create mode 100644 test/pattern/bad-pattern.nq create mode 100644 test/pattern/bad-pattern.ttl create mode 100644 test/pattern/manifest.ttl create mode 100644 test/pattern/test-pattern.nt create mode 100644 test/pattern/test-pattern.ttl (limited to 'test') diff --git a/test/bad/bad-var.ttl b/test/bad/bad-var.ttl new file mode 100644 index 00000000..29b5b008 --- /dev/null +++ b/test/bad/bad-var.ttl @@ -0,0 +1,2 @@ +?s + . diff --git a/test/bad/manifest.ttl b/test/bad/manifest.ttl index 5f208983..f76a9d1b 100644 --- a/test/bad/manifest.ttl +++ b/test/bad/manifest.ttl @@ -71,6 +71,7 @@ <#bad-string> <#bad-subject> <#bad-uri-escape> + <#bad-var> <#bad-verb> <#invalid-char-in-local> <#invalid-char-in-prefix> @@ -400,6 +401,11 @@ mf:name "bad-uri-escape" ; mf:action . +<#bad-var> + rdf:type rdft:TestTurtleNegativeSyntax ; + mf:name "bad-var" ; + mf:action . + <#bad-verb> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "bad-verb" ; diff --git a/test/meson.build b/test/meson.build index ac1fb205..3d12d211 100644 --- a/test/meson.build +++ b/test/meson.build @@ -159,6 +159,13 @@ if get_option('utils') suite: ['rdf', 'serd'], timeout: 240) + manifest = files('pattern' / 'manifest.ttl') + base_uri = serd_base + 'pattern' + '/' + test('pattern', run_test_suite, + args: script_args + [manifest, base_uri, '--', '-x'], + suite: ['rdf', 'serd'], + timeout: 240) + ### Run the lax suite with lax parsing enabled as well manifest = files('lax/manifest.ttl') base_uri = serd_base + 'lax/' diff --git a/test/pattern/bad-pattern.nq b/test/pattern/bad-pattern.nq new file mode 100644 index 00000000..a7e0c994 --- /dev/null +++ b/test/pattern/bad-pattern.nq @@ -0,0 +1 @@ + ?pµ . diff --git a/test/pattern/bad-pattern.ttl b/test/pattern/bad-pattern.ttl new file mode 100644 index 00000000..5f3dbfdd --- /dev/null +++ b/test/pattern/bad-pattern.ttl @@ -0,0 +1,2 @@ +?sµ + . diff --git a/test/pattern/manifest.ttl b/test/pattern/manifest.ttl new file mode 100644 index 00000000..a179a64d --- /dev/null +++ b/test/pattern/manifest.ttl @@ -0,0 +1,35 @@ +@prefix mf: . +@prefix rdf: . +@prefix rdfs: . +@prefix rdft: . + +<> + rdf:type mf:Manifest ; + rdfs:comment "Serd pattern syntax test cases" ; + mf:entries ( + <#bad-pattern-nq> + <#bad-pattern-ttl> + <#test-pattern-nt> + <#test-pattern-ttl> + ) . + +<#bad-pattern-nq> + rdf:type rdft:TestNQuadsNegativeSyntax ; + mf:name "bad-pattern-nq" ; + mf:action . + +<#bad-pattern-ttl> + rdf:type rdft:TestTurtleNegativeSyntax ; + mf:name "bad-pattern" ; + mf:action . + +<#test-pattern-nt> + rdf:type rdft:TestNTriplesPositiveSyntax ; + mf:name "test-pattern-nt" ; + mf:action . + +<#test-pattern-ttl> + rdf:type rdft:TestTurtleEval ; + mf:name "test-pattern" ; + mf:action ; + mf:result . diff --git a/test/pattern/test-pattern.nt b/test/pattern/test-pattern.nt new file mode 100644 index 00000000..ddfe6d3c --- /dev/null +++ b/test/pattern/test-pattern.nt @@ -0,0 +1,6 @@ +?s . + ?p . + ?o . + _:b1 . +_:b1 ?2p . +_:b1 ?_o . diff --git a/test/pattern/test-pattern.ttl b/test/pattern/test-pattern.ttl new file mode 100644 index 00000000..3742e5ed --- /dev/null +++ b/test/pattern/test-pattern.ttl @@ -0,0 +1,10 @@ +?s + . + + + ?p ; + ?o ; + [ + ?2p ; + ?_o + ] . diff --git a/test/test_overflow.c b/test/test_overflow.c index 5a65d887..851c8289 100644 --- a/test/test_overflow.c +++ b/test/test_overflow.c @@ -26,7 +26,8 @@ test(SerdWorld* world, SerdSink* sink, const char* str, size_t stack_size) { SerdByteSource* byte_source = serd_byte_source_new_string(str, NULL); - SerdReader* reader = serd_reader_new(world, SERD_TURTLE, 0, sink, stack_size); + SerdReader* reader = + serd_reader_new(world, SERD_TURTLE, SERD_READ_VARIABLES, sink, stack_size); serd_reader_start(reader, byte_source); const SerdStatus st = serd_reader_read_document(reader); @@ -55,6 +56,7 @@ main(void) {":s :p \"literal\"", sizes + 264}, {":s :p \"verb\"", sizes + 263}, {":s :p _:blank .", sizes + 276}, + {":s :p ?o .", sizes + 295}, {":s :p true .", sizes + 295}, {":s :p true .", sizes + 329}, {":s :p \"\"@en .", sizes + 302}, -- cgit v1.2.1