[isidorus-cvs] r347 - in trunk/src: TM-SPARQL unit_tests
Lukas Giessmann
lgiessmann at common-lisp.net
Mon Nov 22 19:47:02 UTC 2010
Author: lgiessmann
Date: Mon Nov 22 14:47:01 2010
New Revision: 347
Log:
TM-SPARQL: added some unit-tests for parsing variables and IRIs in the SELECT-WHERE-statement => fixed some bugs
Modified:
trunk/src/TM-SPARQL/sparql.lisp
trunk/src/TM-SPARQL/sparql_parser.lisp
trunk/src/unit_tests/sparql_test.lisp
Modified: trunk/src/TM-SPARQL/sparql.lisp
==============================================================================
--- trunk/src/TM-SPARQL/sparql.lisp (original)
+++ trunk/src/TM-SPARQL/sparql.lisp Mon Nov 22 14:47:01 2010
@@ -86,8 +86,8 @@
(loop for entry in (prefixes construct)
when (string-starts-with string-with-prefix
(concatenate 'string (getf entry :label) ":"))
- return (concatenate
- 'string (getf entry :value) ":"
+ return (concatenate-uri
+ (getf entry :value)
(string-after string-with-prefix
(concatenate 'string (getf entry :label) ":"))))))
Modified: trunk/src/TM-SPARQL/sparql_parser.lisp
==============================================================================
--- trunk/src/TM-SPARQL/sparql_parser.lisp (original)
+++ trunk/src/TM-SPARQL/sparql_parser.lisp Mon Nov 22 14:47:01 2010
@@ -154,7 +154,7 @@
((or (string-starts-with trimmed-str "?")
(string-starts-with trimmed-str "$"))
(let ((result (parse-variable-name trimmed-str query-object)))
- (list :next-query (getf result :next-query)
+ (list :next-query (cut-comment (getf result :next-query))
:value (list :value (getf result :value)
:type 'VAR))))
(t
@@ -378,7 +378,7 @@
(concatenate-uri (base-value query-object)
(getf result :value))))
(next-query (getf result :next-query)))
- (list :next-query next-query
+ (list :next-query (cut-comment next-query)
:value (list :value result-uri :type 'IRI))))
@@ -396,15 +396,24 @@
(prefix (when elem-str
(string-until elem-str ":")))
(suffix (when prefix
- (string-after elem-str ":"))))
+ (string-after elem-str ":")))
+ (full-url
+ (when (and suffix prefix)
+ (get-prefix query-object (concatenate 'string prefix ":" suffix)))))
(unless (and end-pos prefix suffix)
(error (make-sparql-parser-condition
trimmed-str (original-query query-object)
"An IRI of the form prefix:suffix")))
- (list :next-query (string-after
- trimmed-str
- (concatenate 'string prefix ":" suffix))
- :value (list :value (concatenate 'string prefix ":" suffix)
+ (unless full-url
+ (error (make-condition
+ 'sparql-parser-error
+ :message (format nil "The prefix in \"~a:~a\" is not registered"
+ prefix suffix))))
+ (list :next-query (cut-comment
+ (string-after
+ trimmed-str
+ (concatenate 'string prefix ":" suffix)))
+ :value (list :value full-url
:type 'IRI))))
Modified: trunk/src/unit_tests/sparql_test.lisp
==============================================================================
--- trunk/src/unit_tests/sparql_test.lisp (original)
+++ trunk/src/unit_tests/sparql_test.lisp Mon Nov 22 14:47:01 2010
@@ -16,7 +16,8 @@
(:export :run-sparql-tests
:sparql-tests
:test-prefix-and-base
- :test-parse-literals))
+ :test-parse-literals
+ :test-parse-triple-elem))
(in-package :sparql-test)
@@ -231,5 +232,49 @@
(tm-sparql::parse-literal-elem query-9 dummy-object))))
+(test test-parse-triple-elem
+ "Tests various functionality of the parse-triple-elem function."
+ (let ((query-1 "?var1 .")
+ (query-2 "$var2 ;")
+ (query-3 "$var3 }")
+ (query-4 "<http://full.url>.")
+ (query-5 "<url-suffix> }")
+ (query-6 "pref:suffix .")
+ (query-7 "pref:suffix}")
+ (query-8 "preff:suffix}")
+ (dummy-object (make-instance 'SPARQL-Query :query ""
+ :base "http://base.value")))
+ (tm-sparql::add-prefix dummy-object "pref" "http://prefix.value")
+ (let ((result (tm-sparql::parse-triple-elem query-1 dummy-object)))
+ (is (string= (getf result :next-query) "."))
+ (is (string= (getf (getf result :value) :value) "var1"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::VAR)))
+ (let ((result (tm-sparql::parse-triple-elem query-2 dummy-object)))
+ (is (string= (getf result :next-query) ";"))
+ (is (string= (getf (getf result :value) :value) "var2"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::VAR)))
+ (let ((result (tm-sparql::parse-triple-elem query-3 dummy-object)))
+ (is (string= (getf result :next-query) "}"))
+ (is (string= (getf (getf result :value) :value) "var3"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::VAR)))
+ (let ((result (tm-sparql::parse-triple-elem query-4 dummy-object)))
+ (is (string= (getf result :next-query) "."))
+ (is (string= (getf (getf result :value) :value) "http://full.url"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::IRI)))
+ (let ((result (tm-sparql::parse-triple-elem query-5 dummy-object)))
+ (is (string= (getf result :next-query) "}"))
+ (is (string= (getf (getf result :value) :value) "http://base.value/url-suffix"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::IRI)))
+ (let ((result (tm-sparql::parse-triple-elem query-6 dummy-object)))
+ (is (string= (getf result :next-query) "."))
+ (is (string= (getf (getf result :value) :value) "http://prefix.value/suffix"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::IRI)))
+ (let ((result (tm-sparql::parse-triple-elem query-7 dummy-object)))
+ (is (string= (getf result :next-query) "}"))
+ (is (string= (getf (getf result :value) :value) "http://prefix.value/suffix"))
+ (is (eql (getf (getf result :value) :type) 'TM-SPARQL::IRI)))
+ (signals sparql-parser-error
+ (tm-sparql::parse-triple-elem query-8 dummy-object))))
+
(defun run-sparql-tests ()
- (it.bese.fiveam:run! 'sparql-test:sparql-tests))
\ No newline at end of file
+ (it.bese.fiveam:run! 'sparql-test:sparql-tests))
More information about the Isidorus-cvs
mailing list