rtm 0.1.6 → 0.2.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/DISCLAIMER +10 -33
- data/LICENSE +201 -0
- data/README +3 -3
- data/lib/rtm.rb +148 -74
- data/lib/rtm/axes.rb +295 -0
- data/lib/rtm/axes/association.rb +76 -0
- data/lib/rtm/axes/associations.rb +96 -0
- data/lib/rtm/axes/assocs_names_occs.rb +56 -0
- data/lib/rtm/axes/characteristic.rb +68 -0
- data/lib/rtm/axes/characteristics.rb +93 -0
- data/lib/rtm/axes/string.rb +76 -0
- data/lib/rtm/axes/strings.rb +87 -0
- data/lib/rtm/axes/topic.rb +233 -0
- data/lib/rtm/axes/topics.rb +280 -0
- data/lib/rtm/{backward_compatibility.rb → deprecated/index_property_set.rb} +3 -0
- data/lib/rtm/engine.rb +58 -0
- data/lib/rtm/extensions.rb +11 -1
- data/lib/rtm/{locator_helpers.rb → helpers/locator.rb} +15 -4
- data/lib/rtm/{helpers.rb → helpers/no_output.rb} +3 -0
- data/lib/rtm/helpers/uri.rb +13 -0
- data/lib/rtm/io.rb +18 -0
- data/lib/rtm/io/from_xtm2_libxml.rb +2 -1
- data/lib/rtm/io/ontopia_io.rb +25 -0
- data/lib/rtm/io/tmapix.rb +234 -0
- data/lib/rtm/io/to_hash.rb +116 -0
- data/lib/rtm/io/to_jtm.rb +53 -103
- data/lib/rtm/io/to_rdf.rb +30 -0
- data/lib/rtm/io/to_string.rb +8 -6
- data/lib/rtm/io/to_xtm1.rb +6 -4
- data/lib/rtm/io/to_xtm2.rb +10 -8
- data/lib/rtm/io/to_yaml.rb +29 -98
- data/lib/rtm/navigation.rb +37 -0
- data/lib/rtm/navigation/association/players.rb +25 -0
- data/lib/rtm/navigation/name/atomify.rb +19 -0
- data/lib/rtm/navigation/name/characteristics.rb +33 -0
- data/lib/rtm/navigation/occurrence/atomify.rb +19 -0
- data/lib/rtm/navigation/occurrence/characteristics.rb +33 -0
- data/lib/rtm/navigation/topic/characteristics.rb +33 -0
- data/lib/rtm/navigation/topic/indicators.rb +31 -0
- data/lib/rtm/navigation/topic/items.rb +31 -0
- data/lib/rtm/navigation/topic/locators.rb +31 -0
- data/lib/rtm/navigation/topic/players.rb +27 -0
- data/lib/rtm/navigation/topic/supertypes.rb +162 -0
- data/lib/rtm/navigation/topic/traverse.rb +51 -0
- data/lib/rtm/navigation/topic/types.rb +107 -0
- data/lib/rtm/psi.rb +33 -2
- data/lib/rtm/sugar.rb +34 -0
- data/lib/rtm/sugar/association/hash_access.rb +46 -0
- data/lib/rtm/sugar/occurrence/dynamic_value.rb +75 -0
- data/lib/rtm/{pimp_my_api.rb → sugar/occurrence/externalize.rb} +3 -0
- data/lib/rtm/sugar/role/counterparts.rb +133 -46
- data/lib/rtm/sugar/topic/characteristics.rb +126 -12
- data/lib/rtm/sugar/topic/counterparts.rb +130 -7
- data/lib/rtm/sugar/topic/hash_access.rb +140 -30
- data/lib/rtm/sugar/topic/scoped.rb +65 -0
- data/lib/rtm/sugar/topic/topic_ref.rb +35 -0
- data/lib/rtm/sugar/topic/typed.rb +159 -0
- data/lib/rtm/sugar/typed/types.rb +38 -0
- data/lib/rtm/validation.rb +8 -5
- data/lib/rtm/version.rb +18 -0
- data/spec/helpers/spec_exampleexamplegroup.rb +14 -0
- data/spec/rtm/axes/association_spec.rb +88 -0
- data/spec/rtm/axes/associations_spec.rb +60 -0
- data/spec/rtm/axes/assocs_names_occs_spec.rb +9 -0
- data/spec/rtm/axes/characteristic_spec.rb +90 -0
- data/spec/rtm/axes/characteristics_spec.rb +85 -0
- data/spec/rtm/axes/string_spec.rb +145 -0
- data/spec/rtm/axes/strings_spec.rb +168 -0
- data/spec/rtm/axes/topic_spec.rb +124 -0
- data/spec/rtm/axes/topics_spec.rb +103 -0
- data/spec/rtm/base_spec.rb +32 -0
- data/spec/rtm/io/tmapix_spec.rb +85 -0
- data/spec/rtm/navigation/association/players_spec.rb +58 -0
- data/spec/rtm/navigation/association_spec.rb +52 -0
- data/spec/rtm/navigation/name/atomify_spec.rb +27 -0
- data/spec/rtm/navigation/name/characteristics_spec.rb +34 -0
- data/spec/rtm/navigation/name_spec.rb +52 -0
- data/spec/rtm/navigation/occurrence/atomify_spec.rb +27 -0
- data/spec/rtm/navigation/occurrence/characteristics_spec.rb +34 -0
- data/spec/rtm/navigation/occurrence_spec.rb +52 -0
- data/spec/rtm/navigation/string_spec.rb +51 -0
- data/spec/rtm/navigation/topic/characteristics_spec.rb +55 -0
- data/spec/rtm/navigation/topic/indicators_spec.rb +43 -0
- data/spec/rtm/navigation/topic/items_spec.rb +44 -0
- data/spec/rtm/navigation/topic/locators_spec.rb +44 -0
- data/spec/rtm/navigation/topic/players_spec.rb +48 -0
- data/spec/rtm/navigation/topic/scope_spec.rb +41 -0
- data/spec/rtm/navigation/topic/supertypes_spec.rb +376 -0
- data/spec/rtm/navigation/topic/traverse_spec.rb +64 -0
- data/spec/rtm/navigation/topic/types_spec.rb +195 -0
- data/spec/rtm/navigation/topic_spec.rb +153 -0
- data/spec/rtm/sugar/association/hash_access_spec.rb +55 -0
- data/spec/rtm/sugar/occurrence/dynamic_value_spec.rb +16 -0
- data/spec/rtm/sugar/role/counterparts_spec.rb +191 -0
- data/spec/rtm/sugar/topic/characteristics_spec.rb +318 -0
- data/spec/rtm/sugar/topic/counterparts_spec.rb +184 -0
- data/spec/rtm/sugar/topic/hash_access_spec.rb +234 -0
- data/spec/rtm/sugar/topic/scoped_spec.rb +131 -0
- data/spec/rtm/sugar/topic/topic_ref_spec.rb +44 -0
- data/spec/rtm/sugar/topic/typed_spec.rb +155 -0
- data/spec/rtm/sugar/typed/types_spec.rb +24 -0
- data/spec/rtm/tmapi/core/association_spec.rb +169 -0
- data/spec/rtm/tmapi/core/construct_spec.rb +25 -0
- data/spec/rtm/tmapi/core/name_spec.rb +85 -0
- data/spec/rtm/tmapi/core/occurrence_spec.rb +96 -0
- data/spec/rtm/tmapi/core/reifiable_spec.rb +168 -0
- data/spec/rtm/tmapi/core/role_spec.rb +73 -0
- data/spec/rtm/tmapi/core/scoped_spec.rb +403 -0
- data/spec/rtm/tmapi/core/topic_map_spec.rb +648 -0
- data/spec/rtm/tmapi/core/topic_spec.rb +992 -0
- data/spec/rtm/tmapi/core/typed_spec.rb +112 -0
- data/spec/rtm/tmapi/core/variant_spec.rb +52 -0
- data/spec/rtm/tmapi/ext/java_util_set_spec.rb +34 -0
- data/spec/rtm/tmapi_spec.rb +44 -0
- data/spec/rtm/utils/sparql_spec.rb +26 -0
- data/spec/rtm_spec.rb +94 -0
- data/spec/spec_helper.rb +23 -0
- data/test/base_unit_test.rb +161 -0
- data/test/{base_test.rb → base_unit_test_tmapi.rb} +46 -43
- metadata +122 -66
- data/COPYRIGHT +0 -4
- data/lib/Rakefile.rb +0 -42
- data/lib/activetopicmaps.rb +0 -278
- data/lib/rtm/backend/active_record.rb +0 -58
- data/lib/rtm/backend/active_record/001_initial_schema.rb +0 -116
- data/lib/rtm/backend/active_record/association_and_role.rb +0 -33
- data/lib/rtm/backend/active_record/locators.rb +0 -55
- data/lib/rtm/backend/active_record/name_variant_occurrence.rb +0 -45
- data/lib/rtm/backend/active_record/quaaxtm2rtm.rb +0 -113
- data/lib/rtm/backend/active_record/quaaxtm2rtmviews.rb +0 -134
- data/lib/rtm/backend/active_record/set_wrapper.rb +0 -98
- data/lib/rtm/backend/active_record/tm_construct.rb +0 -62
- data/lib/rtm/backend/active_record/tm_delegator.rb +0 -345
- data/lib/rtm/backend/active_record/tm_set_delegator.rb +0 -195
- data/lib/rtm/backend/active_record/tmdm.rb +0 -298
- data/lib/rtm/backend/active_record/topic.rb +0 -87
- data/lib/rtm/backend/active_record/topic_map.rb +0 -314
- data/lib/rtm/backend/active_record/traverse_associations.rb +0 -87
- data/lib/rtm/base.rb +0 -92
- data/lib/rtm/connect.rb +0 -92
- data/lib/rtm/core_ext.rb +0 -6
- data/lib/rtm/io/from_xtm2.rb +0 -263
- data/lib/rtm/merging/merging.rb +0 -307
- data/lib/rtm/sugar/topic/identifier_direct.rb +0 -11
- data/lib/rtm/sugar/topic/predefined_associations.rb +0 -42
- data/lib/run_main_project.rb +0 -16
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
5
|
+
|
|
6
|
+
module RTM::Typed
|
|
7
|
+
describe self do
|
|
8
|
+
before(:each) do
|
|
9
|
+
@tm = get_used_tm_sys_tm
|
|
10
|
+
end
|
|
11
|
+
after(:each) do
|
|
12
|
+
@tm.close
|
|
13
|
+
end
|
|
14
|
+
describe "#type" do
|
|
15
|
+
before(:each) do
|
|
16
|
+
@topic = @tm.create_topic_by("Uni_Leipzig")
|
|
17
|
+
@testname = @topic.create_name("test_type","Universität Leipzig")
|
|
18
|
+
end
|
|
19
|
+
it "for all instances of Typed this should give back the type" do
|
|
20
|
+
@testname.type.should == @tm.get("test_type")
|
|
21
|
+
end
|
|
22
|
+
it "should following the TMDM give back all instances of supertypes"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "#type=" do
|
|
26
|
+
before(:each) do
|
|
27
|
+
topic = @tm.get!("child")
|
|
28
|
+
@name = topic.create_name("Child")
|
|
29
|
+
@name.should be_a_kind_of RTM::Name
|
|
30
|
+
@occ = topic.create_occurrence("height","small")
|
|
31
|
+
@occ.should be_a_kind_of RTM::Occurrence
|
|
32
|
+
@assoc = @tm.create_association("mother_child")
|
|
33
|
+
@assoc.should be_a_kind_of RTM::Association
|
|
34
|
+
@role = @assoc.create_role("child","Hans")
|
|
35
|
+
@role.should be_a_kind_of RTM::Role
|
|
36
|
+
end
|
|
37
|
+
it "should set the type if the Construct is a Role and identifier a String" do
|
|
38
|
+
previous_type = @role.type
|
|
39
|
+
@role.type = "infant"
|
|
40
|
+
@role.type.should_not == previous_type
|
|
41
|
+
@role.type.should == @tm.get("infant")
|
|
42
|
+
end
|
|
43
|
+
it "should set the type if the Construct is a Role and identifier a Locator" do
|
|
44
|
+
previous_type = @role.type
|
|
45
|
+
@role.type = @tm.create_locator("infant")
|
|
46
|
+
@role.type.should_not == previous_type
|
|
47
|
+
@role.type.should == @tm.get("infant")
|
|
48
|
+
end
|
|
49
|
+
it "should set the type if the Construct is a Role and identifier a Topic" do
|
|
50
|
+
previous_type = @role.type
|
|
51
|
+
@role.type = @tm.get!("infant")
|
|
52
|
+
@role.type.should_not == previous_type
|
|
53
|
+
@role.type.should == @tm.get("infant")
|
|
54
|
+
end
|
|
55
|
+
it "should set the type if the Construct is an Association and identifier a String" do
|
|
56
|
+
previous_type = @assoc.type
|
|
57
|
+
@assoc.type = "mother-infant"
|
|
58
|
+
@assoc.type.should_not == previous_type
|
|
59
|
+
@assoc.type.should == @tm.get("mother-infant")
|
|
60
|
+
end
|
|
61
|
+
it "should set the type if the Construct is an Association and identifier a Locator" do
|
|
62
|
+
previous_type = @assoc.type
|
|
63
|
+
@assoc.type = @tm.create_locator("mother-infant")
|
|
64
|
+
@assoc.type.should_not == previous_type
|
|
65
|
+
@assoc.type.should == @tm.get("mother-infant")
|
|
66
|
+
end
|
|
67
|
+
it "should set the type if the Construct is an Association and identifier a Topic" do
|
|
68
|
+
previous_type = @assoc.type
|
|
69
|
+
@assoc.type = @tm.get!("mother-infant")
|
|
70
|
+
@assoc.type.should_not == previous_type
|
|
71
|
+
@assoc.type.should == @tm.get("mother-infant")
|
|
72
|
+
end
|
|
73
|
+
it "should set the type if the Construct is a Name and identifier a String" do
|
|
74
|
+
previous_type = @name.type
|
|
75
|
+
@name.type = "infant"
|
|
76
|
+
@name.type.should_not == previous_type
|
|
77
|
+
@name.type.should == @tm.get("infant")
|
|
78
|
+
end
|
|
79
|
+
it "should set the type if the Construct is a Name and identifier a Locator" do
|
|
80
|
+
previous_type = @name.type
|
|
81
|
+
@name.type = @tm.create_locator("infant")
|
|
82
|
+
@name.type.should_not == previous_type
|
|
83
|
+
@name.type.should == @tm.get("infant")
|
|
84
|
+
end
|
|
85
|
+
it "should set the type if the Construct is a Name and identifier a Topic" do
|
|
86
|
+
previous_type = @name.type
|
|
87
|
+
@name.type = @tm.get!("infant")
|
|
88
|
+
@name.type.should_not == previous_type
|
|
89
|
+
@name.type.should == @tm.get("infant")
|
|
90
|
+
end
|
|
91
|
+
it "should set the type if the Construct is an Occurrence and identifier a String" do
|
|
92
|
+
previous_type = @occ.type
|
|
93
|
+
@occ.type = "size"
|
|
94
|
+
@occ.type.should_not == previous_type
|
|
95
|
+
@occ.type.should == @tm.get("size")
|
|
96
|
+
end
|
|
97
|
+
it "should set the type if the Construct is an Occurrence and identifier a Locator" do
|
|
98
|
+
previous_type = @occ.type
|
|
99
|
+
@occ.type = @tm.create_locator("size")
|
|
100
|
+
@occ.type.should_not == previous_type
|
|
101
|
+
@occ.type.should == @tm.get("size")
|
|
102
|
+
end
|
|
103
|
+
it "should set the type if the Construct is an Occurrence and identifier a Topic" do
|
|
104
|
+
previous_type = @occ.type
|
|
105
|
+
@occ.type = @tm.get!("size")
|
|
106
|
+
@occ.type.should_not == previous_type
|
|
107
|
+
@occ.type.should == @tm.get("size")
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
5
|
+
|
|
6
|
+
module RTM::Variant
|
|
7
|
+
|
|
8
|
+
describe self do
|
|
9
|
+
before(:each) do
|
|
10
|
+
@tm = get_used_tm_sys_tm
|
|
11
|
+
end
|
|
12
|
+
after(:each) do
|
|
13
|
+
@tm.close
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "#parent" do
|
|
17
|
+
it "should give back Name to which the Variant belongs" do
|
|
18
|
+
topic = @tm.create_topic_by("sub:ident")
|
|
19
|
+
topic.should be_a_kind_of RTM::Topic
|
|
20
|
+
@tm.get("sub:ident").should be_a_kind_of RTM::Topic
|
|
21
|
+
|
|
22
|
+
scope = @tm.create_topic_by("englisch")
|
|
23
|
+
scope.should be_a_kind_of RTM::Topic
|
|
24
|
+
@tm.get("englisch").should be_a_kind_of RTM::Topic
|
|
25
|
+
|
|
26
|
+
testname = topic.create_name("Deutschland")
|
|
27
|
+
testname.should be_a_kind_of RTM::Name
|
|
28
|
+
testvariant = testname.create_variant("Germany", [scope])
|
|
29
|
+
testvariant.should be_a_kind_of RTM::Variant
|
|
30
|
+
testvariant.parent.should == testname
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "#remove" do
|
|
35
|
+
before(:each) do
|
|
36
|
+
@topic1 = @tm.get!("topic1")
|
|
37
|
+
@name1 = @topic1.create_name("firstname","Hans")
|
|
38
|
+
@name2 = @topic1.create_name("lastname","Meier")
|
|
39
|
+
@variant1 = @name1.create_variant("Hansi",["alias"])
|
|
40
|
+
@variant2 = @name1.create_variant("Bubi",["endearment"])
|
|
41
|
+
end
|
|
42
|
+
it "should remove this Variant from the container (Name)" do
|
|
43
|
+
@name1.should have(2).children
|
|
44
|
+
@variant1.remove
|
|
45
|
+
@name1.should have(1).children
|
|
46
|
+
@variant2.remove
|
|
47
|
+
@name1.should have(0).children
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end # of describe self
|
|
52
|
+
end # of module
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
5
|
+
|
|
6
|
+
if RUBY_PLATFORM =~ /java/
|
|
7
|
+
module Java::JavaLang::Iterable
|
|
8
|
+
describe self do
|
|
9
|
+
before(:each) do
|
|
10
|
+
@tm = get_used_tm_sys_tm
|
|
11
|
+
end
|
|
12
|
+
it "should respond to :first" do
|
|
13
|
+
java.util.HashSet.new.should respond_to(:first)
|
|
14
|
+
end
|
|
15
|
+
describe "#first" do
|
|
16
|
+
it "should give back one containee of the Iterable" do
|
|
17
|
+
topic = @tm.get!("Person")
|
|
18
|
+
names = [topic.create_name("Name1"), topic.create_name("Name2"), topic.create_name("Name3")]
|
|
19
|
+
topic.names.should be_a_kind_of Enumerable
|
|
20
|
+
lambda{topic.names.first}.should_not raise_error
|
|
21
|
+
names.should include topic.names.first
|
|
22
|
+
end
|
|
23
|
+
it "should give back nil if the Set is empty" do
|
|
24
|
+
topic = @tm.get!("Person")
|
|
25
|
+
set = topic.occurrences
|
|
26
|
+
set.should be_empty
|
|
27
|
+
set.should be_a_kind_of(Enumerable)
|
|
28
|
+
set.first.should be_nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end # of describe self
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
5
|
+
|
|
6
|
+
module RTM
|
|
7
|
+
class TMAPI
|
|
8
|
+
describe self do
|
|
9
|
+
|
|
10
|
+
describe "#create" do
|
|
11
|
+
before(:all) do
|
|
12
|
+
@connection = RTM.connect(:implementation => implementation_for_spec)
|
|
13
|
+
end
|
|
14
|
+
it "should create a topic map given a base locator (String)" do
|
|
15
|
+
tm = @connection.create("a:b")
|
|
16
|
+
tm.should be_a_kind_of RTM::TopicMap
|
|
17
|
+
end
|
|
18
|
+
it "should create a topic map given a base locator (Locator)" do
|
|
19
|
+
loc = @connection.create_locator("a:b")
|
|
20
|
+
tm = @connection.create(loc)
|
|
21
|
+
tm.should be_a_kind_of RTM::TopicMap
|
|
22
|
+
end
|
|
23
|
+
it "should be allowed to call create_topic_map also" do
|
|
24
|
+
@connection.method(:create).should == @connection.method(:create_topic_map)
|
|
25
|
+
end
|
|
26
|
+
it "should be allowed to call createTopicMap also" do
|
|
27
|
+
@connection.method(:create).should == @connection.method(:createTopicMap)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "#create_locator" do
|
|
32
|
+
before(:all) do
|
|
33
|
+
@connection = RTM.connect(:implementation => implementation_for_spec)
|
|
34
|
+
end
|
|
35
|
+
it "should create a locator given a String reference" do
|
|
36
|
+
locator = @connection.create_locator("a:b")
|
|
37
|
+
locator.should be_a_kind_of RTM::Locator
|
|
38
|
+
locator.reference.should == "a:b"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
5
|
+
#
|
|
6
|
+
# if implementation_for_spec == :sesametm
|
|
7
|
+
#
|
|
8
|
+
# module RTM::TopicMap
|
|
9
|
+
# describe self do
|
|
10
|
+
# before(:each) do
|
|
11
|
+
# @tm = get_used_tm_sys_tm
|
|
12
|
+
# end
|
|
13
|
+
# after(:each) do
|
|
14
|
+
# @tm.close
|
|
15
|
+
# end
|
|
16
|
+
# describe "#input" do
|
|
17
|
+
# it "should be called" do
|
|
18
|
+
# @tm.should respond_to(:input)
|
|
19
|
+
# @tm.input("")
|
|
20
|
+
# end
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# end
|
data/spec/rtm_spec.rb
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
5
|
+
|
|
6
|
+
describe RTM do
|
|
7
|
+
# describe "#[]" do
|
|
8
|
+
# it "should be empty if no TopicMapSystems are created" do
|
|
9
|
+
# RTM[].should be_empty
|
|
10
|
+
# end Fails since already reated tms are found
|
|
11
|
+
# end
|
|
12
|
+
describe "#connect" do
|
|
13
|
+
it "should have a TMAPI engine as default backend" do
|
|
14
|
+
tms_tmapi = RTM.connect(:implementation => implementation_for_spec)
|
|
15
|
+
tms_tmapi.should be_a_kind_of RTM::TopicMapSystem
|
|
16
|
+
tms_tmapi.should be_a_kind_of RTM::JavaTMAPI
|
|
17
|
+
tms_tmapi.should be_a_kind_of org.tmapi.core.TopicMapSystem
|
|
18
|
+
end
|
|
19
|
+
it "should allow multiple backends of the same kind in case of TMAPI" do
|
|
20
|
+
if RTM[implementation_for_spec]
|
|
21
|
+
number_of_already_existing_connections = RTM[implementation_for_spec].length
|
|
22
|
+
else
|
|
23
|
+
number_of_already_existing_connections = 0
|
|
24
|
+
end
|
|
25
|
+
tms1 = RTM.connect(:implementation => implementation_for_spec)
|
|
26
|
+
tms2 = RTM.connect(:implementation => implementation_for_spec)
|
|
27
|
+
tms1.should_not == tms2
|
|
28
|
+
number_of_already_existing_connections.should == RTM[implementation_for_spec].length - 2
|
|
29
|
+
end
|
|
30
|
+
# if ar_available?
|
|
31
|
+
# it "should allow only one classic RTM Active Record connection" do
|
|
32
|
+
# pending "extract active record specs to be run only by activerecord"
|
|
33
|
+
# false.should be true # early exit
|
|
34
|
+
# tmsar1 = RTM.connect :implementation => :activerecord
|
|
35
|
+
# RTM[:activerecord].size.should == 1
|
|
36
|
+
# tmsar2 = RTM.connect :implementation => :activerecord
|
|
37
|
+
# pending
|
|
38
|
+
# RTM[:activerecord].size.should == 1
|
|
39
|
+
# tmsar2.should == tmsar1
|
|
40
|
+
# tmsar1.should be_a_kind_of RTM::TopicMapSystem
|
|
41
|
+
# tmsar1.should_not be_a_kind_of RTM::JavaTMAPI
|
|
42
|
+
# tmsar1.should_not be_a_kind_of org.tmapi.core.TopicMapSystem
|
|
43
|
+
# end
|
|
44
|
+
# end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "#connections" do
|
|
48
|
+
it "should give back a Hash containing all connections if some exist" do
|
|
49
|
+
connections = RTM.connections
|
|
50
|
+
connections.should be_a_kind_of Hash
|
|
51
|
+
#TODO how to test this?
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "#[]" do
|
|
56
|
+
# TODO
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# if ar_available?
|
|
62
|
+
# describe RTM::AR do
|
|
63
|
+
# require File.dirname(__FILE__) + '/../test/base_unit_test.rb'
|
|
64
|
+
# require 'test/unit/ui/console/testrunner'
|
|
65
|
+
#
|
|
66
|
+
# it "should run the UNIT base_test without errors" do
|
|
67
|
+
# test_connect = BaseTest.new "test_connect"
|
|
68
|
+
# res1 = Test::Unit::UI::Console::TestRunner.run test_connect
|
|
69
|
+
# res1.error_count.should == 0
|
|
70
|
+
# res1.failure_count.should == 0
|
|
71
|
+
# test_sugar_hash_access = BaseTest.new "test_sugar_hash_access"
|
|
72
|
+
# res2 = Test::Unit::UI::Console::TestRunner.run test_sugar_hash_access
|
|
73
|
+
# res2.error_count.should == 0
|
|
74
|
+
# res2.failure_count.should == 0
|
|
75
|
+
# end
|
|
76
|
+
# end
|
|
77
|
+
# end
|
|
78
|
+
|
|
79
|
+
# describe "TMAPI with old base_test" do
|
|
80
|
+
# require "spec/old_base_unit_test_tmapi.rb"
|
|
81
|
+
# require 'test/unit/ui/console/testrunner'
|
|
82
|
+
# it "should run the UNIT base_test without errors for the TMAPI, too" do
|
|
83
|
+
# pending "first is not supported for Java::GnuTrove::THashSet" do
|
|
84
|
+
# test_connect = BaseTest.new "test_connect"
|
|
85
|
+
# res1 = Test::Unit::UI::Console::TestRunner.run test_connect
|
|
86
|
+
# res1.error_count.should == 0
|
|
87
|
+
# res1.failure_count.should == 0
|
|
88
|
+
# test_sugar_hash_access = BaseTest.new "test_sugar_hash_access"
|
|
89
|
+
# res2 = Test::Unit::UI::Console::TestRunner.run test_sugar_hash_access
|
|
90
|
+
# res2.error_count.should == 0
|
|
91
|
+
# res2.failure_count.should == 0
|
|
92
|
+
# end
|
|
93
|
+
# end
|
|
94
|
+
# end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
|
|
4
|
+
$: << File.join(File.dirname(__FILE__), "/../lib")
|
|
5
|
+
|
|
6
|
+
require 'spec'
|
|
7
|
+
require 'rtm'
|
|
8
|
+
|
|
9
|
+
def implementation_for_spec
|
|
10
|
+
engine = ENV['RTM_IMPLEMENTATION'] && ENV['RTM_IMPLEMENTATION'].to_sym || :ontopia # if env is nil, the "normal progress will go on" # TODO: remove ontopia, as it should be chosen by connect by default
|
|
11
|
+
end
|
|
12
|
+
def get_used_tm_sys
|
|
13
|
+
RTM.connect(:implementation => implementation_for_spec)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_used_tm_sys_tm
|
|
17
|
+
@basis = get_used_tm_sys
|
|
18
|
+
@basis.create("http://www.topicmapslab.de/")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ar_available?
|
|
22
|
+
!Gem.source_index.find_name('activerecord').empty?
|
|
23
|
+
end
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
|
|
2
|
+
# License: Apache License, Version 2.0
|
|
3
|
+
#
|
|
4
|
+
# Some basic tests for the Active Reckord Backend, more to be added into the RSpecs:)
|
|
5
|
+
|
|
6
|
+
$: << File.join(File.dirname(__FILE__), "/../lib")
|
|
7
|
+
|
|
8
|
+
require 'rubygems'
|
|
9
|
+
require 'test/unit'
|
|
10
|
+
require 'rtm'
|
|
11
|
+
|
|
12
|
+
class BaseTest < Test::Unit::TestCase
|
|
13
|
+
# There are a bunch of global assertions in here so it cannot be parallelized
|
|
14
|
+
# with other tests, that's why it is all in one. What can we do about that?
|
|
15
|
+
def test_connect
|
|
16
|
+
base = RTM.connect(:implementation => :activerecord)
|
|
17
|
+
assert base, "Connection to memory backend failed"
|
|
18
|
+
assert_equal 0, base[].size, "There should be no topic maps in a newly created environment."
|
|
19
|
+
base_locator = "http://rtm.rubyforge.org/tests/base_test"
|
|
20
|
+
m = base.create base_locator
|
|
21
|
+
assert_equal 1, base[].size, "After creation of a topic map, there should be one."
|
|
22
|
+
assert_kind_of RTM::TopicMap, m, "RTM.create should create something which includes RTM::TopicMap"
|
|
23
|
+
assert_equal base_locator, m.base_locator, "The base_locator should be initialized properly."
|
|
24
|
+
assert m.respond_to?(:topics), "The topic map should respond to :topics"
|
|
25
|
+
assert m.respond_to?(:associations), "The topic map should respond to :topics"
|
|
26
|
+
assert_equal 0, m.topics.size, "A new topic map should have no topics."
|
|
27
|
+
assert_equal 0, m.associations.size, "A new topic map should have no associations."
|
|
28
|
+
assert m.reifier.nil?, "A new topic map should not be reified yet."
|
|
29
|
+
assert_equal 0, m.item_identifiers.size, "A new topic map should "
|
|
30
|
+
# assigning a reifier
|
|
31
|
+
m.reifier = "a_topic_which_reifies_the_topic_map"
|
|
32
|
+
assert_equal 1, m.topics.size, "A topic should have been created to reify the topic map."
|
|
33
|
+
assert_kind_of RTM::Topic, m.reifier, "A reifier should be a Topic."
|
|
34
|
+
assert_equal m, m.topics.first.reified, "The only topic out there should reify the map (not generally, but here)."
|
|
35
|
+
assert_equal m.base_locator, m.topics.first.reified.base_locator, "The only topic out there should reify the map. Check base locator."
|
|
36
|
+
assert_equal m.__getobj__, m.topics.first.reified.__getobj__, "The only topic out there should reify the map. Look inside."
|
|
37
|
+
t = m.create_topic
|
|
38
|
+
assert_equal 2, m.topics.size, "There should be 2 topics after creating the second one."
|
|
39
|
+
assert_kind_of RTM::Topic, t, "The created topic should really be one."
|
|
40
|
+
assert_kind_of RTM::TopicMap, m
|
|
41
|
+
assert_equal m, t.parent, "The Topic Map should be the parent of our new topic."
|
|
42
|
+
# The next tests may look a bit unneeded, but they at least also test the properties be available and initialized somehow.
|
|
43
|
+
assert_equal 0, t.item_identifiers.size, "New topic has no item_identifiers."
|
|
44
|
+
|
|
45
|
+
assert_equal 0, t.subject_identifiers.size, "New topic has no subject_identifiers."
|
|
46
|
+
assert_equal 0, t.subject_locators.size, "New topic has no subject_locators."
|
|
47
|
+
assert !t.valid?, "Without item identifiers nor subject identifiers the topic must not be valid."
|
|
48
|
+
assert_equal 0, t.names.size, "New topic has no names."
|
|
49
|
+
assert_equal 0, t.occurrences.size, "New topic has no occurrences."
|
|
50
|
+
assert_equal 0, t.roles_played.size, "New topic plays no roles."
|
|
51
|
+
assert_nil t.reified, "New topic does not reify a statement."
|
|
52
|
+
n = t.create_name "bla"
|
|
53
|
+
assert_equal 1, t.names.size, "The topic should have one name now."
|
|
54
|
+
assert_kind_of RTM::Name, n
|
|
55
|
+
assert_kind_of RTM::Topic, n.parent, "You won't believe but this should be a Topic and right now it not..."
|
|
56
|
+
# TODO the following assertion does not work - it crashes pp... but why?
|
|
57
|
+
# assert_equal t, n.parent, "The parent of the name should be the topic on which it was created."
|
|
58
|
+
assert_equal 0, n.item_identifiers.size, "I wonder if someone will ever read that."
|
|
59
|
+
assert_kind_of RTM::Name, n, "The topic name shoud be a TopicName... makes sence, he?"
|
|
60
|
+
assert_equal 0, n.variants.size, "According to Lars Heuer and Robert Barta that should always be 0, not only now."
|
|
61
|
+
#assert_nil n.value, "We haven't set a value yet, where should it come from."
|
|
62
|
+
assert_equal "bla", n.value
|
|
63
|
+
#assert_nil n.type, "I am really tired of writing this stuff."
|
|
64
|
+
assert_equal m.get(RTM::PSI[:name_type]), n.type
|
|
65
|
+
assert_equal 0, n.scope.size, "Should I really be more serious with this stuff?"
|
|
66
|
+
assert_nil n.reifier, "No, I guess not... who could ever stand that."
|
|
67
|
+
v = n.create_variant "v1", ["v1-scope"]
|
|
68
|
+
assert_equal 1, n.variants.size, "The topic should have one name now."
|
|
69
|
+
assert_kind_of RTM::Variant, v
|
|
70
|
+
assert_kind_of RTM::Name, v.parent, "You won't believe but this should be a Topic and right now it not..."
|
|
71
|
+
# TODO the following assertion does not work - it crashes pp... but why?
|
|
72
|
+
# assert_equal t, v.parent, "The parent of the name should be the topic on which it was created."
|
|
73
|
+
assert_equal 0, v.item_identifiers.size, "I wonder if someone will ever read that."
|
|
74
|
+
assert_kind_of RTM::Variant, v, "The variant should be a Variant... makes sence, he?"
|
|
75
|
+
#assert_nil v.value, "We haven't set a value yet, where should it come from."
|
|
76
|
+
assert_equal "v1", v.value
|
|
77
|
+
|
|
78
|
+
assert_nil v.datatype, "No datatype set, yet."
|
|
79
|
+
|
|
80
|
+
assert_equal 1, v.scope.size, "Should I really be more serious with this stuff?"
|
|
81
|
+
assert_nil v.reifier, "No, I guess not... who could ever stand that."
|
|
82
|
+
#assert !v.valid?
|
|
83
|
+
o = t.create_occurrence "otype", "val"
|
|
84
|
+
assert_equal 1, t.occurrences.size, "The topic should have one name now."
|
|
85
|
+
assert_kind_of RTM::Occurrence, o
|
|
86
|
+
assert_kind_of RTM::Topic, o.parent, "You won't believe but this should be a Topic and right now it not..."
|
|
87
|
+
# TODO the following assertion does not work - it crashes pp... but why?
|
|
88
|
+
# assert_equal t, o.parent, "The parent of the name should be the topic on which it was created."
|
|
89
|
+
assert_equal 0, o.item_identifiers.size, "I wonder if someone will ever read that."
|
|
90
|
+
assert_kind_of RTM::Occurrence, o, "The occurrence shoud be a Occurrence... makes sence, he?"
|
|
91
|
+
#assert_nil o.value, "We haven't set a value yet, where should it come from."
|
|
92
|
+
#assert_nil o.type, "I am really tired of writing this stuff."
|
|
93
|
+
assert_nil o.datatype
|
|
94
|
+
assert_equal 0, n.scope.size, "Should I really be more serious with this stuff?"
|
|
95
|
+
assert_nil n.reifier, "No, I guess not... who could ever stand that."
|
|
96
|
+
a = m.create_association "atype"
|
|
97
|
+
#assert_nil a.type
|
|
98
|
+
assert_equal 0, a.roles.size
|
|
99
|
+
assert_kind_of RTM::Association, a
|
|
100
|
+
assert_kind_of RTM::TopicMap, a.parent
|
|
101
|
+
assert_equal m, a.parent
|
|
102
|
+
assert_equal 0, a.scope.size
|
|
103
|
+
#assert !a.valid?
|
|
104
|
+
#r1 = a.create_role
|
|
105
|
+
#assert_nil r1.type
|
|
106
|
+
#assert_nil r1.player
|
|
107
|
+
|
|
108
|
+
#assert_kind_of RTM::Role, r1
|
|
109
|
+
#assert_kind_of RTM::Association, r1.parent
|
|
110
|
+
#assert_equal 1, a.roles.size
|
|
111
|
+
t.item_identifiers << "nr1"
|
|
112
|
+
assert_equal 1, t.item_identifiers.size
|
|
113
|
+
fii = t.item_identifiers.first
|
|
114
|
+
assert_equal "http://rtm.rubyforge.org/tests/base_test#nr1", fii.to_s
|
|
115
|
+
assert_kind_of RTM::Locator, fii
|
|
116
|
+
assert_kind_of RTM::ItemIdentifier, fii #needed?
|
|
117
|
+
# TODO: invalidate cache/reload value somehow
|
|
118
|
+
#assert_equal 1, m.item_identifiers.size, "If you see this, it is probably because TopicMap#item_identifiers.size is cached which is wrong in this case."
|
|
119
|
+
|
|
120
|
+
t.subject_identifiers << "si1"
|
|
121
|
+
fsi = t.subject_identifiers.first
|
|
122
|
+
assert_equal "si1", fsi.to_s
|
|
123
|
+
assert_kind_of RTM::Locator, fsi
|
|
124
|
+
assert_kind_of RTM::SubjectIdentifier, fsi #needed?
|
|
125
|
+
|
|
126
|
+
t.subject_locators << "sl1"
|
|
127
|
+
fsl = t.subject_locators.first
|
|
128
|
+
assert_equal "sl1", fsl.to_s
|
|
129
|
+
assert_kind_of RTM::Locator, fsl
|
|
130
|
+
assert_kind_of RTM::SubjectLocator, fsl #needed?
|
|
131
|
+
|
|
132
|
+
# to be in associations_test later:
|
|
133
|
+
tm = base.create "urn:/associations_test"
|
|
134
|
+
a1 = tm.create_association "urn:/assoc_type_with_absolute_uri"
|
|
135
|
+
assert_not_nil a1.type
|
|
136
|
+
assert_equal a1.type, tm.get("urn:/assoc_type_with_absolute_uri")
|
|
137
|
+
a2 = tm.create_association "urn:/assoc_type_with_absolute_uri_using_hash"
|
|
138
|
+
assert_not_nil a2.type
|
|
139
|
+
assert_equal a2.type, tm.get("urn:/assoc_type_with_absolute_uri_using_hash")
|
|
140
|
+
|
|
141
|
+
a3 = tm.create_association "relative_type"
|
|
142
|
+
assert_not_nil a3.type
|
|
143
|
+
assert_equal a3.type, tm.get("relative_type")
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
def test_sugar_hash_access
|
|
147
|
+
base = RTM.connect(:implementation => :activerecord)
|
|
148
|
+
tm = base.create "a:b"
|
|
149
|
+
bla = tm.get!("bla")
|
|
150
|
+
bla["-name"] = "test"
|
|
151
|
+
n = bla["-name"].first
|
|
152
|
+
assert_equal "test", n.value
|
|
153
|
+
blau = tm.get!("blau")
|
|
154
|
+
blau["hex"] = "#0000ff"
|
|
155
|
+
assert_equal "#0000ff", blau["hex"].first.value
|
|
156
|
+
blau["hex @short"] = "#00f"
|
|
157
|
+
assert_equal "#0000ff", blau["hex"].first.value
|
|
158
|
+
assert_equal "#00f", blau["hex @short"].first.value
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
end
|