activerdf 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/common.rb ADDED
@@ -0,0 +1,91 @@
1
+ def get_adapter
2
+ types = ConnectionPool.adapter_types
3
+ if types.include?(:rdflite)
4
+ ConnectionPool.add :type => :rdflite
5
+ elsif types.include?(:redland)
6
+ ConnectionPool.add :type => :redland
7
+ elsif types.include?(:sparql)
8
+ ConnectionPool.add(:type => :sparql, :url => "http://m3pe.org:8080/repositories/test-people", :results => :sparql_xml)
9
+ elsif types.include?(:yars)
10
+ ConnectionPool.add :type => :yars
11
+ elsif types.include?(:jars2)
12
+ ConnectionPool.add :type => :jars2
13
+ else
14
+ raise ActiveRdfError, "no suitable adapter found for test"
15
+ end
16
+ end
17
+
18
+ def get_read_only_adapter
19
+ types = ConnectionPool.adapter_types
20
+ if types.include?(:sparql)
21
+ ConnectionPool.add(:type => :sparql, :url => "http://m3pe.org:8080/repositories/test-people", :results => :sparql_xml)
22
+ else
23
+ raise ActiveRdfError, "no suitable read only adapter found for test"
24
+ end
25
+
26
+ end
27
+
28
+ # TODO make this work with a list of existing adapters, not only one
29
+ def get_different_adapter(existing_adapter)
30
+ types = ConnectionPool.adapter_types
31
+ if types.include?(:rdflite) and existing_adapter.class != RDFLite
32
+ ConnectionPool.add :type => :rdflite
33
+ elsif types.include?(:redland) and existing_adapter.class != RedlandAdapter
34
+ ConnectionPool.add :type => :redland
35
+ elsif types.include?(:sparql) and existing_adapter.class != SparqlAdapter
36
+ ConnectionPool.add(:type => :sparql, :url => "http://m3pe.org:8080/repositories/test-people", :results => :sparql_xml)
37
+ elsif types.include?(:yars) and existing_adapter.class != YarsAdapter
38
+ ConnectionPool.add :type => :yars
39
+ elsif types.include?(:jars2) and existing_adapter.class != Jars2Adapter
40
+ ConnectionPool.add :type => :jars2
41
+ else
42
+ raise ActiveRdfError, "only one adapter on this system, or no suitable adapter found for test"
43
+ end
44
+ end
45
+
46
+ def get_all_read_adapters
47
+ types = ConnectionPool.adapter_types
48
+ adapters = types.collect {|type|
49
+ if type == :sparql
50
+ ConnectionPool.add(:type => :sparql, :url => "http://m3pe.org:8080/repositories/test-people", :results => :sparql_xml)
51
+ else
52
+ ConnectionPool.add :type => type
53
+ end
54
+ }
55
+ adapters.select {|adapter| adapter.reads?}
56
+ end
57
+
58
+ def get_all_write_adapters
59
+ types = ConnectionPool.adapter_types
60
+ adapters = types.collect {|type| ConnectionPool.add :type => type }
61
+ adapters.select {|adapter| adapter.writes?}
62
+ end
63
+
64
+ def get_write_adapter
65
+ types = ConnectionPool.adapter_types
66
+ if types.include?(:rdflite)
67
+ ConnectionPool.add :type => :rdflite
68
+ elsif types.include?(:redland)
69
+ ConnectionPool.add :type => :redland
70
+ elsif types.include?(:yars)
71
+ ConnectionPool.add :type => :yars
72
+ elsif types.include?(:jars2)
73
+ ConnectionPool.add :type => :jars2
74
+ else
75
+ raise ActiveRdfError, "no suitable adapter found for test"
76
+ end
77
+ end
78
+
79
+ # TODO use a list of exisiting adapters not only one
80
+ def get_different_write_adapter(existing_adapter)
81
+ types = ConnectionPool.adapter_types
82
+ if types.include?(:rdflite) and existing_adapter.class != RDFLite
83
+ ConnectionPool.add :type => :rdflite
84
+ elsif types.include?(:redland) and existing_adapter.class != RedlandAdapter
85
+ ConnectionPool.add :type => :redland
86
+ elsif types.include?(:yars) and existing_adapter.class != YarsAdapter
87
+ ConnectionPool.add :type => :yars
88
+ else
89
+ raise ActiveRdfError, "only one write adapter on this system, or no suitable write adapter found for test"
90
+ end
91
+ end
@@ -0,0 +1,76 @@
1
+ # Author:: Benjamin Heitmann
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'federation/connection_pool'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestConnectionPool < Test::Unit::TestCase
11
+ def setup
12
+ ConnectionPool.clear
13
+ end
14
+
15
+ def teardown
16
+ ConnectionPool.clear
17
+ end
18
+
19
+ def test_class_add_data_source
20
+ # test for successfull adding of an adapter
21
+ adapter = get_adapter
22
+ assert_kind_of ActiveRdfAdapter, adapter
23
+ assert ConnectionPool.adapter_pool.include?(adapter)
24
+
25
+ # now check that we get the same adapter if we supply the same parameters
26
+ adapter2 = get_adapter
27
+ assert_equal adapter, adapter2
28
+ # test same object_id
29
+ end
30
+
31
+ def test_class_adapter_pool
32
+ #ConnectionPool.clear
33
+ assert_equal 0, ConnectionPool.adapter_pool.size
34
+ adapter = get_adapter
35
+ assert_equal 1, ConnectionPool.adapter_pool.size
36
+ end
37
+
38
+ def test_class_register_adapter
39
+ ConnectionPool.register_adapter(:funkytype, ActiveRdfAdapter)
40
+ assert ConnectionPool.adapter_types.include?(:funkytype)
41
+ end
42
+
43
+ def test_class_auto_flush_equals
44
+ # assert auto flushing by default
45
+ assert ConnectionPool.auto_flush?
46
+ ConnectionPool.auto_flush = false
47
+ assert !ConnectionPool.auto_flush?
48
+ end
49
+
50
+ def test_class_clear
51
+ ConnectionPool.clear
52
+ assert ConnectionPool.adapter_pool.empty?
53
+ assert_nil ConnectionPool.write_adapter
54
+ end
55
+
56
+ def test_class_write_adapter
57
+ adapter = get_write_adapter
58
+ assert_kind_of ActiveRdfAdapter, adapter
59
+ end
60
+
61
+ def test_class_write_adapter_equals
62
+ adapter1 = get_write_adapter
63
+ adapter2 = get_different_write_adapter(adapter1)
64
+ assert_equal adapter2, ConnectionPool.write_adapter
65
+ ConnectionPool.write_adapter = adapter1
66
+ assert_equal adapter1, ConnectionPool.write_adapter
67
+ end
68
+ end
69
+
70
+ # need access to connectionpool.adapter_pool in tests
71
+ class ConnectionPool
72
+ def self.adapter_pool
73
+ @@adapter_pool
74
+ end
75
+ end
76
+
@@ -0,0 +1,148 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'federation/federation_manager'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestFederationManager < Test::Unit::TestCase
11
+ def setup
12
+ ConnectionPool.clear
13
+ end
14
+
15
+ def teardown
16
+ end
17
+
18
+ @@eyal = RDFS::Resource.new("http://activerdf.org/test/eyal")
19
+ @@age = RDFS::Resource.new("http://activerdf.org/test/age")
20
+ @@age_number = RDFS::Resource.new("27")
21
+ @@eye = RDFS::Resource.new("http://activerdf.org/test/eye")
22
+ @@eye_value = RDFS::Resource.new("blue")
23
+ @@type = RDFS::Resource.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
24
+ @@person = RDFS::Resource.new("http://www.w3.org/2000/01/rdf-schema#Resource")
25
+ @@resource = RDFS::Resource.new("http://activerdf.org/test/Person")
26
+
27
+
28
+ def test_single_pool
29
+ a1 = get_adapter
30
+ a2 = get_adapter
31
+ assert_equal a1, a2
32
+ assert_equal a1.object_id, a2.object_id
33
+ end
34
+
35
+ def test_class_add
36
+ write1 = get_write_adapter
37
+ FederationManager.add(@@eyal, @@age, @@age_number)
38
+
39
+ age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
40
+ assert "27", age_result
41
+ end
42
+
43
+ def test_class_add_no_write_adapter
44
+ # zero write, one read -> must raise error
45
+
46
+ adapter = get_read_only_adapter
47
+ assert(!(adapter.writes?))
48
+ assert_raises NoMethodError do
49
+ FederationManager.add(@@eyal, @@age, @@age_number)
50
+ end
51
+ end
52
+
53
+ def test_class_add_one_write_one_read
54
+ # one write, one read
55
+
56
+ write1 = get_write_adapter
57
+ read1 = get_read_only_adapter
58
+ assert_not_equal write1,read1
59
+ assert_not_equal write1.object_id, read1.object_id
60
+
61
+ FederationManager.add(@@eyal, @@age, @@age_number)
62
+
63
+ age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
64
+ assert "27", age_result
65
+ end
66
+
67
+ def test_get_different_read_and_write_adapters
68
+ r1 = get_adapter
69
+ r2 = get_different_adapter(r1)
70
+ assert_not_equal r1,r2
71
+ assert_not_equal r1.object_id, r2.object_id
72
+
73
+ w1 = get_write_adapter
74
+ w2 = get_different_write_adapter(w1)
75
+ assert_not_equal w1,w2
76
+ assert_not_equal w1.object_id, w2.object_id
77
+ end
78
+
79
+ def test_class_add_two_write
80
+ # two write, one read, no switching
81
+ # we need to different write adapters for this
82
+ #
83
+
84
+ write1 = get_write_adapter
85
+ write2 = get_different_write_adapter(write1)
86
+
87
+ read1 = get_read_only_adapter
88
+
89
+ FederationManager.add(@@eyal, @@age, @@age_number)
90
+
91
+ age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
92
+ assert "27", age_result
93
+ end
94
+
95
+ def test_class_add_two_write_switching
96
+ # two write, one read, with switching
97
+
98
+ write1 = get_write_adapter
99
+ write2 = get_different_write_adapter(write1)
100
+
101
+ read1 = get_read_only_adapter
102
+
103
+ FederationManager.add(@@eyal, @@age, @@age_number)
104
+ age_result = Query.new.select(:o).where(@@eyal, @@age, :o).execute
105
+ assert "27", age_result
106
+
107
+ ConnectionPool.write_adapter = write2
108
+
109
+ FederationManager.add(@@eyal, @@eye, @@eye_value)
110
+ age_result = Query.new.select(:o).where(@@eyal, @@eye, :o).execute
111
+ assert "blue", age_result
112
+
113
+ second_result = write2.query(Query.new.select(:o).where(@@eyal, @@eye, :o))
114
+ assert "blue", second_result
115
+ end
116
+
117
+ # this test makes no sense without two different data sources
118
+ def test_federated_query
119
+ first_adapter = get_write_adapter
120
+ first_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
121
+ first = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
122
+
123
+ # results should not be empty, because then the test succeeds trivially
124
+ assert_not_nil first
125
+ assert first != []
126
+
127
+ ConnectionPool.clear
128
+ second_adapter = get_different_write_adapter(first_adapter)
129
+ second_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
130
+ second = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
131
+
132
+ # now we query both adapters in parallel
133
+ ConnectionPool.clear
134
+ first_adapter = get_write_adapter
135
+ first_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
136
+ second_adapter = get_different_write_adapter(first_adapter)
137
+ second_adapter.load("#{File.dirname(__FILE__)}/../test_person_data.nt")
138
+ both = Query.new.select(:s,:p,:o).where(:s,:p,:o).execute
139
+ # assert both together contain twice the sum of the separate sources
140
+ assert_equal first + second, both
141
+
142
+ # since both sources contain the same data, we check that querying (both!)
143
+ # in parallel for distinct data, actually gives same results as querying
144
+ # only the one set
145
+ uniq = Query.new.distinct(:s,:p,:o).where(:s,:p,:o).execute
146
+ assert_equal first, uniq
147
+ end
148
+ end
@@ -0,0 +1,65 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'objectmanager/namespace'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestNamespace < Test::Unit::TestCase
11
+ Rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
12
+ RdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'
13
+ RdfsResource = 'http://www.w3.org/2000/01/rdf-schema#Resource'
14
+ Rdfs = 'http://www.w3.org/2000/01/rdf-schema#'
15
+
16
+ def setup
17
+ end
18
+
19
+ def teardown
20
+ end
21
+
22
+ def test_default_ns_expansion
23
+ rdftype = RdfType
24
+ rdfsresource = RdfsResource
25
+
26
+ assert_equal rdftype, Namespace.expand(:rdf, :type)
27
+ assert_equal rdftype, Namespace.expand(:rdf, 'type')
28
+ assert_equal rdftype, Namespace.expand('rdf', :type)
29
+ assert_equal rdftype, Namespace.expand('rdf', 'type')
30
+
31
+ assert_equal rdfsresource, Namespace.expand(:rdfs, :Resource)
32
+ assert_equal rdfsresource, Namespace.expand(:rdfs, 'Resource')
33
+ assert_equal rdfsresource, Namespace.expand('rdfs', :Resource)
34
+ assert_equal rdfsresource, Namespace.expand('rdfs', 'Resource')
35
+ end
36
+
37
+ def test_default_ns_lookup
38
+ rdftype = RDFS::Resource.new RdfType
39
+ rdfsresource = RDFS::Resource.new RdfsResource
40
+
41
+ assert_equal rdftype, Namespace.lookup(:rdf, :type)
42
+ assert_equal rdfsresource, Namespace.lookup(:rdfs, :Resource)
43
+ end
44
+
45
+ def test_find_prefix
46
+ assert_equal :rdf, Namespace.prefix(Namespace.lookup(:rdf, :type))
47
+ assert_equal :rdf, Namespace.prefix(Namespace.expand(:rdf, :type))
48
+
49
+ assert_equal :rdfs, Namespace.prefix(Namespace.lookup(:rdfs, :Resource))
50
+ assert_equal :rdfs, Namespace.prefix(Namespace.expand(:rdfs, :Resource))
51
+ end
52
+
53
+ def test_class_localname
54
+ assert_equal 'type', Namespace.localname(Namespace.lookup(:rdf, :type))
55
+ assert_equal 'Class', Namespace.localname(Namespace.lookup(:rdfs, :Class))
56
+ end
57
+
58
+ def test_class_register
59
+ test = 'http://test.org/'
60
+ abc = "#{test}abc"
61
+ Namespace.register :test, test
62
+
63
+ assert_equal abc, Namespace.expand(:test, :abc)
64
+ end
65
+ end
@@ -0,0 +1,52 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require "#{File.dirname(__FILE__)}/../common"
8
+
9
+ class TestObjectManager < Test::Unit::TestCase
10
+ def setup
11
+ ConnectionPool.clear
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_resource_creation
18
+ assert_nothing_raised { RDFS::Resource.new('abc') }
19
+
20
+ r1 = RDFS::Resource.new('abc')
21
+ r2 = RDFS::Resource.new('cde')
22
+ r3 = RDFS::Resource.new('cde')
23
+
24
+ assert_equal 'abc', r1.uri
25
+ assert_equal 'cde', r2.uri
26
+ assert_equal r3, r2
27
+ end
28
+
29
+ def test_class_construct_classes
30
+ adapter = get_write_adapter
31
+ adapter.load "#{File.dirname(__FILE__)}/../test_person_data.nt"
32
+
33
+ Namespace.register(:test, 'http://activerdf.org/test/')
34
+ ObjectManager.construct_classes
35
+
36
+ assert(defined? TEST, "class construction should have created module TEST")
37
+ assert(defined? RDFS, "class construction should have created module RDFS")
38
+ assert(defined? TEST::Person, "class construction should have created TEST::Person")
39
+ assert(defined? RDFS::Class, "class construction should have created RDFS::Class")
40
+ end
41
+
42
+ def test_class_construct_class
43
+ adapter = get_write_adapter
44
+ adapter.load "#{File.dirname(__FILE__)}/../test_person_data.nt"
45
+
46
+ Namespace.register(:test, 'http://activerdf.org/test/')
47
+ person_resource = Namespace.lookup(:test, :Person)
48
+ person_class = ObjectManager.construct_class(person_resource)
49
+ assert_instance_of Class, person_class
50
+ assert_equal person_resource.uri, person_class.class_uri.uri
51
+ end
52
+ end
@@ -0,0 +1,83 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'federation/connection_pool'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestResourceReading < Test::Unit::TestCase
11
+ def setup
12
+ ConnectionPool.clear
13
+ @adapter = get_read_only_adapter
14
+ Namespace.register(:ar, 'http://activerdf.org/test/')
15
+ @eyal = RDFS::Resource.new 'http://activerdf.org/test/eyal'
16
+ end
17
+
18
+ def teardown
19
+ end
20
+
21
+ def test_find_all_instances
22
+ assert_equal 36, RDFS::Resource.find_all.size
23
+ assert_equal [@eyal], AR::Person.find_all
24
+ end
25
+
26
+ def test_class_predicates
27
+ assert_equal 10, RDFS::Resource.predicates.size
28
+ end
29
+
30
+ def test_eyal_predicates
31
+ predicates = @eyal.direct_predicates
32
+
33
+ # assert that the three found predicates are eye, age, and type
34
+ assert_equal 3, predicates.size
35
+ predicates_labels = predicates.collect {|pred| pred.label }
36
+ ['age', 'eye', 'type'].each do |pr|
37
+ assert predicates_labels.include?(pr), "Eyal should have predicate #{pr}"
38
+ end
39
+
40
+ # assert that the found predicates on Person are eye, age, and type
41
+ predicates_labels = predicates.collect {|pred| pred.label }
42
+ ['age', 'eye', 'type'].each do |pr|
43
+ assert predicates_labels.include?(pr), "Eyal should have predicate #{pr}"
44
+ end
45
+ end
46
+
47
+ def test_eyal_types
48
+ type_labels = @eyal.types.collect {|pred| pred.label}
49
+ assert_equal ['Person','Resource'], type_labels
50
+ end
51
+
52
+ def test_eyal_age
53
+ # triple exists '<eyal> age 27'
54
+ assert_equal '27', @eyal.age
55
+
56
+ # Person has property car, but eyal has no value for it
57
+ assert_equal nil, @eyal.car
58
+
59
+ # non-existent method should throw error
60
+ assert_equal nil, @eyal.non_existing_method
61
+ end
62
+
63
+ def test_eyal_type
64
+ assert_instance_of RDFS::Resource, @eyal
65
+ assert_instance_of AR::Person, @eyal
66
+ end
67
+
68
+ def test_find_methods
69
+ found_eyal = RDFS::Resource.find_by_eye('blue')
70
+ assert_not_nil found_eyal
71
+ assert_equal @eyal, found_eyal
72
+ assert_equal 'blue', RDFS::Resource.find_by_age(27).eye
73
+ assert_equal @eyal, RDFS::Resource.find_by_age_and_eye(27,'blue')
74
+ end
75
+
76
+ # test for writing if no write adapter is defined (like only sparqls)
77
+ def test_write_without_write_adapter
78
+ assert_raises NoMethodError do
79
+ @eyal.age = 18
80
+ end
81
+ end
82
+
83
+ end
@@ -0,0 +1,26 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'federation/connection_pool'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestResourceWriting < Test::Unit::TestCase
11
+ def setup
12
+ ConnectionPool.clear
13
+ end
14
+
15
+ def test_update_value
16
+ Namespace.register(:ar, 'http://activerdf.org/test/')
17
+ adapter = get_write_adapter
18
+
19
+ eyal = RDFS::Resource.new 'http://activerdf.org/test/eyal'
20
+ assert_raises(ActiveRdfError) { eyal.age = 18 }
21
+
22
+ adapter.load "#{File.dirname(__FILE__)}/../test_person_data.nt"
23
+ assert_nothing_raised { eyal.age = 18 }
24
+ assert_equal ['18','27'], eyal.age
25
+ end
26
+ end
@@ -0,0 +1,51 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'queryengine/query'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestQuery < Test::Unit::TestCase
11
+ def setup
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_sparql_generation
18
+
19
+ # TODO: write tests for distinct, ask
20
+
21
+ query = Query.new
22
+ query.select(:s)
23
+ query.where(:s, RDFS::Resource.new('predicate'), '30')
24
+
25
+ generated = Query2SPARQL.translate(query)
26
+ expected = "SELECT ?s WHERE { ?s <predicate> \"30\" . }"
27
+ assert_equal expected, generated
28
+
29
+ query = Query.new
30
+ query.select(:s)
31
+ query.where(:s, RDFS::Resource.new('foaf:age'), :a)
32
+ query.where(:a, RDFS::Resource.new('rdf:type'), RDFS::Resource.new('xsd:int'))
33
+ generated = Query2SPARQL.translate(query)
34
+ expected = "SELECT ?s WHERE { ?s <foaf:age> ?a. ?a <rdf:type> <xsd:int> . }"
35
+ assert_equal expected, generated
36
+
37
+ # query = Query.new
38
+ # query.select(:s).select(:a)
39
+ # query.where(:s, 'foaf:age', :a)
40
+ # generated = Query2SPARQL.translate(query)
41
+ # expected = "SELECT DISTINCT ?s ?a WHERE { ?s foaf:age ?a .}"
42
+ # assert_equal expected, generated
43
+ end
44
+
45
+ def test_query_omnipotent
46
+ # can define multiple select clauses at once or separately
47
+ q1 = Query.new.select(:s,:a)
48
+ q2 = Query.new.select(:s).select(:a)
49
+ assert_equal Query2SPARQL.translate(q1),Query2SPARQL.translate(q2)
50
+ end
51
+ end
@@ -0,0 +1,51 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'queryengine/query2jars2'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestQuery2Jars2 < Test::Unit::TestCase
11
+ def setup
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_sparql_generation
18
+
19
+ # TODO: write tests for distinct, ask
20
+
21
+ query = Query.new
22
+ query.select(:s)
23
+ query.where(:s, RDFS::Resource.new('predicate'), '30')
24
+
25
+ generated = Query2SPARQL.translate(query)
26
+ expected = "SELECT ?s WHERE { ?s <predicate> \"30\" . }"
27
+ assert_equal expected, generated
28
+
29
+ query = Query.new
30
+ query.select(:s)
31
+ query.where(:s, RDFS::Resource.new('foaf:age'), :a)
32
+ query.where(:a, RDFS::Resource.new('rdf:type'), RDFS::Resource.new('xsd:int'))
33
+ generated = Query2SPARQL.translate(query)
34
+ expected = "SELECT ?s WHERE { ?s <foaf:age> ?a. ?a <rdf:type> <xsd:int> . }"
35
+ assert_equal expected, generated
36
+
37
+ # query = Query.new
38
+ # query.select(:s).select(:a)
39
+ # query.where(:s, 'foaf:age', :a)
40
+ # generated = Query2SPARQL.translate(query)
41
+ # expected = "SELECT DISTINCT ?s ?a WHERE { ?s foaf:age ?a .}"
42
+ # assert_equal expected, generated
43
+ end
44
+
45
+ def test_query_omnipotent
46
+ # can define multiple select clauses at once or separately
47
+ q1 = Query.new.select(:s,:a)
48
+ q2 = Query.new.select(:s).select(:a)
49
+ assert_equal Query2SPARQL.translate(q1),Query2SPARQL.translate(q2)
50
+ end
51
+ end
@@ -0,0 +1,51 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006
3
+ # License:: LGPL
4
+
5
+ require 'test/unit'
6
+ require 'active_rdf'
7
+ require 'queryengine/query2sparql'
8
+ require "#{File.dirname(__FILE__)}/../common"
9
+
10
+ class TestQuery2Sparql < Test::Unit::TestCase
11
+ def setup
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_sparql_generation
18
+
19
+ # TODO: write tests for distinct, ask
20
+
21
+ query = Query.new
22
+ query.select(:s)
23
+ query.where(:s, RDFS::Resource.new('predicate'), '30')
24
+
25
+ generated = Query2SPARQL.translate(query)
26
+ expected = "SELECT ?s WHERE { ?s <predicate> \"30\" . }"
27
+ assert_equal expected, generated
28
+
29
+ query = Query.new
30
+ query.select(:s)
31
+ query.where(:s, RDFS::Resource.new('foaf:age'), :a)
32
+ query.where(:a, RDFS::Resource.new('rdf:type'), RDFS::Resource.new('xsd:int'))
33
+ generated = Query2SPARQL.translate(query)
34
+ expected = "SELECT ?s WHERE { ?s <foaf:age> ?a. ?a <rdf:type> <xsd:int> . }"
35
+ assert_equal expected, generated
36
+
37
+ # query = Query.new
38
+ # query.select(:s).select(:a)
39
+ # query.where(:s, 'foaf:age', :a)
40
+ # generated = Query2SPARQL.translate(query)
41
+ # expected = "SELECT DISTINCT ?s ?a WHERE { ?s foaf:age ?a .}"
42
+ # assert_equal expected, generated
43
+ end
44
+
45
+ def test_query_omnipotent
46
+ # can define multiple select clauses at once or separately
47
+ q1 = Query.new.select(:s,:a)
48
+ q2 = Query.new.select(:s).select(:a)
49
+ assert_equal Query2SPARQL.translate(q1),Query2SPARQL.translate(q2)
50
+ end
51
+ end