rtm 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/README +38 -3
  2. data/lib/rtm.rb +25 -47
  3. data/lib/rtm/axes.rb +7 -4
  4. data/lib/rtm/axes/association.rb +1 -1
  5. data/lib/rtm/axes/associations.rb +1 -1
  6. data/lib/rtm/axes/characteristic.rb +1 -1
  7. data/lib/rtm/axes/characteristics.rb +1 -1
  8. data/lib/rtm/axes/topic.rb +3 -3
  9. data/lib/rtm/axes/topics.rb +3 -3
  10. data/lib/rtm/engine.rb +48 -5
  11. data/lib/rtm/extensions.rb +58 -8
  12. data/lib/rtm/io.rb +2 -1
  13. data/lib/rtm/io/tmapix_from.rb +155 -0
  14. data/lib/rtm/io/tmapix_to.rb +223 -0
  15. data/lib/rtm/io/to_hash.rb +79 -41
  16. data/lib/rtm/io/to_jtm.rb +1 -1
  17. data/lib/rtm/io/to_rdf.rb +20 -5
  18. data/lib/rtm/io/to_string.rb +13 -2
  19. data/lib/rtm/io/to_yaml.rb +39 -11
  20. data/lib/rtm/navigation.rb +1 -15
  21. data/lib/rtm/navigation/association/players.rb +1 -1
  22. data/lib/rtm/navigation/name/characteristics.rb +1 -1
  23. data/lib/rtm/navigation/occurrence/characteristics.rb +1 -1
  24. data/lib/rtm/navigation/topic/characteristics.rb +1 -1
  25. data/lib/rtm/navigation/topic/players.rb +1 -1
  26. data/lib/rtm/navigation/topic/supertypes.rb +21 -17
  27. data/lib/rtm/navigation/topic/traverse.rb +1 -1
  28. data/lib/rtm/navigation/topic/types.rb +6 -4
  29. data/lib/rtm/psi.rb +6 -0
  30. data/lib/rtm/sugar.rb +42 -29
  31. data/lib/rtm/sugar/association/hash_access.rb +3 -3
  32. data/lib/rtm/sugar/occurrence/dynamic_value.rb +39 -56
  33. data/lib/rtm/sugar/occurrence/external.rb +53 -0
  34. data/lib/rtm/sugar/reifiable/reifier.rb +21 -0
  35. data/lib/rtm/sugar/role/counterparts.rb +12 -6
  36. data/lib/rtm/sugar/topic/best_name.rb +74 -0
  37. data/lib/rtm/sugar/topic/characteristics.rb +10 -10
  38. data/lib/rtm/sugar/topic/counterparts.rb +131 -119
  39. data/lib/rtm/sugar/topic/scoped.rb +102 -53
  40. data/lib/rtm/sugar/topic/topic_ref.rb +63 -12
  41. data/lib/rtm/sugar/topic/typed.rb +50 -2
  42. data/lib/rtm/sugar/topic_map/query_cache.rb +66 -0
  43. data/lib/rtm/sugar/topic_map/themes.rb +53 -0
  44. data/lib/rtm/sugar/typed/types.rb +1 -1
  45. data/lib/rtm/validation.rb +2 -2
  46. data/lib/rtm/version.rb +18 -6
  47. data/spec/rtm/axes/string_spec.rb +7 -7
  48. data/spec/rtm/axes/strings_spec.rb +10 -10
  49. data/spec/rtm/io/tmapix_from_spec.rb +76 -0
  50. data/spec/rtm/io/tmapix_to_spec.rb +159 -0
  51. data/spec/rtm/io/to_hash_spec.rb +90 -0
  52. data/spec/rtm/io/to_rdf_spec.rb +37 -0
  53. data/spec/rtm/io/to_string_spec.rb +122 -0
  54. data/spec/rtm/io/to_yaml_spec.rb +89 -0
  55. data/spec/rtm/sugar/occurrence/dynamic_value_spec.rb +156 -1
  56. data/spec/rtm/sugar/occurrence/external_spec.rb +129 -0
  57. data/spec/rtm/sugar/reifiable/reifier_spec.rb +41 -0
  58. data/spec/rtm/sugar/role/counterparts_spec.rb +174 -172
  59. data/spec/rtm/sugar/topic/best_name_spec.rb +25 -0
  60. data/spec/rtm/sugar/topic/characteristics_spec.rb +20 -5
  61. data/spec/rtm/sugar/topic/counterparts_spec.rb +41 -1
  62. data/spec/rtm/sugar/topic/hash_access_spec.rb +1 -1
  63. data/spec/rtm/sugar/topic/scoped_spec.rb +178 -114
  64. data/spec/rtm/sugar/topic/topic_ref_spec.rb +10 -10
  65. data/spec/rtm/sugar/topic/typed_spec.rb +196 -134
  66. data/spec/rtm/sugar/topic_map/themes_spec.rb +67 -0
  67. data/spec/rtm/sugar/typed/types_spec.rb +1 -1
  68. data/spec/rtm/tmapi/core/association_spec.rb +2 -2
  69. data/spec/rtm/tmapi/core/datatype_aware_spec.rb +236 -0
  70. data/spec/rtm/tmapi/core/name_spec.rb +186 -1
  71. data/spec/rtm/tmapi/core/occurrence_spec.rb +24 -67
  72. data/spec/rtm/tmapi/core/reifiable_spec.rb +2 -2
  73. data/spec/rtm/tmapi/core/scoped_spec.rb +40 -2
  74. data/spec/rtm/tmapi/core/topic_map_spec.rb +98 -30
  75. data/spec/rtm/tmapi/core/topic_spec.rb +558 -82
  76. data/spec/rtm/tmapi/core/variant_spec.rb +3 -3
  77. data/spec/rtm_spec.rb +0 -1
  78. data/spec/spec_helper.rb +7 -2
  79. data/test/javalibs/junit-4.5.jar +0 -0
  80. data/test/javalibs/tmapi-2.0-tests.jar +0 -0
  81. data/test/tmapi_tests.rb +25 -0
  82. metadata +66 -11
  83. data/lib/rtm/io/ontopia_io.rb +0 -25
  84. data/lib/rtm/io/tmapix.rb +0 -234
  85. data/lib/rtm/sugar/occurrence/externalize.rb +0 -31
  86. data/spec/rtm/io/tmapix_spec.rb +0 -85
  87. data/test/base_unit_test.rb +0 -161
  88. data/test/base_unit_test_tmapi.rb +0 -165
@@ -0,0 +1,67 @@
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::Sugar::TopicMap
7
+ module Themes
8
+ describe self do
9
+ before(:each) do
10
+ @tm = get_used_tm_sys_tm
11
+ @theme0 = @tm.get!("negative")
12
+ @theme1 = @tm.get!("german")
13
+ @theme2 = @tm.get!("english")
14
+ @theme3 = @tm.get!("2009")
15
+ @theme4 = @tm.get!("sorbian")
16
+ @test_theme = @tm.get!("dummy")
17
+ @leipzig = @tm.get!("leipzig")
18
+ @germany = @tm.get!("germany")
19
+ @name1 = @leipzig.create_name("Leipzig",[@theme1,@theme2])
20
+ @name2 = @germany.create_name("Germany",[@theme2,@test_theme])
21
+ @name3 = @germany.create_name("Deutschland",[@theme1])
22
+ @name4 = @leipzig.create_name("Leipzisch")
23
+ @name5 = @leipzig.create_name("Lipsk",[@theme4])
24
+ @occ1 = @leipzig.create_occurrence("inhabitants","500000", :scope => [@theme3])
25
+ @occ2 = @germany.create_occurrence("states","16", :scope => [@test_theme])
26
+ @occ3 = @leipzig.create_occurrence("state","Sachsen")
27
+ @tm.create_association("assoc_dummy")
28
+ @assoc = @tm.create_association("contained", [@test_theme])
29
+ @role1 = @assoc.create_role("containee",@leipzig)
30
+ @role2 = @assoc.create_role("container",@germany)
31
+ @variant = @name1.create_variant("LE",[@test_theme])
32
+ end
33
+ after(:each) do
34
+ @tm.close
35
+ end
36
+
37
+ describe "#association_themes" do
38
+ it "return all topics that are used in the scope of Associations" do
39
+ @tm.should have(1).association_themes
40
+ @tm.association_themes.should include(@test_theme)
41
+ end
42
+ end
43
+
44
+ describe "#name_themes" do
45
+ it "return all topics that are used in the scope of Names" do
46
+ @tm.should have(4).name_themes
47
+ @tm.name_themes.should include(@theme1, @theme2, @test_theme, @theme4)
48
+ end
49
+ end
50
+
51
+ describe "#occurrence_themes" do
52
+ it "return all topics that are used in the scope of Occurrences" do
53
+ @tm.should have(2).occurrence_themes
54
+ @tm.occurrence_themes.should include(@theme3, @test_theme)
55
+ end
56
+ end
57
+
58
+ describe "#variant_themes" do
59
+ it "return all topics that are used in the scope of Variants" do
60
+ @tm.should have(3).variant_themes
61
+ @tm.variant_themes.should include(@theme1, @theme2, @test_theme)
62
+ end
63
+ end
64
+
65
+ end # of describe self
66
+ end # of module
67
+ end # of module
@@ -3,7 +3,7 @@
3
3
 
4
4
  require File.dirname(__FILE__) + '/../../../spec_helper'
5
5
 
6
- module Sugar::Typed::Types
6
+ module RTM::Sugar::Typed::Types
7
7
  describe self do
8
8
  before(:each) do
9
9
  @tm = get_used_tm_sys_tm
@@ -132,8 +132,8 @@ module RTM::Association
132
132
  @asso.roles(t_type2).size.should == 1
133
133
  @asso.roles(t_type2).should include(role3)
134
134
 
135
- other_asso.roles(t_type3.topic_references_as_locators.first).size.should == 1
136
- other_asso.roles(t_type3.topic_references_as_locators.first).should include(role4)
135
+ other_asso.roles(t_type3.references_as_locators.first).size.should == 1
136
+ other_asso.roles(t_type3.references_as_locators.first).should include(role4)
137
137
  end
138
138
  end
139
139
  end # of describe self
@@ -0,0 +1,236 @@
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::DatatypeAware
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 "#value=" do
17
+ before(:each) do
18
+ @topic = @tm.get!("House")
19
+ end
20
+ describe "for Occurrence" do
21
+ it "should set the datatype to xsd:anyURI if argument datatype is xsd:anyURI" do
22
+ occ = @topic.create_occurrence("street number", "1")
23
+ occ.datatype.to_external_form.should == RTM::PSI[:String]
24
+ occ.value = "http://www.example.org/House", RTM::PSI[:IRI]
25
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
26
+ occ.value.should == "http://www.example.org/House"
27
+ end
28
+ it "should set the datatype to xsd:anyURI if argument datatype is xsd:anyURI and resolve the value using the base iri" do
29
+ occ = @topic.create_occurrence("street number", "1")
30
+ occ.datatype.to_external_form.should == RTM::PSI[:String]
31
+ occ.value = "House", RTM::PSI[:IRI]
32
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
33
+ occ.value.should == "http://www.topicmapslab.de/House"
34
+ end
35
+ it "should set the datatype to xsd:anyURI also if it was Integer before" do
36
+ occ = @topic.create_occurrence("street number", "1", :datatype => RTM::PSI[:Integer])
37
+ occ.value.should == "1"
38
+ occ.datatype.reference.should == RTM::PSI[:Integer]
39
+ occ.value = 1, RTM::PSI[:IRI]
40
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
41
+ occ.value.should == "http://www.topicmapslab.de/1"
42
+ end
43
+ it "should set an IRI value and the datatype to xsd:AnyURI if argument is a Locator" do
44
+ occ = @topic.create_occurrence("street number", "1")
45
+ occ.datatype.to_external_form.should == RTM::PSI[:String]
46
+ occ.value = @tm.create_locator("http://www.example.org/House")
47
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
48
+ occ.value.should == "http://www.example.org/House" # since we dont know if not */ as in case of ontopia
49
+ end
50
+ it "should set a String value and the datatype to xsd:String if argument is a String" do
51
+ occ = @topic.create_occurrence("Webseite", @tm.create_locator("http://www.example.org/House"))
52
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
53
+ occ.value=("1")
54
+ occ.datatype.to_external_form.should == RTM::PSI[:String]
55
+ occ.value.should == "1"
56
+ end
57
+ it "should set a Float value and the datatype to xsd:Float if arguement is a Float" do
58
+ occ = @topic.create_occurrence("Webseite", @tm.create_locator("http://www.example.org/House"))
59
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
60
+ 0.5.class.should == Float
61
+ occ.value = 0.5
62
+ occ.datatype.to_external_form.should == RTM::PSI[:Float]
63
+ occ.value.should == "0.5"
64
+ end
65
+ it "should set a Fixnum value and the datatype to xsd:long if arguement is a Fixnum" do
66
+ occ = @topic.create_occurrence("Webseite", @tm.create_locator("http://www.example.org/House"))
67
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
68
+ 1.class.should == Fixnum
69
+ occ.value = 1
70
+ occ.datatype.to_external_form.should == RTM::PSI[:Long]
71
+ occ.value.should == "1"
72
+ end
73
+ it "should set a Bignum value and the datatype to xsd:integer if arguement is a Bignum" do
74
+ occ = @topic.create_occurrence("Webseite", @tm.create_locator("http://www.example.org/House"))
75
+ occ.datatype.to_external_form.should == RTM::PSI[:IRI]
76
+ 9999999999999999999.class.should == Bignum
77
+ occ.value = 9999999999999999999
78
+ occ.datatype.to_external_form.should == RTM::PSI[:Integer]
79
+ occ.value.should == "9999999999999999999"
80
+ end
81
+ end
82
+ describe "for Variant" do
83
+ it "should set the datatype to xsd:anyURI if argument datatype is xsd:anyURI" do
84
+ var = @topic.create_name("White House").create_variant("WH", ["short form"])
85
+ var.datatype.reference.should == RTM::PSI[:String]
86
+ var.value = "http://www.example.org/WhiteHouse", RTM::PSI[:IRI]
87
+ var.datatype.reference.should == RTM::PSI[:IRI]
88
+ var.value.should == "http://www.example.org/WhiteHouse"
89
+ end
90
+ it "should set the datatype to xsd:anyURI if argument datatype is xsd:anyURI and resolve the value using the base iri" do
91
+ var = @topic.create_name("White House").create_variant("WH", ["short form"])
92
+ var.datatype.to_external_form.should == RTM::PSI[:String]
93
+ var.value = "White-House", RTM::PSI[:IRI]
94
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
95
+ var.value.should == "http://www.topicmapslab.de/White-House"
96
+ end
97
+ it "should set the datatype to xsd:anyURI also if it was Integer before" do
98
+ var = @topic.create_name("White House").create_variant("1", RTM::PSI[:Integer], ["short form"])
99
+ var.value.should == "1"
100
+ var.datatype.reference.should == RTM::PSI[:Integer]
101
+ var.value = 1, RTM::PSI[:IRI]
102
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
103
+ var.value.should == "http://www.topicmapslab.de/1"
104
+ end
105
+ it "should set an IRI value and the datatype to xsd:AnyURI if argument is a Locator" do
106
+ var = @topic.create_name("White House").create_variant("WH", ["short form"])
107
+ var.datatype.to_external_form.should == RTM::PSI[:String]
108
+ var.value = @tm.create_locator("http://www.example.org/House")
109
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
110
+ var.value.should == "http://www.example.org/House" # since we dont know if not */ as in case of ontopia
111
+ end
112
+ it "should set a String value and the datatype to xsd:String if argument is a String" do
113
+ var = @topic.create_name("White House").create_variant(@tm.create_locator("WH"), ["short form"])
114
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
115
+ var.value=("1")
116
+ var.datatype.to_external_form.should == RTM::PSI[:String]
117
+ var.value.should == "1"
118
+ end
119
+ it "should set a Float value and the datatype to xsd:Float if arguement is a Float" do
120
+ var = @topic.create_name("White House").create_variant(@tm.create_locator("WH"), ["short form"])
121
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
122
+ 0.5.class.should == Float
123
+ var.value = 0.5
124
+ var.datatype.to_external_form.should == RTM::PSI[:Float]
125
+ var.value.should == "0.5"
126
+ end
127
+ it "should set a Fixnum value and the datatype to xsd:long if arguement is a Fixnum" do
128
+ var = @topic.create_name("White House").create_variant(@tm.create_locator("WH"), ["short form"])
129
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
130
+ 1.class.should == Fixnum
131
+ var.value = 1
132
+ var.datatype.to_external_form.should == RTM::PSI[:Long]
133
+ var.value.should == "1"
134
+ end
135
+ it "should set a Bignum value and the datatype to xsd:integer if arguement is a Bignum" do
136
+ var = @topic.create_name("White House").create_variant(@tm.create_locator("WH"), ["short form"])
137
+ var.datatype.to_external_form.should == RTM::PSI[:IRI]
138
+ 9999999999999999999.class.should == Bignum
139
+ var.value = 9999999999999999999
140
+ var.datatype.to_external_form.should == RTM::PSI[:Integer]
141
+ var.value.should == "9999999999999999999"
142
+ end
143
+ end
144
+
145
+ end
146
+
147
+ describe "#datatype=" do
148
+ before(:each) do
149
+ @topic = @tm.get!("House")
150
+ end
151
+ describe "for Occurrence" do
152
+ it "should set the datatype to xsd:anyURI even if value is a String" do
153
+ occ = @topic.create_occurrence("street number", "1")
154
+ occ.datatype.reference.should == RTM::PSI[:String]
155
+ occ.datatype = RTM::PSI[:IRI]
156
+ occ.datatype.reference.should == RTM::PSI[:IRI]
157
+ end
158
+ it "should set the datatype to xsd:String even if value is a Locator" do
159
+ occ = @topic.create_occurrence("wesbite", @tm.create_locator("http://www.example.org/House"))
160
+ occ.value.should == "http://www.example.org/House"
161
+ occ.datatype.reference.should == RTM::PSI[:IRI]
162
+ occ.datatype = RTM::PSI[:String]
163
+ occ.value.should == "http://www.example.org/House"
164
+ occ.datatype.reference.should == RTM::PSI[:String]
165
+ end
166
+ it "should set the datatype to xsd:anyURI even if value is a number" do
167
+ occ = @topic.create_occurrence("street number", "1", :datatype => RTM::PSI[:Integer])
168
+ occ.value.should == "1"
169
+ occ.datatype.reference.should == RTM::PSI[:Integer]
170
+ occ.datatype = RTM::PSI[:IRI]
171
+ occ.value.should == "http://www.topicmapslab.de/1"
172
+ occ.datatype.reference.should == RTM::PSI[:IRI]
173
+ end
174
+ it "should set the datatype to xsd:Integer even if value is a String" do
175
+ occ = @topic.create_occurrence("street number", "1")
176
+ occ.value.should == "1"
177
+ occ.datatype.reference.should == RTM::PSI[:String]
178
+ occ.datatype = RTM::PSI[:Integer]
179
+ occ.value.should == "1"
180
+ occ.datatype.reference.should == RTM::PSI[:Integer]
181
+ end
182
+ it "should raise an error if datatype is no String or Locator" do
183
+ occ = @topic.create_occurrence("street number", "1")
184
+ occ.datatype.reference.should == RTM::PSI[:String]
185
+ lambda{occ.datatype = 1}.should raise_error
186
+ # don't test for symbols
187
+ #lambda{occ.datatype = :test}.should raise_error
188
+ lambda{occ.datatype = @tm.get!(RTM::PSI[:IRI])}.should raise_error
189
+ end
190
+ end
191
+ describe "for Variant" do
192
+ it "should set the datatype to xsd:anyURI even if value is a String" do
193
+ var = @topic.create_name("White House").create_variant("WH", ["short form"])
194
+ var.value.should == "WH"
195
+ var.datatype.reference.should == RTM::PSI[:String]
196
+ var.datatype = RTM::PSI[:IRI]
197
+ var.datatype.reference.should == RTM::PSI[:IRI]
198
+ end
199
+ it "should set the datatype to xsd:String even if value is a Locator" do
200
+ var = @topic.create_name("White House").create_variant(@tm.create_locator("http://www.example.org/House"), ["short form"])
201
+ var.value.should == "http://www.example.org/House"
202
+ var.datatype.reference.should == RTM::PSI[:IRI]
203
+ var.datatype = RTM::PSI[:String]
204
+ var.value.should == "http://www.example.org/House"
205
+ var.datatype.reference.should == RTM::PSI[:String]
206
+ end
207
+ it "should set the datatype to xsd:anyURI even if value is a number" do
208
+ var = @topic.create_name("White House").create_variant("1", RTM::PSI[:Integer], ["short form"])
209
+ var.value.should == "1"
210
+ var.datatype.reference.should == RTM::PSI[:Integer]
211
+ var.datatype = RTM::PSI[:IRI]
212
+ var.value.should == "http://www.topicmapslab.de/1"
213
+ var.datatype.reference.should == RTM::PSI[:IRI]
214
+ end
215
+ it "should set the datatype to xsd:Integer even if value is a String" do
216
+ occ = @topic.create_name("White House").create_variant("1", ["short form"])
217
+ occ.value.should == "1"
218
+ occ.datatype.reference.should == RTM::PSI[:String]
219
+ occ.datatype = RTM::PSI[:Integer]
220
+ occ.value.should == "1"
221
+ occ.datatype.reference.should == RTM::PSI[:Integer]
222
+ end
223
+ it "should raise an error if datatype is no String or Locator" do
224
+ var = @topic.create_name("White House").create_variant("1", ["short form"])
225
+ var.datatype.reference.should == RTM::PSI[:String]
226
+ lambda{var.datatype = 1}.should raise_error
227
+ # don't test for symbols
228
+ #lambda{var.datatype = :test}.should raise_error
229
+ lambda{var.datatype = @tm.get!(RTM::PSI[:IRI])}.should raise_error
230
+ end
231
+ end
232
+ end
233
+
234
+
235
+ end
236
+ end
@@ -52,7 +52,192 @@ module RTM::Name
52
52
  end
53
53
 
54
54
  describe "#create_variant" do
55
- it "should be tested"
55
+ describe "in tmapi notation" do
56
+ describe "(errors)" do
57
+ it "should raise an error if the value's datatype is not supported" do
58
+ lambda{@testname.create_variant({:a => :b}, ["scope"])}.should raise_error
59
+ end
60
+ it "should not raise an error if a datatype is given, the value's datatype is not supported but the value may be converted to string" do
61
+ lambda{:a.to_s}.should_not raise_error
62
+ lambda{@testname.create_variant(:a, RTM::PSI[:String], ["scope"])}.should_not raise_error
63
+ end
64
+ it "should raise an error if no scope is given" do
65
+ lambda{@testname.create_variant("Uni Leipzig")}.should raise_error
66
+ end
67
+ it "should raise an error if the scope is an empty array" do
68
+ if implementation_for_spec == :ontopia
69
+ pending "ontopia" do
70
+ lambda{@testname.create_variant("Uni Leipzig", [])}.should raise_error
71
+ end
72
+ else
73
+ lambda{@testname.create_variant("Uni Leipzig", [])}.should raise_error
74
+ end
75
+ end
76
+ end
77
+ describe "given value and scope" do
78
+ after(:each) do
79
+ @var.should be_a_kind_of RTM::Variant
80
+ @var.scope.should_not be_empty
81
+ end
82
+ it "should create a variant with datatype xsd:string if value is a String" do
83
+ @var = @testname.create_variant("Uni Leipzig", ["short_form"])
84
+ @var.value.should == "Uni Leipzig"
85
+ @var.datatype.reference.should == RTM::PSI[:String]
86
+ @var.scope.size.should == 1
87
+ @var.scope.should include(@tm.get("short_form"))
88
+ end
89
+ it "should create a variant with datatype xsd:anyURI if value is a Locator" do
90
+ @var = @testname.create_variant(@tm.create_locator("http://example.org/testvariant"), [@tm.create_locator("short form")])
91
+ @var.value.should == "http://example.org/testvariant"
92
+ @var.datatype.reference.should == RTM::PSI[:IRI]
93
+ @var.scope.size.should == 1
94
+ @var.scope.should include(@tm.get("short form"))
95
+ end
96
+ it "should create a variant with datatype xsd:float if value is a Float" do
97
+ @var = @testname.create_variant(0.5, [@tm.get!("theme1"), "theme2"])
98
+ @var.value.should == "0.5"
99
+ @var.datatype.reference.should == RTM::PSI[:Float]
100
+ @var.scope.size.should == 2
101
+ @var.scope.should include(@tm.get("theme1"), @tm.get("theme2"))
102
+ end
103
+ it "should create a variant with datatype xsd:long if value is a Fixnum" do
104
+ @var = @testname.create_variant(5, [@tm.get!("theme1"), @tm.create_locator("theme2")])
105
+ @var.value.should == "5"
106
+ @var.datatype.reference.should == RTM::PSI[:Long]
107
+ @var.scope.size.should == 2
108
+ @var.scope.should include(@tm.get("theme1"), @tm.get("theme2"))
109
+ end
110
+ it "should create a variant with datatype xsd:integer if value is a Bignum" do
111
+ number = 9999999999999999999
112
+ number.class.should == Bignum
113
+ @var = @testname.create_variant(number, [@tm.get!("theme1"), "theme2"])
114
+ @var.value.should == number.to_s
115
+ @var.datatype.reference.should == RTM::PSI[:Integer]
116
+ @var.scope.size.should == 2
117
+ @var.scope.should include(@tm.get("theme1"), @tm.get("theme2"))
118
+ end
119
+ describe "given a parent name with scope" do
120
+ it "should create a variant" do
121
+ @name = @topic.create_name("University of Leipzig", ["en", "official"])
122
+ @name.scope.size.should == 2
123
+ @name.scope.should include(@tm.get("en"), @tm.get("official"))
124
+ @var = @name.create_variant("U o L", ["short form"])
125
+ @var.scope.size.should == 3
126
+ @var.scope.should include(@tm.get("en"), @tm.get("official"), @tm.get("short form"))
127
+ @var.datatype.reference.should == RTM::PSI[:String]
128
+ end
129
+ end
130
+ end
131
+ describe "given value, datatype and scope" do
132
+ after(:each) do
133
+ if @var
134
+ @var.should be_a_kind_of RTM::Variant
135
+ @var.scope.should_not be_empty
136
+ end
137
+ end
138
+ describe "and value is a String" do
139
+ after(:each) do
140
+ if @var
141
+ @var.scope.size.should == 1
142
+ @var.scope.should include(@tm.get("short_form"))
143
+ end
144
+ end
145
+ it "should create a variant if datatye is xsd:string" do
146
+ @var = @testname.create_variant("Uni Leipzig", RTM::PSI[:String], ["short_form"])
147
+ @var.value.should == "Uni Leipzig"
148
+ @var.datatype.reference.should == RTM::PSI[:String]
149
+ end
150
+ it "should create a variant if datatye is xsd:anyURI" do
151
+ @var = @testname.create_variant("Uni Leipzig", RTM::PSI[:IRI], ["short_form"])
152
+ @var.value.should == "http://www.topicmapslab.de/Uni Leipzig"
153
+ @var.datatype.reference.should == RTM::PSI[:IRI]
154
+ end
155
+ it "should create a variant if datatye is xsd:float" do
156
+ @var = @testname.create_variant("0.5", RTM::PSI[:Float], ["short_form"])
157
+ @var.value.should == "0.5"
158
+ @var.datatype.reference.should == RTM::PSI[:Float]
159
+ end
160
+ it "should create a variant if datatye is xsd:long" do
161
+ @var = @testname.create_variant("5", RTM::PSI[:Long], ["short_form"])
162
+ @var.value.should == "5"
163
+ @var.datatype.reference.should == RTM::PSI[:Long]
164
+ end
165
+ it "should create a variant if datatye is xsd:integer" do
166
+ number = 9999999999999999999
167
+ number.class.should == Bignum
168
+ @var = @testname.create_variant(number.to_s, RTM::PSI[:Integer], ["short_form"])
169
+ @var.value.should == number.to_s
170
+ @var.datatype.reference.should == RTM::PSI[:Integer]
171
+ end
172
+ describe "but value is not a number" do
173
+ it "should create a variant if datatye is xsd:float" do
174
+ @var = @testname.create_variant("no number", RTM::PSI[:Float], ["short_form"])
175
+ @var.value.should == "no number"
176
+ @var.datatype.reference.should == RTM::PSI[:Float]
177
+ end
178
+ it "should create a variant if datatye is xsd:long" do
179
+ @var = @testname.create_variant("no number", RTM::PSI[:Long], ["short_form"])
180
+ @var.value.should == "no number"
181
+ @var.datatype.reference.should == RTM::PSI[:Long]
182
+ end
183
+ it "should create a variant if datatye is xsd:integer" do
184
+ if implementation_for_spec == :tinytim
185
+ lambda{@testname.create_variant("no number", RTM::PSI[:Integer], ["short_form"])}.should raise_error
186
+ else
187
+ @var = @testname.create_variant("no number", RTM::PSI[:Integer], ["short_form"])
188
+ @var.value.should == "no number"
189
+ @var.datatype.reference.should == RTM::PSI[:Integer]
190
+ end
191
+ end
192
+ end
193
+ end
194
+ describe "and value is a Locator" do
195
+ it "should create a variant if value is a Number and datatype is xsd:string"
196
+ it "should create a variant if value is a Number and datatype is xsd:anyURI"
197
+ it "should create a variant if value is a Number and datatype is xsd:float"
198
+ it "should create a variant if value is a Number and datatype is xsd:long"
199
+ it "should create a variant if value is a Number and datatype is xsd:integer"
200
+ describe "but value is not a number" do
201
+ it "should create a variant if datatye is xsd:float"
202
+ it "should create a variant if datatye is xsd:long"
203
+ it "should create a variant if datatye is xsd:integer"
204
+ end
205
+ end
206
+ describe "and value is a Number" do
207
+ it "should create a variant if value is a Number and datatype is xsd:string"
208
+ it "should create a variant if value is a Number and datatype is xsd:anyURI"
209
+ it "should create a variant if value is a Number and datatype is xsd:float"
210
+ it "should create a variant if value is a Number and datatype is xsd:long"
211
+ it "should create a variant if value is a Number and datatype is xsd:integer"
212
+ it "should be tested further"
213
+ end
214
+ describe "given a parent name with scope" do
215
+ it "should create a variant" do
216
+ @name = @topic.create_name("University of Leipzig", ["en", "official"])
217
+ @name.scope.size.should == 2
218
+ @name.scope.should include(@tm.get("en"), @tm.get("official"))
219
+ @var = @name.create_variant("U o L", RTM::PSI[:IRI], ["short form"])
220
+ @var.scope.size.should == 3
221
+ @var.scope.should include(@tm.get("en"), @tm.get("official"), @tm.get("short form"))
222
+ @var.datatype.reference.should == RTM::PSI[:IRI]
223
+ end
224
+ end
225
+ end
226
+ end
227
+ describe "in hash notation" do
228
+ describe "given value and scope" do
229
+ it "should create a variant with datatype xsd:string if value is a String"
230
+ it "should create a variant with datatype xsd:anyURI if value is a Locator"
231
+ it "should create a variant with datatype xsd:float if value is a Float"
232
+ it "should create a variant with datatype xsd:long if value is a Fixnum"
233
+ it "should create a variant with datatype xsd:integer if value is a Bignum"
234
+ it "should create a variant if scope is an empty array"
235
+ it "should raise an error if value's datatype is not supported"
236
+ end
237
+ describe "given value, datatype and scope" do
238
+ it "should be implemented and tested"
239
+ end
240
+ end
56
241
  end
57
242
 
58
243
  end # of describe self