From efa9aee690fdaac063b523c6beee261245203305 Mon Sep 17 00:00:00 2001 From: Dustin Whitney Date: Thu, 17 Oct 2019 13:25:25 -0400 Subject: [PATCH] refactored some tests --- lib/tests/custom_functions_test_cases.rs | 60 +++++++-------- lib/tests/service_test_cases.rs | 95 ++---------------------- lib/tests/support/mod.rs | 93 +++++++++++++++++++++++ 3 files changed, 127 insertions(+), 121 deletions(-) create mode 100644 lib/tests/support/mod.rs diff --git a/lib/tests/custom_functions_test_cases.rs b/lib/tests/custom_functions_test_cases.rs index c2fe2022..8c9d8374 100644 --- a/lib/tests/custom_functions_test_cases.rs +++ b/lib/tests/custom_functions_test_cases.rs @@ -1,10 +1,8 @@ use rudf::model::*; -use rudf::{GraphSyntax, Repository, RepositoryConnection, MemoryRepository, Result}; -use rudf::sparql::{BindingsIterator, CustomFunctionsHandler, PreparedQuery, QueryOptions, QueryResult}; -use failure::format_err; -use std::io::BufRead; - +use rudf::sparql::{CustomFunctionsHandler, QueryOptions}; +mod support; +use support::*; #[test] fn simple_custom_function_test() { @@ -46,8 +44,6 @@ fn simple_custom_function_test() { let triples = br#" "Bob" . "Alice" . - . - . "#.as_ref(); let results = do_query(triples, query, options).unwrap(); let collected = results.into_values_iter().map(move |b| b.unwrap()).collect::>(); @@ -59,32 +55,32 @@ fn simple_custom_function_test() { } -fn literal(str: String) -> Term { - Term::Literal(Literal::new_simple_literal(str)) -} +#[test] +fn simple_default_custom_function_test() { -fn make_repository(reader: impl BufRead) -> Result { - let repository = MemoryRepository::default(); - let mut connection = repository.connection()?; - connection.load_graph(reader, GraphSyntax::NTriples, None, None).unwrap(); - Ok(repository) -} + let query = r#" + PREFIX ex: + SELECT ?name ?reverse + WHERE + { + ?s ?name . + BIND(ex:REVERSE(?name) as ?reverse) + } + ORDER BY ?name + "#.to_string(); -fn query_repository<'a>(repository: MemoryRepository, query: String, options: QueryOptions<'a>) -> Result> { - let connection = repository.connection()?; - let prepared_query = connection.prepare_query(&query, options)?; - let result = prepared_query.exec()?; - match result { - QueryResult::Bindings(iterator) => { - let (varaibles, iter) = iterator.destruct(); - let collected = iter.collect::>(); - Ok(BindingsIterator::new(varaibles, Box::new(collected.into_iter()))) - }, - _ => Err(format_err!("Excpected bindings but got another QueryResult")) - } -} -fn do_query<'a>(reader: impl BufRead, query: String, options: QueryOptions<'a>) -> Result> { - let repository = make_repository(reader)?; - query_repository(repository, query, options) + let options = QueryOptions::default(); + let triples = br#" + "Bob" . + "Alice" . + "#.as_ref(); + let results = do_query(triples, query, options).unwrap(); + let collected = results.into_values_iter().map(move |b| b.unwrap()).collect::>(); + let solution = vec![ + vec![ Some(literal(String::from("Alice"))), None ], + vec![ Some(literal(String::from("Bob"))), None ], + ]; + assert_eq!(collected, solution); + } diff --git a/lib/tests/service_test_cases.rs b/lib/tests/service_test_cases.rs index 1e4a76a5..f9596bd5 100644 --- a/lib/tests/service_test_cases.rs +++ b/lib/tests/service_test_cases.rs @@ -1,10 +1,12 @@ use failure::format_err; use rudf::model::*; use rudf::sparql::{ - BindingsIterator, GraphPattern, PreparedQuery, QueryOptions, QueryResult, ServiceHandler, + BindingsIterator, GraphPattern, QueryOptions, ServiceHandler, }; -use rudf::{GraphSyntax, MemoryRepository, Repository, RepositoryConnection, Result}; -use std::io::BufRead; +use rudf::Result; + +mod support; +use support::*; #[test] fn simple_service_test() { @@ -214,89 +216,4 @@ fn non_silent_service_test() { "This should have been an error since the service fails" ), } -} - -fn ex(id: String) -> Term { - Term::NamedNode(NamedNode::parse(format!("http://example.com/{}", &id)).unwrap()) -} - -fn mailto(id: String) -> Term { - Term::NamedNode(NamedNode::parse(format!("mailto:{}", &id)).unwrap()) -} - -fn literal(str: String) -> Term { - Term::Literal(Literal::new_simple_literal(str)) -} - -fn make_repository(reader: impl BufRead) -> Result { - let repository = MemoryRepository::default(); - let mut connection = repository.connection()?; - connection - .load_graph(reader, GraphSyntax::NTriples, None, None) - .unwrap(); - Ok(repository) -} - -fn query_repository<'a>( - repository: MemoryRepository, - query: String, - options: QueryOptions<'a>, -) -> Result> { - match repository - .connection()? - .prepare_query(&query, options)? - .exec()? - { - QueryResult::Bindings(iterator) => { - let (varaibles, iter) = iterator.destruct(); - let collected = iter.collect::>(); - Ok(BindingsIterator::new( - varaibles, - Box::new(collected.into_iter()), - )) - } - _ => Err(format_err!( - "Excpected bindings but got another QueryResult" - )), - } -} - -fn pattern_repository<'a>( - repository: MemoryRepository, - pattern: GraphPattern, - options: QueryOptions<'a>, -) -> Result> { - match repository - .connection()? - .prepare_query_from_pattern(&pattern, options)? - .exec()? - { - QueryResult::Bindings(iterator) => { - let (varaibles, iter) = iterator.destruct(); - let collected = iter.collect::>(); - Ok(BindingsIterator::new( - varaibles, - Box::new(collected.into_iter()), - )) - } - _ => Err(format_err!("Expected bindings but got another QueryResult")), - } -} - -fn do_query<'a>( - reader: impl BufRead, - query: String, - options: QueryOptions<'a>, -) -> Result> { - let repository = make_repository(reader)?; - query_repository(repository, query, options) -} - -fn do_pattern<'a>( - reader: impl BufRead, - pattern: GraphPattern, - options: QueryOptions<'a>, -) -> Result> { - let repository = make_repository(reader)?; - pattern_repository(repository, pattern, options) -} +} \ No newline at end of file diff --git a/lib/tests/support/mod.rs b/lib/tests/support/mod.rs new file mode 100644 index 00000000..0de647da --- /dev/null +++ b/lib/tests/support/mod.rs @@ -0,0 +1,93 @@ +#![cfg_attr(test, allow(dead_code))] + +use failure::format_err; +use rudf::model::*; +use rudf::sparql::{BindingsIterator, GraphPattern, PreparedQuery, QueryOptions, QueryResult}; +use rudf::{GraphSyntax, MemoryRepository, Repository, RepositoryConnection, Result}; +use std::io::BufRead; + + +pub(crate) fn ex(id: String) -> Term { + Term::NamedNode(NamedNode::parse(format!("http://example.com/{}", &id)).unwrap()) +} + +pub(crate) fn mailto(id: String) -> Term { + Term::NamedNode(NamedNode::parse(format!("mailto:{}", &id)).unwrap()) +} + +pub(crate) fn literal(str: String) -> Term { + Term::Literal(Literal::new_simple_literal(str)) +} + +pub(crate) fn make_repository(reader: impl BufRead) -> Result { + let repository = MemoryRepository::default(); + let mut connection = repository.connection()?; + connection + .load_graph(reader, GraphSyntax::NTriples, None, None) + .unwrap(); + Ok(repository) +} + +pub(crate) fn query_repository<'a>( + repository: MemoryRepository, + query: String, + options: QueryOptions<'a>, +) -> Result> { + match repository + .connection()? + .prepare_query(&query, options)? + .exec()? + { + QueryResult::Bindings(iterator) => { + let (varaibles, iter) = iterator.destruct(); + let collected = iter.collect::>(); + Ok(BindingsIterator::new( + varaibles, + Box::new(collected.into_iter()), + )) + } + _ => Err(format_err!( + "Excpected bindings but got another QueryResult" + )), + } +} + +pub(crate) fn pattern_repository<'a>( + repository: MemoryRepository, + pattern: GraphPattern, + options: QueryOptions<'a>, +) -> Result> { + match repository + .connection()? + .prepare_query_from_pattern(&pattern, options)? + .exec()? + { + QueryResult::Bindings(iterator) => { + let (varaibles, iter) = iterator.destruct(); + let collected = iter.collect::>(); + Ok(BindingsIterator::new( + varaibles, + Box::new(collected.into_iter()), + )) + } + _ => Err(format_err!("Expected bindings but got another QueryResult")), + } +} + +pub(crate) fn do_query<'a>( + reader: impl BufRead, + query: String, + options: QueryOptions<'a>, +) -> Result> { + let repository = make_repository(reader)?; + query_repository(repository, query, options) +} + +pub(crate) fn do_pattern<'a>( + reader: impl BufRead, + pattern: GraphPattern, + options: QueryOptions<'a>, +) -> Result> { + let repository = make_repository(reader)?; + pattern_repository(repository, pattern, options) +}