aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-09-23 15:04:03 +0200
committerDavid Robillard <d@drobilla.net>2017-09-23 15:59:23 +0200
commit8e5e8ad36085981c77fdee74a9ea74e9cf8b8157 (patch)
treea93bf8cb6f336f0824e9c11bc82aefc619899085
parent2d9d00d8653eb9faca450884665861cd4b67802b (diff)
downloadserd-8e5e8ad36085981c77fdee74a9ea74e9cf8b8157.tar.gz
serd-8e5e8ad36085981c77fdee74a9ea74e9cf8b8157.tar.bz2
serd-8e5e8ad36085981c77fdee74a9ea74e9cf8b8157.zip
Add NTriples test suite
-rw-r--r--NEWS3
-rw-r--r--tests/NTriplesTests/README25
-rw-r--r--tests/NTriplesTests/comment_following_triple.nt5
-rw-r--r--tests/NTriplesTests/langtagged_string.nt1
-rw-r--r--tests/NTriplesTests/lantag_with_subtag.nt1
-rw-r--r--tests/NTriplesTests/literal.nt1
-rw-r--r--tests/NTriplesTests/literal_all_controls.nt1
-rw-r--r--tests/NTriplesTests/literal_all_punctuation.nt1
-rw-r--r--tests/NTriplesTests/literal_ascii_boundaries.ntbin0 -> 57 bytes
-rw-r--r--tests/NTriplesTests/literal_false.nt1
-rw-r--r--tests/NTriplesTests/literal_true.nt1
-rw-r--r--tests/NTriplesTests/literal_with_2_dquotes.nt1
-rw-r--r--tests/NTriplesTests/literal_with_2_squotes.nt1
-rw-r--r--tests/NTriplesTests/literal_with_BACKSPACE.nt1
-rw-r--r--tests/NTriplesTests/literal_with_CARRIAGE_RETURN.nt1
-rw-r--r--tests/NTriplesTests/literal_with_CHARACTER_TABULATION.nt1
-rw-r--r--tests/NTriplesTests/literal_with_FORM_FEED.nt1
-rw-r--r--tests/NTriplesTests/literal_with_LINE_FEED.nt1
-rw-r--r--tests/NTriplesTests/literal_with_REVERSE_SOLIDUS.nt1
-rw-r--r--tests/NTriplesTests/literal_with_REVERSE_SOLIDUS2.nt1
-rw-r--r--tests/NTriplesTests/literal_with_UTF8_boundaries.nt1
-rw-r--r--tests/NTriplesTests/literal_with_dquote.nt1
-rw-r--r--tests/NTriplesTests/literal_with_numeric_escape4.nt1
-rw-r--r--tests/NTriplesTests/literal_with_numeric_escape8.nt1
-rw-r--r--tests/NTriplesTests/literal_with_squote.nt1
-rw-r--r--tests/NTriplesTests/manifest.ttl512
-rw-r--r--tests/NTriplesTests/minimal_whitespace.nt6
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-base-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-esc-01.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-esc-02.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-esc-03.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-lang-01.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-num-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-num-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-num-03.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-prefix-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-03.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-04.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-05.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-06.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-string-07.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-struct-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-struct-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-01.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-02.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-03.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-04.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-05.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-06.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-07.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-08.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bad-uri-09.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bnode-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-bnode-02.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-bnode-03.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-datatypes-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-datatypes-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-file-01.nt0
-rw-r--r--tests/NTriplesTests/nt-syntax-file-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-file-03.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-str-esc-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-str-esc-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-str-esc-03.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-string-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-string-02.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-string-03.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-subm-01.nt79
-rw-r--r--tests/NTriplesTests/nt-syntax-uri-01.nt1
-rw-r--r--tests/NTriplesTests/nt-syntax-uri-02.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-uri-03.nt2
-rw-r--r--tests/NTriplesTests/nt-syntax-uri-04.nt2
-rw-r--r--wscript9
74 files changed, 721 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index bdad3548..f35745fa 100644
--- a/NEWS
+++ b/NEWS
@@ -3,9 +3,10 @@ serd (0.29.3) unstable;
* Support strict parsing of prefixed names
* Report errors for all failing test cases
* Use more efficient stack allocation and growth policies
+ * Add NTriples test suite
* Fix building with MSVC
- -- David Robillard <d@drobilla.net> Sat, 23 Sep 2017 14:53:55 +0200
+ -- David Robillard <d@drobilla.net> Sat, 23 Sep 2017 15:03:52 +0200
serd (0.28.0) stable;
diff --git a/tests/NTriplesTests/README b/tests/NTriplesTests/README
new file mode 100644
index 00000000..12d8bf16
--- /dev/null
+++ b/tests/NTriplesTests/README
@@ -0,0 +1,25 @@
+This README is for the W3C RDF Working Group's N-Triples test suite.
+This test suite contains two kinds of tests:
+
+ Positive syntax (rdft:TestNTriplesPositiveSyntax) - an input N-Triples
+ file with no syntax errors.
+
+ Negative syntax (rdft:TestNTriplesNegativeSyntax) - an input N-Triples
+ file with at least one syntax error.
+
+The manifest.ttl file in this directory lists tests in the
+RDF WG's N-Triples test suite. All
+tests have a name (mf:name) and an input (mf:action).
+
+• An implementation passes a positive syntax test if it parses the
+ input.
+
+• An implementation passes a negative syntax test if it fails to parse
+ the input.
+
+The home of the test suite is <http://www.w3.org/2013/N-TriplesTests/>.
+
+See http://www.w3.org/2011/rdf-wg/wiki/RDF_Test_Suites for more details.
+
+Eric Prud'hommeaux <eric+turtle@w3.org> - 11 June 2013.
+Gregg Kellogg <gregg@greggkellogg.net> - 26 June 2013.
diff --git a/tests/NTriplesTests/comment_following_triple.nt b/tests/NTriplesTests/comment_following_triple.nt
new file mode 100644
index 00000000..5619459a
--- /dev/null
+++ b/tests/NTriplesTests/comment_following_triple.nt
@@ -0,0 +1,5 @@
+<http://example/s> <http://example/p> <http://example/o> . # comment
+<http://example/s> <http://example/p> _:o . # comment
+<http://example/s> <http://example/p> "o" . # comment
+<http://example/s> <http://example/p> "o"^^<http://example/dt> . # comment
+<http://example/s> <http://example/p> "o"@en . # comment
diff --git a/tests/NTriplesTests/langtagged_string.nt b/tests/NTriplesTests/langtagged_string.nt
new file mode 100644
index 00000000..1bddb04e
--- /dev/null
+++ b/tests/NTriplesTests/langtagged_string.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "chat"@en .
diff --git a/tests/NTriplesTests/lantag_with_subtag.nt b/tests/NTriplesTests/lantag_with_subtag.nt
new file mode 100644
index 00000000..629cbf42
--- /dev/null
+++ b/tests/NTriplesTests/lantag_with_subtag.nt
@@ -0,0 +1 @@
+<http://example.org/ex#a> <http://example.org/ex#b> "Cheers"@en-UK .
diff --git a/tests/NTriplesTests/literal.nt b/tests/NTriplesTests/literal.nt
new file mode 100644
index 00000000..3aba89e4
--- /dev/null
+++ b/tests/NTriplesTests/literal.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "x" .
diff --git a/tests/NTriplesTests/literal_all_controls.nt b/tests/NTriplesTests/literal_all_controls.nt
new file mode 100644
index 00000000..91c8af14
--- /dev/null
+++ b/tests/NTriplesTests/literal_all_controls.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" .
diff --git a/tests/NTriplesTests/literal_all_punctuation.nt b/tests/NTriplesTests/literal_all_punctuation.nt
new file mode 100644
index 00000000..c25d818f
--- /dev/null
+++ b/tests/NTriplesTests/literal_all_punctuation.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> " !\"#$%&():;<=>?@[]^_`{|}~" .
diff --git a/tests/NTriplesTests/literal_ascii_boundaries.nt b/tests/NTriplesTests/literal_ascii_boundaries.nt
new file mode 100644
index 00000000..7a4dc717
--- /dev/null
+++ b/tests/NTriplesTests/literal_ascii_boundaries.nt
Binary files differ
diff --git a/tests/NTriplesTests/literal_false.nt b/tests/NTriplesTests/literal_false.nt
new file mode 100644
index 00000000..5bbbae84
--- /dev/null
+++ b/tests/NTriplesTests/literal_false.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
diff --git a/tests/NTriplesTests/literal_true.nt b/tests/NTriplesTests/literal_true.nt
new file mode 100644
index 00000000..054b229f
--- /dev/null
+++ b/tests/NTriplesTests/literal_true.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
diff --git a/tests/NTriplesTests/literal_with_2_dquotes.nt b/tests/NTriplesTests/literal_with_2_dquotes.nt
new file mode 100644
index 00000000..3e69dc10
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_2_dquotes.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "x\"\"y" .
diff --git a/tests/NTriplesTests/literal_with_2_squotes.nt b/tests/NTriplesTests/literal_with_2_squotes.nt
new file mode 100644
index 00000000..8ddc52e8
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_2_squotes.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "x''y" .
diff --git a/tests/NTriplesTests/literal_with_BACKSPACE.nt b/tests/NTriplesTests/literal_with_BACKSPACE.nt
new file mode 100644
index 00000000..339013df
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_BACKSPACE.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\b" .
diff --git a/tests/NTriplesTests/literal_with_CARRIAGE_RETURN.nt b/tests/NTriplesTests/literal_with_CARRIAGE_RETURN.nt
new file mode 100644
index 00000000..91b85c89
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_CARRIAGE_RETURN.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\r" .
diff --git a/tests/NTriplesTests/literal_with_CHARACTER_TABULATION.nt b/tests/NTriplesTests/literal_with_CHARACTER_TABULATION.nt
new file mode 100644
index 00000000..a6a9d9f0
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_CHARACTER_TABULATION.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\t" .
diff --git a/tests/NTriplesTests/literal_with_FORM_FEED.nt b/tests/NTriplesTests/literal_with_FORM_FEED.nt
new file mode 100644
index 00000000..10d2c6d7
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_FORM_FEED.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\f" .
diff --git a/tests/NTriplesTests/literal_with_LINE_FEED.nt b/tests/NTriplesTests/literal_with_LINE_FEED.nt
new file mode 100644
index 00000000..462f97ac
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_LINE_FEED.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\n" .
diff --git a/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS.nt b/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS.nt
new file mode 100644
index 00000000..ebc846ed
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\\" .
diff --git a/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS2.nt b/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS2.nt
new file mode 100644
index 00000000..586e364d
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_REVERSE_SOLIDUS2.nt
@@ -0,0 +1 @@
+<http://example.org/ns#s> <http://example.org/ns#p1> "test-\\" .
diff --git a/tests/NTriplesTests/literal_with_UTF8_boundaries.nt b/tests/NTriplesTests/literal_with_UTF8_boundaries.nt
new file mode 100644
index 00000000..0e1616db
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_UTF8_boundaries.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽" .
diff --git a/tests/NTriplesTests/literal_with_dquote.nt b/tests/NTriplesTests/literal_with_dquote.nt
new file mode 100644
index 00000000..05a1fd3a
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_dquote.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "x\"y" .
diff --git a/tests/NTriplesTests/literal_with_numeric_escape4.nt b/tests/NTriplesTests/literal_with_numeric_escape4.nt
new file mode 100644
index 00000000..16f0a036
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_numeric_escape4.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\u006F" .
diff --git a/tests/NTriplesTests/literal_with_numeric_escape8.nt b/tests/NTriplesTests/literal_with_numeric_escape8.nt
new file mode 100644
index 00000000..e909a79d
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_numeric_escape8.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "\U0000006F" .
diff --git a/tests/NTriplesTests/literal_with_squote.nt b/tests/NTriplesTests/literal_with_squote.nt
new file mode 100644
index 00000000..acf7f58f
--- /dev/null
+++ b/tests/NTriplesTests/literal_with_squote.nt
@@ -0,0 +1 @@
+<http://a.example/s> <http://a.example/p> "x'y" .
diff --git a/tests/NTriplesTests/manifest.ttl b/tests/NTriplesTests/manifest.ttl
new file mode 100644
index 00000000..246561cb
--- /dev/null
+++ b/tests/NTriplesTests/manifest.ttl
@@ -0,0 +1,512 @@
+# N-Triples Syntax tests
+
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
+@prefix qt: <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> .
+
+@prefix rdft: <http://www.w3.org/ns/rdftest#> .
+
+<> rdf:type mf:Manifest ;
+ mf:name "N-Triples tests" ;
+ mf:entries
+ (
+ <#nt-syntax-file-01>
+ <#nt-syntax-file-02>
+ <#nt-syntax-file-03>
+ <#nt-syntax-uri-01>
+ <#nt-syntax-uri-02>
+ <#nt-syntax-uri-03>
+ <#nt-syntax-uri-04>
+ <#nt-syntax-string-01>
+ <#nt-syntax-string-02>
+ <#nt-syntax-string-03>
+ <#nt-syntax-str-esc-01>
+ <#nt-syntax-str-esc-02>
+ <#nt-syntax-str-esc-03>
+ <#nt-syntax-bnode-01>
+ <#nt-syntax-bnode-02>
+ <#nt-syntax-bnode-03>
+ <#nt-syntax-datatypes-01>
+ <#nt-syntax-datatypes-02>
+ <#nt-syntax-bad-uri-01>
+ <#nt-syntax-bad-uri-02>
+ <#nt-syntax-bad-uri-03>
+ <#nt-syntax-bad-uri-04>
+ <#nt-syntax-bad-uri-05>
+ <#nt-syntax-bad-uri-06>
+ <#nt-syntax-bad-uri-07>
+ <#nt-syntax-bad-uri-08>
+ <#nt-syntax-bad-uri-09>
+ <#nt-syntax-bad-prefix-01>
+ <#nt-syntax-bad-base-01>
+ <#nt-syntax-bad-struct-01>
+ <#nt-syntax-bad-struct-02>
+ <#nt-syntax-bad-lang-01>
+ <#nt-syntax-bad-esc-01>
+ <#nt-syntax-bad-esc-02>
+ <#nt-syntax-bad-esc-03>
+ <#nt-syntax-bad-string-01>
+ <#nt-syntax-bad-string-02>
+ <#nt-syntax-bad-string-03>
+ <#nt-syntax-bad-string-04>
+ <#nt-syntax-bad-string-05>
+ <#nt-syntax-bad-string-06>
+ <#nt-syntax-bad-string-07>
+ <#nt-syntax-bad-num-01>
+ <#nt-syntax-bad-num-02>
+ <#nt-syntax-bad-num-03>
+ <#nt-syntax-subm-01>
+ <#comment_following_triple>
+ <#literal>
+ <#literal_all_controls>
+ <#literal_all_punctuation>
+ <#literal_ascii_boundaries>
+ <#literal_with_2_dquotes>
+ <#literal_with_2_squotes>
+ <#literal_with_BACKSPACE>
+ <#literal_with_CARRIAGE_RETURN>
+ <#literal_with_CHARACTER_TABULATION>
+ <#literal_with_dquote>
+ <#literal_with_FORM_FEED>
+ <#literal_with_LINE_FEED>
+ <#literal_with_numeric_escape4>
+ <#literal_with_numeric_escape8>
+ <#literal_with_REVERSE_SOLIDUS>
+ <#literal_with_REVERSE_SOLIDUS2>
+ <#literal_with_squote>
+ <#literal_with_UTF8_boundaries>
+ <#langtagged_string>
+ <#lantag_with_subtag>
+ <#minimal_whitespace>
+ ) .
+
+<#nt-syntax-file-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-file-01" ;
+ rdfs:comment "Empty file" ;
+ mf:action <nt-syntax-file-01.nt> ;
+ .
+
+<#nt-syntax-file-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-file-02" ;
+ rdfs:comment "Only comment" ;
+ mf:action <nt-syntax-file-02.nt> ;
+ .
+
+<#nt-syntax-file-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-file-03" ;
+ rdfs:comment "One comment, one empty line" ;
+ mf:action <nt-syntax-file-03.nt> ;
+ .
+
+<#nt-syntax-uri-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-uri-01" ;
+ rdfs:comment "Only IRIs" ;
+ mf:action <nt-syntax-uri-01.nt> ;
+ .
+
+<#nt-syntax-uri-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-uri-02" ;
+ rdfs:comment "IRIs with Unicode escape" ;
+ mf:action <nt-syntax-uri-02.nt> ;
+ .
+
+<#nt-syntax-uri-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-uri-03" ;
+ rdfs:comment "IRIs with long Unicode escape" ;
+ mf:action <nt-syntax-uri-03.nt> ;
+ .
+
+<#nt-syntax-uri-04> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-uri-04" ;
+ rdfs:comment "Legal IRIs" ;
+ mf:action <nt-syntax-uri-04.nt> ;
+ .
+
+<#nt-syntax-string-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-string-01" ;
+ rdfs:comment "string literal" ;
+ mf:action <nt-syntax-string-01.nt> ;
+ .
+
+<#nt-syntax-string-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-string-02" ;
+ rdfs:comment "langString literal" ;
+ mf:action <nt-syntax-string-02.nt> ;
+ .
+
+<#nt-syntax-string-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-string-03" ;
+ rdfs:comment "langString literal with region" ;
+ mf:action <nt-syntax-string-03.nt> ;
+ .
+
+<#nt-syntax-str-esc-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-str-esc-01" ;
+ rdfs:comment "string literal with escaped newline" ;
+ mf:action <nt-syntax-str-esc-01.nt> ;
+ .
+
+<#nt-syntax-str-esc-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-str-esc-02" ;
+ rdfs:comment "string literal with Unicode escape" ;
+ mf:action <nt-syntax-str-esc-02.nt> ;
+ .
+
+<#nt-syntax-str-esc-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-str-esc-03" ;
+ rdfs:comment "string literal with long Unicode escape" ;
+ mf:action <nt-syntax-str-esc-03.nt> ;
+ .
+
+<#nt-syntax-bnode-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-bnode-01" ;
+ rdfs:comment "bnode subject" ;
+ mf:action <nt-syntax-bnode-01.nt> ;
+ .
+
+<#nt-syntax-bnode-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-bnode-02" ;
+ rdfs:comment "bnode object" ;
+ mf:action <nt-syntax-bnode-02.nt> ;
+ .
+
+<#nt-syntax-bnode-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-bnode-03" ;
+ rdfs:comment "Blank node labels may start with a digit" ;
+ mf:action <nt-syntax-bnode-03.nt> ;
+ .
+
+<#nt-syntax-datatypes-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-datatypes-01" ;
+ rdfs:comment "xsd:byte literal" ;
+ mf:action <nt-syntax-datatypes-01.nt> ;
+ .
+
+<#nt-syntax-datatypes-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-datatypes-02" ;
+ rdfs:comment "integer as xsd:string" ;
+ mf:action <nt-syntax-datatypes-02.nt> ;
+ .
+
+<#nt-syntax-bad-uri-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-01" ;
+ rdfs:comment "Bad IRI : space (negative test)" ;
+ mf:action <nt-syntax-bad-uri-01.nt> ;
+ .
+
+<#nt-syntax-bad-uri-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-02" ;
+ rdfs:comment "Bad IRI : bad escape (negative test)" ;
+ mf:action <nt-syntax-bad-uri-02.nt> ;
+ .
+
+<#nt-syntax-bad-uri-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-03" ;
+ rdfs:comment "Bad IRI : bad long escape (negative test)" ;
+ mf:action <nt-syntax-bad-uri-03.nt> ;
+ .
+
+<#nt-syntax-bad-uri-04> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-04" ;
+ rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ;
+ mf:action <nt-syntax-bad-uri-04.nt> ;
+ .
+
+<#nt-syntax-bad-uri-05> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-05" ;
+ rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ;
+ mf:action <nt-syntax-bad-uri-05.nt> ;
+ .
+
+<#nt-syntax-bad-uri-06> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-06" ;
+ rdfs:comment "Bad IRI : relative IRI not allowed in subject (negative test)" ;
+ mf:action <nt-syntax-bad-uri-06.nt> ;
+ .
+
+<#nt-syntax-bad-uri-07> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-07" ;
+ rdfs:comment "Bad IRI : relative IRI not allowed in predicate (negative test)" ;
+ mf:action <nt-syntax-bad-uri-07.nt> ;
+ .
+
+<#nt-syntax-bad-uri-08> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-08" ;
+ rdfs:comment "Bad IRI : relative IRI not allowed in object (negative test)" ;
+ mf:action <nt-syntax-bad-uri-08.nt> ;
+ .
+
+<#nt-syntax-bad-uri-09> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-uri-09" ;
+ rdfs:comment "Bad IRI : relative IRI not allowed in datatype (negative test)" ;
+ mf:action <nt-syntax-bad-uri-09.nt> ;
+ .
+
+<#nt-syntax-bad-prefix-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-prefix-01" ;
+ rdfs:comment "@prefix not allowed in n-triples (negative test)" ;
+ mf:action <nt-syntax-bad-prefix-01.nt> ;
+ .
+
+<#nt-syntax-bad-base-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-base-01" ;
+ rdfs:comment "@base not allowed in N-Triples (negative test)" ;
+ mf:action <nt-syntax-bad-base-01.nt> ;
+ .
+
+<#nt-syntax-bad-struct-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-struct-01" ;
+ rdfs:comment "N-Triples does not have objectList (negative test)" ;
+ mf:action <nt-syntax-bad-struct-01.nt> ;
+ .
+
+<#nt-syntax-bad-struct-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-struct-02" ;
+ rdfs:comment "N-Triples does not have predicateObjectList (negative test)" ;
+ mf:action <nt-syntax-bad-struct-02.nt> ;
+ .
+
+<#nt-syntax-bad-lang-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-lang-01" ;
+ rdfs:comment "langString with bad lang (negative test)" ;
+ mf:action <nt-syntax-bad-lang-01.nt> ;
+ .
+
+<#nt-syntax-bad-esc-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-esc-01" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ mf:action <nt-syntax-bad-esc-01.nt> ;
+ .
+
+<#nt-syntax-bad-esc-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-esc-02" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ mf:action <nt-syntax-bad-esc-02.nt> ;
+ .
+
+<#nt-syntax-bad-esc-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-esc-03" ;
+ rdfs:comment "Bad string escape (negative test)" ;
+ mf:action <nt-syntax-bad-esc-03.nt> ;
+ .
+
+<#nt-syntax-bad-string-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-01" ;
+ rdfs:comment "mismatching string literal open/close (negative test)" ;
+ mf:action <nt-syntax-bad-string-01.nt> ;
+ .
+
+<#nt-syntax-bad-string-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-02" ;
+ rdfs:comment "mismatching string literal open/close (negative test)" ;
+ mf:action <nt-syntax-bad-string-02.nt> ;
+ .
+
+<#nt-syntax-bad-string-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-03" ;
+ rdfs:comment "single quotes (negative test)" ;
+ mf:action <nt-syntax-bad-string-03.nt> ;
+ .
+
+<#nt-syntax-bad-string-04> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-04" ;
+ rdfs:comment "long single string literal (negative test)" ;
+ mf:action <nt-syntax-bad-string-04.nt> ;
+ .
+
+<#nt-syntax-bad-string-05> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-05" ;
+ rdfs:comment "long double string literal (negative test)" ;
+ mf:action <nt-syntax-bad-string-05.nt> ;
+ .
+
+<#nt-syntax-bad-string-06> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-06" ;
+ rdfs:comment "string literal with no end (negative test)" ;
+ mf:action <nt-syntax-bad-string-06.nt> ;
+ .
+
+<#nt-syntax-bad-string-07> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-string-07" ;
+ rdfs:comment "string literal with no start (negative test)" ;
+ mf:action <nt-syntax-bad-string-07.nt> ;
+ .
+
+<#nt-syntax-bad-num-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-num-01" ;
+ rdfs:comment "no numbers in N-Triples (integer) (negative test)" ;
+ mf:action <nt-syntax-bad-num-01.nt> ;
+ .
+
+<#nt-syntax-bad-num-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-num-02" ;
+ rdfs:comment "no numbers in N-Triples (decimal) (negative test)" ;
+ mf:action <nt-syntax-bad-num-02.nt> ;
+ .
+
+<#nt-syntax-bad-num-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
+ mf:name "nt-syntax-bad-num-03" ;
+ rdfs:comment "no numbers in N-Triples (float) (negative test)" ;
+ mf:action <nt-syntax-bad-num-03.nt> ;
+ .
+
+<#nt-syntax-subm-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "nt-syntax-subm-01" ;
+ rdfs:comment "Submission test from Original RDF Test Cases" ;
+ mf:action <nt-syntax-subm-01.nt> ;
+ .
+
+<#comment_following_triple> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "comment_following_triple" ;
+ rdfs:comment "Tests comments after a triple" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <comment_following_triple.nt> ;
+ .
+
+<#literal_ascii_boundaries> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_ascii_boundaries" ;
+ rdfs:comment "literal_ascii_boundaries '\\x00\\x26\\x28...'" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_ascii_boundaries.nt> ;
+ .
+
+<#literal_with_UTF8_boundaries> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_UTF8_boundaries" ;
+ rdfs:comment "literal_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_UTF8_boundaries.nt> ;
+ .
+
+<#literal_all_controls> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_all_controls" ;
+ rdfs:comment "literal_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_all_controls.nt> ;
+ .
+
+<#literal_all_punctuation> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_all_punctuation" ;
+ rdfs:comment "literal_all_punctuation '!\"#$%&()...'" ;
+ rdft:approval rdft:Approved ;
+ mf:action <literal_all_punctuation.nt> ;
+ .
+
+<#literal_with_squote> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_squote" ;
+ rdfs:comment "literal with squote \"x'y\"" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_squote.nt> ;
+ .
+
+<#literal_with_2_squotes> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_2_squotes" ;
+ rdfs:comment "literal with 2 squotes \"x''y\"" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_2_squotes.nt> ;
+ .
+
+<#literal> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal" ;
+ rdfs:comment "literal \"\"\"x\"\"\"" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal.nt> ;
+ .
+
+<#literal_with_dquote> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_dquote" ;
+ rdfs:comment "literal with dquote \"x\"y\"" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_dquote.nt> ;
+ .
+
+<#literal_with_2_dquotes> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_2_dquotes" ;
+ rdfs:comment "literal with 2 squotes \"\"\"a\"\"b\"\"\"" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_2_dquotes.nt> ;
+ .
+
+<#literal_with_REVERSE_SOLIDUS2> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_REVERSE_SOLIDUS2" ;
+ rdfs:comment "REVERSE SOLIDUS at end of literal" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_REVERSE_SOLIDUS2.nt> ;
+ .
+
+<#literal_with_CHARACTER_TABULATION> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_CHARACTER_TABULATION" ;
+ rdfs:comment "literal with CHARACTER TABULATION" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_CHARACTER_TABULATION.nt> ;
+ .
+
+<#literal_with_BACKSPACE> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_BACKSPACE" ;
+ rdfs:comment "literal with BACKSPACE" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_BACKSPACE.nt> ;
+ .
+
+<#literal_with_LINE_FEED> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_LINE_FEED" ;
+ rdfs:comment "literal with LINE FEED" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_LINE_FEED.nt> ;
+ .
+
+<#literal_with_CARRIAGE_RETURN> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_CARRIAGE_RETURN" ;
+ rdfs:comment "literal with CARRIAGE RETURN" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_CARRIAGE_RETURN.nt> ;
+ .
+
+<#literal_with_FORM_FEED> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_FORM_FEED" ;
+ rdfs:comment "literal with FORM FEED" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_FORM_FEED.nt> ;
+ .
+
+<#literal_with_REVERSE_SOLIDUS> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_REVERSE_SOLIDUS" ;
+ rdfs:comment "literal with REVERSE SOLIDUS" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_REVERSE_SOLIDUS.nt> ;
+ .
+
+<#literal_with_numeric_escape4> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_numeric_escape4" ;
+ rdfs:comment "literal with numeric escape4 \\u" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_numeric_escape4.nt> ;
+ .
+
+<#literal_with_numeric_escape8> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "literal_with_numeric_escape8" ;
+ rdfs:comment "literal with numeric escape8 \\U" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <literal_with_numeric_escape8.nt> ;
+ .
+
+<#langtagged_string> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "langtagged_string" ;
+ rdfs:comment "langtagged string \"x\"@en" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <langtagged_string.nt> ;
+ .
+
+<#lantag_with_subtag> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "lantag_with_subtag" ;
+ rdfs:comment "lantag with subtag \"x\"@en-us" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <lantag_with_subtag.nt> ;
+ .
+
+<#minimal_whitespace> rdf:type rdft:TestNTriplesPositiveSyntax ;
+ mf:name "minimal_whitespace" ;
+ rdfs:comment "tests absense of whitespace between subject, predicate, object and end-of-statement" ;
+ rdft:approval rdft:Proposed ;
+ mf:action <minimal_whitespace.nt> ;
+ .
diff --git a/tests/NTriplesTests/minimal_whitespace.nt b/tests/NTriplesTests/minimal_whitespace.nt
new file mode 100644
index 00000000..e9e3a801
--- /dev/null
+++ b/tests/NTriplesTests/minimal_whitespace.nt
@@ -0,0 +1,6 @@
+<http://example/s><http://example/p><http://example/o>.
+<http://example/s><http://example/p>"Alice".
+<http://example/s><http://example/p>_:o.
+_:s<http://example/p><http://example/o>.
+_:s<http://example/p>"Alice".
+_:s<http://example/p>_:bnode1.
diff --git a/tests/NTriplesTests/nt-syntax-bad-base-01.nt b/tests/NTriplesTests/nt-syntax-bad-base-01.nt
new file mode 100644
index 00000000..dff1b3b4
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-base-01.nt
@@ -0,0 +1 @@
+@base <http://example/> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-esc-01.nt b/tests/NTriplesTests/nt-syntax-bad-esc-01.nt
new file mode 100644
index 00000000..f7a88add
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-esc-01.nt
@@ -0,0 +1,2 @@
+# Bad string escape
+<http://example/s> <http://example/p> "a\zb" .
diff --git a/tests/NTriplesTests/nt-syntax-bad-esc-02.nt b/tests/NTriplesTests/nt-syntax-bad-esc-02.nt
new file mode 100644
index 00000000..72711d49
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-esc-02.nt
@@ -0,0 +1,2 @@
+# Bad string escape
+<http://example/s> <http://example/p> "\uWXYZ" .
diff --git a/tests/NTriplesTests/nt-syntax-bad-esc-03.nt b/tests/NTriplesTests/nt-syntax-bad-esc-03.nt
new file mode 100644
index 00000000..3a4522fc
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-esc-03.nt
@@ -0,0 +1,2 @@
+# Bad string escape
+<http://example/s> <http://example/p> "\U0000WXYZ" .
diff --git a/tests/NTriplesTests/nt-syntax-bad-lang-01.nt b/tests/NTriplesTests/nt-syntax-bad-lang-01.nt
new file mode 100644
index 00000000..a4d952c8
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-lang-01.nt
@@ -0,0 +1,2 @@
+# Bad lang tag
+<http://example/s> <http://example/p> "string"@1 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-num-01.nt b/tests/NTriplesTests/nt-syntax-bad-num-01.nt
new file mode 100644
index 00000000..2be6f516
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-num-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> 1 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-num-02.nt b/tests/NTriplesTests/nt-syntax-bad-num-02.nt
new file mode 100644
index 00000000..e1d5b06c
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-num-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> 1.0 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-num-03.nt b/tests/NTriplesTests/nt-syntax-bad-num-03.nt
new file mode 100644
index 00000000..a9be82fc
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-num-03.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> 1.0e0 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-prefix-01.nt b/tests/NTriplesTests/nt-syntax-bad-prefix-01.nt
new file mode 100644
index 00000000..89e08cc7
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-prefix-01.nt
@@ -0,0 +1 @@
+@prefix : <http://example/> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-01.nt b/tests/NTriplesTests/nt-syntax-bad-string-01.nt
new file mode 100644
index 00000000..988af87a
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "abc' .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-02.nt b/tests/NTriplesTests/nt-syntax-bad-string-02.nt
new file mode 100644
index 00000000..e1d5b06c
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> 1.0 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-03.nt b/tests/NTriplesTests/nt-syntax-bad-string-03.nt
new file mode 100644
index 00000000..64d343da
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-03.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> 1.0e1 .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-04.nt b/tests/NTriplesTests/nt-syntax-bad-string-04.nt
new file mode 100644
index 00000000..af4ff28f
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-04.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> '''abc''' .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-05.nt b/tests/NTriplesTests/nt-syntax-bad-string-05.nt
new file mode 100644
index 00000000..75ad4b2b
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-05.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> """abc""" .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-06.nt b/tests/NTriplesTests/nt-syntax-bad-string-06.nt
new file mode 100644
index 00000000..56dcbc60
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-06.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "abc .
diff --git a/tests/NTriplesTests/nt-syntax-bad-string-07.nt b/tests/NTriplesTests/nt-syntax-bad-string-07.nt
new file mode 100644
index 00000000..7f1ee800
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-string-07.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> abc" .
diff --git a/tests/NTriplesTests/nt-syntax-bad-struct-01.nt b/tests/NTriplesTests/nt-syntax-bad-struct-01.nt
new file mode 100644
index 00000000..d546d564
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-struct-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> <http://example/o>, <http://example/o2> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-struct-02.nt b/tests/NTriplesTests/nt-syntax-bad-struct-02.nt
new file mode 100644
index 00000000..1f388c6e
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-struct-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> <http://example/o>; <http://example/p2>, <http://example/o2> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-01.nt b/tests/NTriplesTests/nt-syntax-bad-uri-01.nt
new file mode 100644
index 00000000..0e69dc0c
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-01.nt
@@ -0,0 +1,2 @@
+# Bad IRI : space.
+<http://example/ space> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-02.nt b/tests/NTriplesTests/nt-syntax-bad-uri-02.nt
new file mode 100644
index 00000000..36d91af9
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-02.nt
@@ -0,0 +1,2 @@
+# Bad IRI : bad escape
+<http://example/\u00ZZ11> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-03.nt b/tests/NTriplesTests/nt-syntax-bad-uri-03.nt
new file mode 100644
index 00000000..f512345f
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-03.nt
@@ -0,0 +1,2 @@
+# Bad IRI : bad escape
+<http://example/\U00ZZ1111> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-04.nt b/tests/NTriplesTests/nt-syntax-bad-uri-04.nt
new file mode 100644
index 00000000..5cab062c
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-04.nt
@@ -0,0 +1,2 @@
+# Bad IRI : character escapes not allowed.
+<http://example/\n> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-05.nt b/tests/NTriplesTests/nt-syntax-bad-uri-05.nt
new file mode 100644
index 00000000..be0a21e0
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-05.nt
@@ -0,0 +1,2 @@
+# Bad IRI : character escapes not allowed.
+<http://example/\/> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-06.nt b/tests/NTriplesTests/nt-syntax-bad-uri-06.nt
new file mode 100644
index 00000000..b4e64592
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-06.nt
@@ -0,0 +1,2 @@
+# No relative IRIs in N-Triples
+<s> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-07.nt b/tests/NTriplesTests/nt-syntax-bad-uri-07.nt
new file mode 100644
index 00000000..74534dde
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-07.nt
@@ -0,0 +1,2 @@
+# No relative IRIs in N-Triples
+<http://example/s> <p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-08.nt b/tests/NTriplesTests/nt-syntax-bad-uri-08.nt
new file mode 100644
index 00000000..41a953d4
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-08.nt
@@ -0,0 +1,2 @@
+# No relative IRIs in N-Triples
+<http://example/s> <http://example/p> <o> .
diff --git a/tests/NTriplesTests/nt-syntax-bad-uri-09.nt b/tests/NTriplesTests/nt-syntax-bad-uri-09.nt
new file mode 100644
index 00000000..58821da8
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bad-uri-09.nt
@@ -0,0 +1,2 @@
+# No relative IRIs in N-Triples
+<http://example/s> <http://example/p> "foo"^^<dt> .
diff --git a/tests/NTriplesTests/nt-syntax-bnode-01.nt b/tests/NTriplesTests/nt-syntax-bnode-01.nt
new file mode 100644
index 00000000..5fb0d0f9
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bnode-01.nt
@@ -0,0 +1 @@
+_:a <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bnode-02.nt b/tests/NTriplesTests/nt-syntax-bnode-02.nt
new file mode 100644
index 00000000..737e81b4
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bnode-02.nt
@@ -0,0 +1,2 @@
+<http://example/s> <http://example/p> _:a .
+_:a <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-bnode-03.nt b/tests/NTriplesTests/nt-syntax-bnode-03.nt
new file mode 100644
index 00000000..1a1f1c9f
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-bnode-03.nt
@@ -0,0 +1,2 @@
+<http://example/s> <http://example/p> _:1a .
+_:1a <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-datatypes-01.nt b/tests/NTriplesTests/nt-syntax-datatypes-01.nt
new file mode 100644
index 00000000..91263091
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-datatypes-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "123"^^<http://www.w3.org/2001/XMLSchema#byte> .
diff --git a/tests/NTriplesTests/nt-syntax-datatypes-02.nt b/tests/NTriplesTests/nt-syntax-datatypes-02.nt
new file mode 100644
index 00000000..d49cc27d
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-datatypes-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "123"^^<http://www.w3.org/2001/XMLSchema#string> .
diff --git a/tests/NTriplesTests/nt-syntax-file-01.nt b/tests/NTriplesTests/nt-syntax-file-01.nt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-file-01.nt
diff --git a/tests/NTriplesTests/nt-syntax-file-02.nt b/tests/NTriplesTests/nt-syntax-file-02.nt
new file mode 100644
index 00000000..e6d327d5
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-file-02.nt
@@ -0,0 +1 @@
+#Empty file.
diff --git a/tests/NTriplesTests/nt-syntax-file-03.nt b/tests/NTriplesTests/nt-syntax-file-03.nt
new file mode 100644
index 00000000..a9ca0358
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-file-03.nt
@@ -0,0 +1,2 @@
+#One comment, one empty line.
+
diff --git a/tests/NTriplesTests/nt-syntax-str-esc-01.nt b/tests/NTriplesTests/nt-syntax-str-esc-01.nt
new file mode 100644
index 00000000..3925f2ec
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-str-esc-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "a\n" .
diff --git a/tests/NTriplesTests/nt-syntax-str-esc-02.nt b/tests/NTriplesTests/nt-syntax-str-esc-02.nt
new file mode 100644
index 00000000..e7d032f0
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-str-esc-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "a\u0020b" .
diff --git a/tests/NTriplesTests/nt-syntax-str-esc-03.nt b/tests/NTriplesTests/nt-syntax-str-esc-03.nt
new file mode 100644
index 00000000..b8588c79
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-str-esc-03.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "a\U00000020b" .
diff --git a/tests/NTriplesTests/nt-syntax-string-01.nt b/tests/NTriplesTests/nt-syntax-string-01.nt
new file mode 100644
index 00000000..5333aefe
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-string-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "string" .
diff --git a/tests/NTriplesTests/nt-syntax-string-02.nt b/tests/NTriplesTests/nt-syntax-string-02.nt
new file mode 100644
index 00000000..1ab55a33
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-string-02.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "string"@en .
diff --git a/tests/NTriplesTests/nt-syntax-string-03.nt b/tests/NTriplesTests/nt-syntax-string-03.nt
new file mode 100644
index 00000000..b34ca0f6
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-string-03.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> "string"@en-uk .
diff --git a/tests/NTriplesTests/nt-syntax-subm-01.nt b/tests/NTriplesTests/nt-syntax-subm-01.nt
new file mode 100644
index 00000000..91b49889
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-subm-01.nt
@@ -0,0 +1,79 @@
+#
+# Copyright World Wide Web Consortium, (Massachusetts Institute of
+# Technology, Institut National de Recherche en Informatique et en
+# Automatique, Keio University).
+#
+# All Rights Reserved.
+#
+# Please see the full Copyright clause at
+# <http://www.w3.org/Consortium/Legal/copyright-software.html>
+#
+# Test file with a variety of legal N-Triples
+#
+# Dave Beckett - http://purl.org/net/dajobe/
+#
+# $Id: test.nt,v 1.7 2003/10/06 15:52:19 dbeckett2 Exp $
+#
+#####################################################################
+
+# comment lines
+ # comment line after whitespace
+# empty blank line, then one with spaces and tabs
+
+
+<http://example.org/resource1> <http://example.org/property> <http://example.org/resource2> .
+_:anon <http://example.org/property> <http://example.org/resource2> .
+<http://example.org/resource2> <http://example.org/property> _:anon .
+# spaces and tabs throughout:
+ <http://example.org/resource3> <http://example.org/property> <http://example.org/resource2> .
+
+# line ending with CR NL (ASCII 13, ASCII 10)
+<http://example.org/resource4> <http://example.org/property> <http://example.org/resource2> .
+
+# 2 statement lines separated by single CR (ASCII 10)
+<http://example.org/resource5> <http://example.org/property> <http://example.org/resource2> .
+<http://example.org/resource6> <http://example.org/property> <http://example.org/resource2> .
+
+
+# All literal escapes
+<http://example.org/resource7> <http://example.org/property> "simple literal" .
+<http://example.org/resource8> <http://example.org/property> "backslash:\\" .
+<http://example.org/resource9> <http://example.org/property> "dquote:\"" .
+<http://example.org/resource10> <http://example.org/property> "newline:\n" .
+<http://example.org/resource11> <http://example.org/property> "return\r" .
+<http://example.org/resource12> <http://example.org/property> "tab:\t" .
+
+# Space is optional before final .
+<http://example.org/resource13> <http://example.org/property> <http://example.org/resource2>.
+<http://example.org/resource14> <http://example.org/property> "x".
+<http://example.org/resource15> <http://example.org/property> _:anon.
+
+# \u and \U escapes
+# latin small letter e with acute symbol \u00E9 - 3 UTF-8 bytes #xC3 #A9
+<http://example.org/resource16> <http://example.org/property> "\u00E9" .
+# Euro symbol \u20ac - 3 UTF-8 bytes #xE2 #x82 #xAC
+<http://example.org/resource17> <http://example.org/property> "\u20AC" .
+# resource18 test removed
+# resource19 test removed
+# resource20 test removed
+
+# XML Literals as Datatyped Literals
+<http://example.org/resource21> <http://example.org/property> ""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource22> <http://example.org/property> " "^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource23> <http://example.org/property> "x"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource23> <http://example.org/property> "\""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource24> <http://example.org/property> "<a></a>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource25> <http://example.org/property> "a <b></b>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource26> <http://example.org/property> "a <b></b> c"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource26> <http://example.org/property> "a\n<b></b>\nc"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+<http://example.org/resource27> <http://example.org/property> "chat"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
+# resource28 test removed 2003-08-03
+# resource29 test removed 2003-08-03
+
+# Plain literals with languages
+<http://example.org/resource30> <http://example.org/property> "chat"@fr .
+<http://example.org/resource31> <http://example.org/property> "chat"@en .
+
+# Typed Literals
+<http://example.org/resource32> <http://example.org/property> "abc"^^<http://example.org/datatype1> .
+# resource33 test removed 2003-08-03
diff --git a/tests/NTriplesTests/nt-syntax-uri-01.nt b/tests/NTriplesTests/nt-syntax-uri-01.nt
new file mode 100644
index 00000000..02e6ba98
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-uri-01.nt
@@ -0,0 +1 @@
+<http://example/s> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-uri-02.nt b/tests/NTriplesTests/nt-syntax-uri-02.nt
new file mode 100644
index 00000000..664feea1
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-uri-02.nt
@@ -0,0 +1,2 @@
+# x53 is capital S
+<http://example/\u0053> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-uri-03.nt b/tests/NTriplesTests/nt-syntax-uri-03.nt
new file mode 100644
index 00000000..b5aeb26e
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-uri-03.nt
@@ -0,0 +1,2 @@
+# x53 is capital S
+<http://example/\U00000053> <http://example/p> <http://example/o> .
diff --git a/tests/NTriplesTests/nt-syntax-uri-04.nt b/tests/NTriplesTests/nt-syntax-uri-04.nt
new file mode 100644
index 00000000..49bacca7
--- /dev/null
+++ b/tests/NTriplesTests/nt-syntax-uri-04.nt
@@ -0,0 +1,2 @@
+# IRI with all chars in it.
+<http://example/s> <http://example/p> <scheme:!$%25&'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> .
diff --git a/wscript b/wscript
index 18feba41..0abf6453 100644
--- a/wscript
+++ b/wscript
@@ -380,7 +380,7 @@ def test_manifest(ctx, srcdir, testdir, report, base_uri, isyntax, osyntax, test
def test(ctx):
blddir = autowaf.build_dir(APPNAME, 'tests')
- for i in ['', 'bad', 'good', 'new', 'TurtleTests', 'NQuadsTests', 'TrigTests', 'extra']:
+ for i in ['', 'bad', 'good', 'new', 'TurtleTests', 'NTriplesTests', 'NQuadsTests', 'TrigTests', 'extra']:
try:
os.makedirs(os.path.join(blddir, i))
except:
@@ -541,6 +541,13 @@ def test(ctx):
[rdft.TestTurtleNegativeEval, 1, False],
[rdft.TestTurtleEval, 0, True]])
+ ntriples_tests = 'http://www.w3.org/2013/N-TriplesTests/'
+ test_manifest(ctx, srcdir, 'NTriplesTests', report, ntriples_tests, 'ntriples', 'ntriples',
+ [[rdft.TestNTriplesPositiveSyntax, 0, False],
+ [rdft.TestNTriplesNegativeSyntax, 1, False],
+ [rdft.TestNTriplesNegativeEval, 1, False],
+ [rdft.TestNTriplesEval, 0, True]])
+
nquads_tests = 'http://www.w3.org/2013/NQuadsTests/'
test_manifest(ctx, srcdir, 'NQuadsTests', report, nquads_tests, 'nquads', 'nquads',
[[rdft.TestNQuadsPositiveSyntax, 0, False],