activerdf 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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