xamplr 1.3.15 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. data/.gitignore +1 -0
  2. data/COPYING +160 -656
  3. data/LICENSE +1 -1
  4. data/README.md +33 -0
  5. data/Rakefile +2 -2
  6. data/VERSION.yml +2 -2
  7. data/lib/xamplr.rb +1 -0
  8. data/lib/xamplr/iterator.rb +123 -0
  9. data/lib/xamplr/xml-text.rb +5 -5
  10. data/xamplr.gemspec +9 -204
  11. metadata +13 -203
  12. data/README.rdoc +0 -46
  13. data/README.rdoc.orig +0 -118
  14. data/bin/xampl-gen +0 -17
  15. data/docs/intro/.gitignore +0 -1
  16. data/docs/intro/example1/example1.rb +0 -6
  17. data/docs/intro/example1/xml/hello.xml +0 -1
  18. data/docs/intro/example2/example2.rb +0 -38
  19. data/docs/intro/example2/project-generator.rb +0 -22
  20. data/docs/intro/example2/xml/hello.xml +0 -2
  21. data/docs/intro/example3/example3.rb +0 -30
  22. data/docs/intro/example3/example3a.rb +0 -16
  23. data/docs/intro/example3/generated.png +0 -0
  24. data/docs/intro/example3/grab-yuml.rb +0 -10
  25. data/docs/intro/example3/greeter.rb +0 -15
  26. data/docs/intro/example3/greeting.rb +0 -9
  27. data/docs/intro/example3/project-generator.rb +0 -25
  28. data/docs/intro/example3/xml/greeter.xml +0 -6
  29. data/docs/intro/example4/example4.rb +0 -27
  30. data/docs/intro/example4/example4a.rb +0 -19
  31. data/docs/intro/example4/grab-yuml.rb +0 -10
  32. data/docs/intro/example4/greeter.rb +0 -15
  33. data/docs/intro/example4/greeting.rb +0 -9
  34. data/docs/intro/example4/project-generator.rb +0 -25
  35. data/docs/intro/example4/xml/greeter.xml +0 -6
  36. data/docs/intro/grab-yuml.rb +0 -10
  37. data/docs/intro/project-generator.rb +0 -51
  38. data/docs/intro/xampl.lyx +0 -1494
  39. data/docs/intro/xampl.pdf +0 -0
  40. data/examples/employees/final-xampl/xampl-gen.rb +0 -38
  41. data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +0 -86
  42. data/examples/employees/final/xampl-gen.rb +0 -38
  43. data/examples/employees/final/xml/ddd-final.xml +0 -86
  44. data/examples/employees/first/xampl-gen.rb +0 -38
  45. data/examples/employees/first/xml/ddd-first.xml +0 -48
  46. data/examples/employees/twist/twist.graphml +0 -333
  47. data/examples/employees/twist/xampl-gen.rb +0 -38
  48. data/examples/employees/twist/xml/twist.xml +0 -90
  49. data/examples/employees/xamplr-twist.xml +0 -2
  50. data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +0 -393
  51. data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +0 -265
  52. data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +0 -357
  53. data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
  54. data/examples/employees/yuml-diagrams/ddd-final.yuml +0 -8
  55. data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
  56. data/examples/employees/yuml-diagrams/ddd-first.yuml +0 -7
  57. data/examples/employees/yuml-diagrams/final-yed.png +0 -0
  58. data/examples/employees/yuml-diagrams/first-yed.png +0 -0
  59. data/examples/employees/yuml-diagrams/twist.png +0 -0
  60. data/examples/employees/yuml-diagrams/twist.yuml +0 -12
  61. data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
  62. data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
  63. data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
  64. data/examples/employees/yuml-diagrams/yuml-simplified.txt +0 -19
  65. data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +0 -53
  66. data/examples/employees/yuml-diagrams/yuml.txt +0 -27
  67. data/examples/hobbies/Makefile +0 -5
  68. data/examples/hobbies/hobbies.rb +0 -193
  69. data/examples/hobbies/project-generator.rb +0 -25
  70. data/examples/hobbies/xampl-gen.rb +0 -38
  71. data/examples/hobbies/xml/hobby.xml +0 -3
  72. data/examples/hobbies/xml/people.xml +0 -5
  73. data/examples/random-people-shared-addresses/.gitignore +0 -2
  74. data/examples/random-people-shared-addresses/Makefile +0 -15
  75. data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +0 -91
  76. data/examples/random-people-shared-addresses/batch-load-users-safe.rb +0 -81
  77. data/examples/random-people-shared-addresses/batch-load-users.rb +0 -79
  78. data/examples/random-people-shared-addresses/find-mentions.rb +0 -47
  79. data/examples/random-people-shared-addresses/find-people-by-address.rb +0 -104
  80. data/examples/random-people-shared-addresses/optimise.rb +0 -16
  81. data/examples/random-people-shared-addresses/people.rb +0 -35
  82. data/examples/random-people-shared-addresses/query.rb +0 -75
  83. data/examples/random-people-shared-addresses/query2.rb +0 -73
  84. data/examples/random-people-shared-addresses/random-names.csv +0 -10000
  85. data/examples/random-people-shared-addresses/settings.rb +0 -3
  86. data/examples/random-people-shared-addresses/what-to-query-on.rb +0 -82
  87. data/examples/random-people-shared-addresses/xampl-gen.rb +0 -38
  88. data/examples/random-people-shared-addresses/xml/people.xml +0 -14
  89. data/examples/random-people/.gitignore +0 -2
  90. data/examples/random-people/Makefile +0 -20
  91. data/examples/random-people/batch-load-users.rb +0 -61
  92. data/examples/random-people/optimise.rb +0 -16
  93. data/examples/random-people/people.rb +0 -22
  94. data/examples/random-people/query.rb +0 -73
  95. data/examples/random-people/query2.rb +0 -73
  96. data/examples/random-people/random-names.csv +0 -10000
  97. data/examples/random-people/rawtc.rb +0 -91
  98. data/examples/random-people/settings.rb +0 -3
  99. data/examples/random-people/what-to-query-on.rb +0 -80
  100. data/examples/random-people/xampl-gen.rb +0 -39
  101. data/examples/random-people/xml/people.xml +0 -11
  102. data/examples/read-testing/.gitignore +0 -2
  103. data/examples/read-testing/Makefile +0 -10
  104. data/examples/read-testing/load.rb +0 -65
  105. data/examples/read-testing/read.rb +0 -51
  106. data/examples/read-testing/rrr.rb +0 -88
  107. data/examples/read-testing/settings.rb +0 -2
  108. data/examples/read-testing/xampl-gen.rb +0 -38
  109. data/examples/read-testing/xml/text.xml +0 -8
  110. data/examples/tokyo-cabinet-experimental/.gitignore +0 -2
  111. data/examples/tokyo-cabinet-experimental/expt-query.rb +0 -42
  112. data/examples/tokyo-cabinet-experimental/expt-query2.rb +0 -42
  113. data/examples/tokyo-cabinet-experimental/expt-query3.rb +0 -41
  114. data/examples/tokyo-cabinet-experimental/expt-reader.rb +0 -32
  115. data/examples/tokyo-cabinet-experimental/expt.rb +0 -61
  116. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +0 -38
  117. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +0 -6
  118. data/examples/write-testing/README +0 -4
  119. data/examples/write-testing/RESULTS.home +0 -33
  120. data/examples/write-testing/RESULTS.raconteur +0 -33
  121. data/examples/write-testing/write-speed-test.rb +0 -40
  122. data/lib/xampl-generator.rb +0 -3
  123. data/lib/xamplr-generator.rb +0 -9
  124. data/lib/xamplr/gen-elements.xml +0 -6230
  125. data/lib/xamplr/gen.elements.xml +0 -108
  126. data/lib/xamplr/generate-elements.rb +0 -15
  127. data/lib/xamplr/generator.rb +0 -5
  128. data/lib/xamplr/graphml-out.rb +0 -451
  129. data/lib/xamplr/handwritten/example.rb +0 -698
  130. data/lib/xamplr/handwritten/hand-example.rb +0 -533
  131. data/lib/xamplr/handwritten/test-handwritten.rb +0 -873
  132. data/lib/xamplr/my.gen.elements.xml +0 -461
  133. data/lib/xamplr/obsolete/fsdb.rb +0 -62
  134. data/lib/xamplr/simpleTemplate/danger.rx +0 -4
  135. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +0 -35
  136. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +0 -12
  137. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +0 -20
  138. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +0 -8
  139. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +0 -13
  140. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +0 -37
  141. data/lib/xamplr/simpleTemplate/old/r6.000.rb +0 -122
  142. data/lib/xamplr/simpleTemplate/old/r6.001.rb +0 -145
  143. data/lib/xamplr/simpleTemplate/play.r6 +0 -12
  144. data/lib/xamplr/simpleTemplate/play_more.r6 +0 -20
  145. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +0 -21
  146. data/lib/xamplr/simpleTemplate/playq.r6 +0 -16
  147. data/lib/xamplr/simpleTemplate/r6.rb +0 -87
  148. data/lib/xamplr/simpleTemplate/simple-template.rb +0 -75
  149. data/lib/xamplr/templates/.cvsignore +0 -3
  150. data/lib/xamplr/templates/child.template +0 -47
  151. data/lib/xamplr/templates/child_indexed.template +0 -89
  152. data/lib/xamplr/templates/child_modules.template +0 -5
  153. data/lib/xamplr/templates/element_classes.template +0 -11
  154. data/lib/xamplr/templates/element_data.template +0 -283
  155. data/lib/xamplr/templates/element_empty.template +0 -277
  156. data/lib/xamplr/templates/element_mixed.template +0 -278
  157. data/lib/xamplr/templates/element_simple.template +0 -277
  158. data/lib/xamplr/templates/package.template +0 -38
  159. data/lib/xamplr/xampl-cl-gen.rb +0 -89
  160. data/lib/xamplr/xampl-generator.rb +0 -569
  161. data/lib/xamplr/xampl-hand-generated.rb +0 -1535
  162. data/lib/xamplr/yEd-sample.graphml +0 -300
  163. data/lib/xamplr/yuml-out.rb +0 -129
@@ -1,873 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "test/unit"
4
-
5
- require "xamplr-generator"
6
- require "example"
7
-
8
- include XamplGenerator
9
- include Xampl
10
- include XamplExample
11
-
12
- class TestXampl < Test::Unit::TestCase
13
-
14
- def test_simple_xampl
15
- emph1 = Emph.new
16
- assert_not_nil(emph1.is_changed)
17
- emph2 = Emph.new
18
- assert_not_nil(emph2.is_changed)
19
- emph3 = Emph.new
20
- assert_not_nil(emph3.is_changed)
21
-
22
- emph1.content = "emph 1"
23
- assert_not_nil(emph1.is_changed)
24
- emph2.content = "emph 2"
25
- assert_not_nil(emph2.is_changed)
26
-
27
- assert_equal("emph 1", emph1.content)
28
- assert_equal("emph 2", emph2.content)
29
-
30
- assert_equal("<ns0:emph xmlns:ns0='http://xampl.com/example'>emph 1</ns0:emph>", emph1.to_xml)
31
- assert_equal("<ns0:emph xmlns:ns0='http://xampl.com/example'>emph 2</ns0:emph>", emph2.to_xml)
32
- assert_equal("<ns0:emph xmlns:ns0='http://xampl.com/example'/>", emph3.to_xml)
33
-
34
- fakeRules = XMLPrinter.new("fake...")
35
- emph1.to_xml_internal(fakeRules)
36
- r = fakeRules.done
37
-
38
- assert_equal("fake... xmlns:ns0='http://xampl.com/example'<ns0:emph>emph 1</ns0:emph>", r)
39
-
40
- assert_not_nil(emph1.is_changed)
41
- assert_not_nil(emph2.is_changed)
42
- assert_not_nil(emph3.is_changed)
43
-
44
- check_parents(emph1)
45
- check_parents(emph2)
46
- check_parents(emph3)
47
- end
48
-
49
- def test_empty_xampl
50
- stuff1 = Stuff.new
51
- assert_not_nil(stuff1.is_changed)
52
- stuff1.kind = 'test'
53
- assert_not_nil(stuff1.is_changed)
54
-
55
- stuff2 = Stuff.new
56
- assert_not_nil(stuff2.is_changed)
57
-
58
- stuff3 = Stuff.new
59
- assert_not_nil(stuff3.is_changed)
60
- stuff3.kind = 'test'
61
- assert_not_nil(stuff3.is_changed)
62
- stuff3.special = 'test'
63
- assert_not_nil(stuff3.is_changed)
64
-
65
- assert_equal("<ns1:stuff kind='test' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
66
- stuff1.to_xml)
67
- assert_equal("<ns1:stuff xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
68
- stuff2.to_xml)
69
- assert_equal("<ns1:stuff kind='test' ns0:special='test' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
70
- stuff3.to_xml)
71
-
72
- fakeRules = XMLPrinter.new("fake...")
73
- stuff1.to_xml_internal(fakeRules)
74
- r = fakeRules.done
75
- assert_equal("fake... xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'<ns1:stuff kind='test'/>", r)
76
-
77
- check_parents(stuff1)
78
- check_parents(stuff2)
79
- check_parents(stuff3)
80
- end
81
-
82
- def test_mixed_xampl
83
- desc1 = Description.new
84
- assert_not_nil(desc1.is_changed)
85
- desc1.kind = "desc1"
86
- assert_not_nil(desc1.is_changed)
87
- assert_equal("<ns0:description kind='desc1' xmlns:ns0='http://xampl.com/example'/>",
88
- desc1.to_xml)
89
-
90
- desc1.add_content("hello ")
91
- emph_content_1 = "there"
92
- desc1.new_emph.content = emph_content_1
93
- desc1.add_content("! How ")
94
- emph_content_2 = "are"
95
- desc1.new_emph.content = emph_content_2
96
- desc1.add_content(" you?")
97
-
98
- assert_not_nil(desc1.is_changed)
99
- assert_equal("<ns0:description kind='desc1' xmlns:ns0='http://xampl.com/example'>hello <ns0:emph>there</ns0:emph>! How <ns0:emph>are</ns0:emph> you?</ns0:description>",
100
- desc1.to_xml)
101
- assert_equal(desc1.emph_child.length, 2)
102
- assert_equal(emph_content_1, desc1.emph_child[0].content, emph_content_1)
103
- assert_equal(emph_content_2, desc1.emph_child[1].content, emph_content_2)
104
-
105
- check_parents(desc1)
106
- end
107
-
108
- def test_data_xampl
109
- emph_content_1 = "there"
110
- emph_content_2 = "are"
111
- big_thing = Xampl.make(Thing){ | big_thing |
112
- big_thing.new_thing("thing"){ | thing |
113
- thing.new_stuff.kind = "stuff1"
114
-
115
- thing.new_description{ | desc |
116
- desc.kind = "desc1"
117
-
118
- desc.add_content("hello ")
119
- desc.new_emph.content = emph_content_1
120
- desc.add_content("! How ")
121
- desc.new_emph.content = emph_content_2
122
- desc.add_content(" you?")
123
- }
124
- }
125
- }
126
-
127
- ### desc1 = Description.new
128
- ### desc1.kind = "desc1"
129
- ###
130
- ### desc1.add_content("hello ")
131
- ### emph_content_1 = "there"
132
- ### desc1.new_emph.content = emph_content_1
133
- ### desc1.add_content("! How ")
134
- ### emph_content_2 = "are"
135
- ### desc1.new_emph.content = emph_content_2
136
- ### desc1.add_content(" you?")
137
- ###
138
- ### thing = Thing.new
139
- ### thing.pid = "thing"
140
- ### assert(thing.is_changed)
141
- ### thing.new_stuff.kind = "stuff1"
142
- ### assert_not_nil(thing.is_changed)
143
- ### thing.is_changed = nil
144
- ### thing.add_description(desc1)
145
- ### assert_not_nil(thing.is_changed)
146
- ###
147
- ### big_thing = Thing.new
148
- ### big_thing.add_thing(thing)
149
- assert_equal("<ns0:thing xmlns:ns0='http://xampl.com/example' xmlns:ns1='http://xampl.com/example/special'><ns0:thing pid='thing'><ns0:stuff kind='stuff1'/><ns0:description kind='desc1'>hello <ns0:emph>there</ns0:emph>! How <ns0:emph>are</ns0:emph> you?</ns0:description></ns0:thing></ns0:thing>",
150
- big_thing.to_xml)
151
-
152
- assert_equal(1, big_thing.children.length)
153
- assert_equal(2, big_thing.thing_child[0].children.length)
154
- assert_equal(big_thing.thing_child[0].description_child[0].emph_child.length, 2)
155
- assert_equal(emph_content_1, big_thing.thing_child[0].description_child[0].emph_child[0].content, emph_content_1)
156
- assert_equal(emph_content_2, big_thing.thing_child[0].description_child[0].emph_child[1].content, emph_content_2)
157
-
158
- check_parents(big_thing)
159
- end
160
-
161
- def test_data_xampl_using_append
162
- emph_content_1 = "there"
163
- emph1 = Emph.new
164
- emph1 << emph_content_1
165
-
166
- emph_content_2 = "are"
167
- emph2 = Emph.new
168
- emph2.content = emph_content_2
169
-
170
- desc1 = Description.new
171
- desc1.kind = "desc1"
172
-
173
- desc1.is_changed = nil
174
- desc1 << "hello " << emph1 << "! How " << emph2 << " you?"
175
- assert_not_nil(desc1.is_changed)
176
-
177
- thing = Thing.new
178
- thing.pid = "thing"
179
- thing.new_stuff.kind = "stuff1"
180
- thing << desc1
181
-
182
- big_thing = Thing.new
183
- big_thing << thing
184
-
185
- assert_equal("<ns0:thing xmlns:ns0='http://xampl.com/example' xmlns:ns1='http://xampl.com/example/special'><ns0:thing pid='thing'><ns0:stuff kind='stuff1'/><ns0:description kind='desc1'>hello <ns0:emph>there</ns0:emph>! How <ns0:emph>are</ns0:emph> you?</ns0:description></ns0:thing></ns0:thing>",
186
- big_thing.to_xml)
187
-
188
- assert_equal(2, big_thing.thing_child[0].description_child[0].emph_child.length)
189
- assert_equal(emph_content_1, big_thing.thing_child[0].description_child[0].emph_child[0].content)
190
- assert_equal(emph_content_2, big_thing.thing_child[0].description_child[0].emph_child[1].content)
191
-
192
- check_parents(big_thing)
193
- end
194
-
195
- def test_from_xml
196
- emph_content_1 = "there"
197
- emph1 = Emph.new
198
- emph1 << emph_content_1
199
-
200
- emph_content_2 = "are"
201
- emph2 = Emph.new
202
- emph2.content = emph_content_2
203
-
204
- desc1 = Description.new
205
- desc1.kind = "desc1"
206
-
207
- desc1.is_changed = nil
208
- desc1 << "hello " << emph1 << "! How " << emph2 << " you?"
209
-
210
- thing = Thing.new
211
- thing.pid = "thing"
212
- thing.new_stuff.kind = "stuff1"
213
- thing << desc1
214
-
215
- big_thing = Thing.new
216
- big_thing << "leading content" << thing << "trailing content"
217
-
218
- #puts big_thing.to_xml
219
- #pp = FromXML.new
220
- #pp.setup_parse_string(big_thing.to_xml)
221
- #while not pp.endDocument?
222
- #event = pp.next_interesting_event
223
- #puts event
224
- #if (event == Xampl_PP::TEXT) then
225
- #puts "TEXT [[[" << pp.text << "]]]"
226
- #end
227
- #end
228
-
229
- pp = FromXML.new
230
- pp.setup_parse_string(big_thing.to_xml)
231
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
232
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
233
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
234
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
235
-
236
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
237
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
238
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
239
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
240
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
241
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
242
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
243
- assert_equal(pp.next_interesting_event, Xampl_PP::START_ELEMENT)
244
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
245
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
246
- assert_equal(pp.next_interesting_event, Xampl_PP::TEXT)
247
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
248
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
249
- assert_equal(pp.next_interesting_event, Xampl_PP::END_ELEMENT)
250
- assert_equal(pp.next_interesting_event, Xampl_PP::END_DOCUMENT)
251
- assert(pp.endDocument?)
252
-
253
- pp = FromXML.new
254
- another_big_thing = pp.parse_string(big_thing.to_xml)
255
- assert_equal(big_thing.to_xml, another_big_thing.to_xml)
256
- end
257
-
258
- def test_index
259
- thing = Thing.new
260
- thing.new_key_value("one").value = "1"
261
- thing.new_key_value("two").value = "2"
262
-
263
- assert_equal(thing.key_value_child[0], thing.key_value_map["one"])
264
- assert_equal(thing.key_value_child[1], thing.key_value_map["two"])
265
-
266
- check_parents(thing)
267
- end
268
-
269
- def test_parents
270
- thing = Thing.new
271
- (kv1 = thing.new_key_value("one")).value = "1"
272
- (kv2 = thing.new_key_value("two")).value = "2"
273
-
274
- assert_equal(thing, thing.key_value_child[0].parents[0])
275
- assert_equal(thing, thing.key_value_child[1].parents[0])
276
-
277
- another_thing = Thing.new
278
- another_thing << kv1 << kv2
279
-
280
- assert_equal(2, kv1.parents.size)
281
- assert_equal(2, kv2.parents.size)
282
-
283
- check_parents(thing)
284
- check_parents(another_thing)
285
- end
286
-
287
- def test_non_string_attributes
288
- stuff1 = Stuff.new
289
-
290
- stuff1.kind = 123.456
291
- assert_equal("<ns1:stuff kind='123.456' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
292
- stuff1.to_xml)
293
-
294
- stuff1.kind = nil
295
- assert_equal("<ns1:stuff xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
296
- stuff1.to_xml)
297
-
298
- stuff1.kind = [1, 2, 3]
299
- assert_equal("<ns1:stuff kind='123' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
300
- stuff1.to_xml)
301
-
302
- stuff2 = Stuff.new
303
- stuff2.kind = 123
304
- stuff1.kind = stuff2
305
- assert_equal("<ns1:stuff kind='&lt;ns1:stuff kind=&apos;123&apos; xmlns:ns1=&apos;http://xampl.com/example&apos; xmlns:ns0=&apos;http://xampl.com/example/special&apos;/&gt;' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
306
- stuff1.to_xml)
307
-
308
- thing = Thing.new
309
- thing.pid = "thing"
310
- thing << stuff2
311
- stuff1.kind = thing
312
- # TODO -- check what happens with a PIDed thing
313
- assert_equal("<ns1:stuff kind='&lt;ns0:thing pid=&apos;thing&apos; xmlns:ns0=&apos;http://xampl.com/example&apos; xmlns:ns1=&apos;http://xampl.com/example/special&apos;&gt;&lt;ns0:stuff kind=&apos;123&apos;/&gt;&lt;/ns0:thing&gt;' xmlns:ns1='http://xampl.com/example' xmlns:ns0='http://xampl.com/example/special'/>",
314
- stuff1.to_xml)
315
-
316
- # TODO -- check round tripping of this stuff
317
- check_parents(stuff1)
318
- end
319
-
320
- def test_registry
321
- assert_equal([ Emph ], FromXML::registered(Emph::ns_tag))
322
- assert_equal([ Emph ], FromXML::registered(Emph::tag))
323
- assert_equal([ Stuff ], FromXML::registered(Stuff::ns_tag))
324
- assert_equal([ Stuff ], FromXML::registered(Stuff::tag))
325
-
326
- FromXML::register(Emph::tag, Emph::ns_tag, Emph)
327
- assert_equal([ Emph ], FromXML::registered(Emph::ns_tag))
328
- assert_equal([ Emph ], FromXML::registered(Emph::tag))
329
-
330
- FromXML::register(Emph::tag, Thing::ns_tag, Thing)
331
- assert_equal([ Emph ], FromXML::registered(Emph::ns_tag))
332
- assert_equal([ Emph, Thing ], FromXML::registered(Emph::tag))
333
- end
334
-
335
- def test_in_memory_persistence_basics
336
- stuff = Stuff.new
337
- thing = Thing.new
338
- thing << stuff
339
-
340
- assert(!stuff.persist_required)
341
- assert(thing.persist_required)
342
- assert(nil == thing.persister)
343
-
344
- persister = InMemoryPersister.new
345
-
346
- assert(!persister.write(thing))
347
-
348
- thing.pid = "thing"
349
-
350
- assert(persister.write(thing))
351
-
352
- saved_thing = persister.read(Thing, "thing")
353
- assert(saved_thing)
354
-
355
- assert_equal(thing.to_xml, saved_thing.to_xml)
356
-
357
- Xampl.in_memory_persister("first")
358
-
359
- stuff = Stuff.new
360
- thing = Thing.new
361
- thing.pid = "thing"
362
- thing << stuff
363
-
364
- assert_nil(Xampl.lookup(Thing, "thing"))
365
-
366
- assert(nil == thing.persister)
367
- assert(thing.is_changed)
368
- assert(0 == Xampl.count_changed)
369
- Xampl.introduce_to_persister(thing)
370
- assert(thing.persister)
371
- assert_equal(1, Xampl.count_changed)
372
- assert_equal(thing, Xampl.lookup(Thing, "thing"), "cannot lookup new stuff")
373
-
374
- #Xampl.print_stats
375
-
376
- assert_equal(1, Xampl.count_changed)
377
- writes = Xampl.sync
378
- assert_equal(1, writes)
379
- assert_equal(0, Xampl.count_changed)
380
- assert(Xampl.lookup(Thing, "thing"))
381
-
382
- assert_equal(thing, Xampl.lookup(Thing, "thing"), "cannot lookup cached stuff")
383
-
384
- Xampl.clear_cache
385
-
386
- found = Xampl.lookup(Thing, "thing")
387
- assert_not_equal(thing, found)
388
-
389
- #Xampl.print_stats
390
- end
391
-
392
- def test_escaping
393
- description = Description.new
394
- description.kind = "<>&'\""
395
- description << "<>&'\""
396
-
397
- expect = "<ns0:description kind='&lt;&gt;&amp;&apos;&quot;' xmlns:ns0='http://xampl.com/example'>&lt;>&amp;'\"</ns0:description>"
398
-
399
- assert_equal(expect, description.to_xml)
400
- end
401
-
402
- def test_generator
403
- options = Xampl.make(Options) { | options |
404
- options.new_index_attribute("name")
405
- options.new_index_attribute("id")
406
- options.new_index_attribute("pid").persisted = true
407
-
408
- options.new_resolve{ | resolver |
409
- resolver.pkg = "XamplExample"
410
- resolver.namespace="http://xampl.com/example"
411
- }
412
- options.new_resolve{ | resolver |
413
- resolver.pkg = "XamplExamplePlay"
414
- resolver.namespace="http://xampl.com/example/play"
415
- }
416
- }
417
- generator = Generator.new(options)
418
-
419
- generator.comprehend_from_strings([
420
- %Q{
421
- <things xmlns='http://xampl.com/example'
422
- xmlns:xampl='http://xampl.com/example/special'>
423
- <thing pid=''>
424
- <description kind=''>blah <emph>blah</emph> blah</description>
425
- <keyValue id='' value=''/>
426
- <stuff kind='' xampl:special=''/>
427
- <thing pid=''/>
428
- <things/>
429
- </thing>
430
- </things>
431
- }
432
- ])
433
-
434
- ns = "http://xampl.com/example"
435
- emap = generator.elements_map
436
- assert_equal(1, emap.size)
437
- elements = emap[ns]
438
- assert_not_nil(elements)
439
- assert_equal(6, elements.element_child.size)
440
-
441
- ename = "emph"
442
- element = elements.element_map[ename]
443
- assert_not_nil(element)
444
- assert_equal(ns, element.namespace)
445
- assert_equal("{#{ns}}#{ename}", element.nstag)
446
- assert(!element.empty)
447
- assert(element.has_content)
448
-
449
- ename = "description"
450
- element = elements.element_map[ename]
451
- assert_not_nil(element)
452
- assert_equal(ns, element.namespace)
453
- assert_equal("{#{ns}}#{ename}", element.nstag)
454
- assert(!element.empty)
455
- assert(element.has_content)
456
-
457
- assert_equal(1, element.attribute_child.size)
458
- assert_not_nil(element.attribute_map["kind"])
459
- assert_nil(element.attribute_map["kind"].namespace)
460
-
461
- assert_equal(1, element.child_element_child.size)
462
- cname = "{#{ns}}emph"
463
- assert_not_nil(element.child_element_map[cname])
464
- assert_equal(ns, element.child_element_map[cname].namespace)
465
- assert_equal("emph", element.child_element_map[cname].element_name)
466
-
467
- ename = "stuff"
468
- element = elements.element_map[ename]
469
- assert_not_nil(element)
470
- assert_equal(ns, element.namespace)
471
- assert_equal("{#{ns}}#{ename}", element.nstag)
472
- assert(element.empty)
473
- assert(!element.has_content)
474
-
475
- assert_equal(2, element.attribute_child.size)
476
- assert_not_nil(element.attribute_map["kind"])
477
- assert_nil(element.attribute_map["kind"].namespace)
478
- assert_not_nil(element.attribute_map["special"])
479
- assert_equal('http://xampl.com/example/special', element.attribute_map["special"].namespace)
480
-
481
- assert_equal(0, element.child_element_child.size)
482
-
483
- ename = "keyValue"
484
- element = elements.element_map[ename]
485
- assert_not_nil(element)
486
- assert_equal(ns, element.namespace)
487
- assert_equal("{#{ns}}#{ename}", element.nstag)
488
- assert(element.empty)
489
- assert(!element.has_content)
490
-
491
- assert_equal(2, element.attribute_child.size)
492
- assert_not_nil(element.attribute_map["id"])
493
- assert_nil(element.attribute_map["id"].namespace)
494
- assert_not_nil(element.attribute_map["value"])
495
- assert_nil(element.attribute_map["value"].namespace)
496
-
497
- assert_equal(0, element.child_element_child.size)
498
-
499
- ename = "thing"
500
- element = elements.element_map[ename]
501
- assert_not_nil(element)
502
- assert_equal(ns, element.namespace)
503
- assert_equal("{#{ns}}#{ename}", element.nstag)
504
- assert(element.empty)
505
- assert(!element.has_content)
506
-
507
- assert_equal(1, element.attribute_child.size)
508
- assert_equal(1, element.attribute_map.size)
509
- assert_not_nil(element.attribute_map["pid"])
510
- assert_nil(element.attribute_map["pid"].namespace)
511
-
512
- assert_equal(5, element.child_element_child.size)
513
-
514
- cname = "{#{ns}}description"
515
- assert_not_nil(element.child_element_map[cname])
516
- assert_equal(ns, element.child_element_map[cname].namespace)
517
- assert_equal("description", element.child_element_map[cname].element_name)
518
-
519
- cname = "{#{ns}}keyValue"
520
- assert_not_nil(element.child_element_map[cname])
521
- assert_equal(ns, element.child_element_map[cname].namespace)
522
- assert_equal("keyValue", element.child_element_map[cname].element_name)
523
-
524
- cname = "{#{ns}}stuff"
525
- assert_not_nil(element.child_element_map[cname])
526
- assert_equal(ns, element.child_element_map[cname].namespace)
527
- assert_equal("stuff", element.child_element_map[cname].element_name)
528
-
529
- cname = "{#{ns}}thing"
530
- assert_not_nil(element.child_element_map[cname])
531
- assert_equal(ns, element.child_element_map[cname].namespace)
532
- assert_equal("thing", element.child_element_map[cname].element_name)
533
-
534
- cname = "{#{ns}}things"
535
- assert_not_nil(element.child_element_map[cname])
536
- assert_equal(ns, element.child_element_map[cname].namespace)
537
- assert_equal("things", element.child_element_map[cname].element_name)
538
-
539
- ename = "things"
540
- element = elements.element_map[ename]
541
- assert_not_nil(element)
542
- assert_equal(ns, element.namespace)
543
- assert_equal("{#{ns}}#{ename}", element.nstag)
544
- assert(element.empty)
545
- assert(!element.has_content)
546
-
547
- assert_equal(0, element.attribute_child.size)
548
- assert_equal(1, element.child_element_child.size)
549
-
550
- cname = "{#{ns}}thing"
551
- assert_not_nil(element.child_element_map[cname])
552
- assert_equal(ns, element.child_element_map[cname].namespace)
553
- assert_equal("thing", element.child_element_map[cname].element_name)
554
-
555
- #generator.print_stats
556
- #generator.analyse
557
-
558
- ename = "emph"
559
- element = elements.element_map[ename]
560
- assert_equal("simple", element.kind, "emph is wrong kind")
561
- assert_nil(element.indexed_by)
562
- assert_nil(element.persisted)
563
- assert_equal("XamplExample", element.package)
564
- assert_equal("Emph", element.class_name)
565
- assert_equal("emph", element.attribute_name)
566
-
567
- ename = "description"
568
- element = elements.element_map[ename]
569
- assert_equal("mixed", element.kind, "description is wrong kind")
570
- assert_nil(element.indexed_by)
571
- assert_nil(element.persisted)
572
- assert_equal("XamplExample", element.package)
573
- assert_equal("Description", element.class_name)
574
- assert_equal("description", element.attribute_name)
575
-
576
- ename = "stuff"
577
- element = elements.element_map[ename]
578
- assert_equal("empty", element.kind, "stuff is wrong kind")
579
- assert_nil(element.indexed_by)
580
- assert_nil(element.persisted)
581
- assert_equal("XamplExample", element.package)
582
- assert_equal("Stuff", element.class_name)
583
- assert_equal("stuff", element.attribute_name)
584
-
585
- ename = "keyValue"
586
- element = elements.element_map[ename]
587
- assert_equal("empty", element.kind, "keyValue is wrong kind")
588
- assert_equal("id", element.indexed_by)
589
- assert_nil(element.persisted)
590
- assert_equal("XamplExample", element.package)
591
- assert_equal("KeyValue", element.class_name)
592
- assert_equal("key_value", element.attribute_name)
593
-
594
- ename = "thing"
595
- element = elements.element_map[ename]
596
- assert_equal("data", element.kind, "thing is wrong kind")
597
- assert_equal("pid", element.indexed_by)
598
- assert_not_nil(element.persisted)
599
- assert_equal("XamplExample", element.package)
600
- assert_equal("Thing", element.class_name)
601
- assert_equal("thing", element.attribute_name)
602
-
603
- generator.generate_to_directory(nil)
604
- end
605
-
606
- def test_generator_with_no_namespace
607
- generator = Generator.new
608
- generator.comprehend_from_strings([
609
- %Q{
610
- <things xmlns:xampl='http://xampl.com/example/special'>
611
- <thing pid=''>
612
- <description kind=''>blah <emph>blah</emph> blah</description>
613
- <keyValue id='' value=''/>
614
- <stuff kind='' xampl:special=''/>
615
- <thing pid=''/>
616
- <things/>
617
- </thing>
618
- </things>
619
- }
620
- ])
621
-
622
- ns = ""
623
- #ns = nil
624
- emap = generator.elements_map
625
- assert_equal(1, emap.size)
626
- elements = emap[ns]
627
- assert_not_nil(elements)
628
- assert_equal(6, elements.element_child.size)
629
-
630
- ename = "emph"
631
- element = elements.element_map[ename]
632
- assert_not_nil(element)
633
- assert_equal(ns, element.namespace)
634
- assert_equal("{#{ns}}#{ename}", element.nstag)
635
- assert(!element.empty)
636
- assert(element.has_content)
637
-
638
- ename = "description"
639
- element = elements.element_map[ename]
640
- assert_not_nil(element)
641
- assert_equal(ns, element.namespace)
642
- assert_equal("{#{ns}}#{ename}", element.nstag)
643
- assert(!element.empty)
644
- assert(element.has_content)
645
-
646
- assert_equal(1, element.attribute_child.size)
647
- assert_not_nil(element.attribute_map["kind"])
648
- assert_nil(element.attribute_map["kind"].namespace)
649
-
650
- assert_equal(1, element.child_element_child.size)
651
- cname = "{#{ns}}emph"
652
- assert_not_nil(element.child_element_map[cname])
653
- assert_equal(ns, element.child_element_map[cname].namespace)
654
- assert_equal("emph", element.child_element_map[cname].element_name)
655
-
656
- ename = "stuff"
657
- element = elements.element_map[ename]
658
- assert_not_nil(element)
659
- assert_equal(ns, element.namespace)
660
- assert_equal("{#{ns}}#{ename}", element.nstag)
661
- assert(element.empty)
662
- assert(!element.has_content)
663
-
664
- assert_equal(2, element.attribute_child.size)
665
- assert_not_nil(element.attribute_map["kind"])
666
- assert_nil(element.attribute_map["kind"].namespace)
667
- assert_not_nil(element.attribute_map["special"])
668
- assert_equal('http://xampl.com/example/special', element.attribute_map["special"].namespace)
669
-
670
- assert_equal(0, element.child_element_child.size)
671
-
672
- ename = "keyValue"
673
- element = elements.element_map[ename]
674
- assert_not_nil(element)
675
- assert_equal(ns, element.namespace)
676
- assert_equal("{#{ns}}#{ename}", element.nstag)
677
- assert(element.empty)
678
- assert(!element.has_content)
679
-
680
- assert_equal(2, element.attribute_child.size)
681
- assert_not_nil(element.attribute_map["id"])
682
- assert_nil(element.attribute_map["id"].namespace)
683
- assert_not_nil(element.attribute_map["value"])
684
- assert_nil(element.attribute_map["value"].namespace)
685
-
686
- assert_equal(0, element.child_element_child.size)
687
-
688
- ename = "thing"
689
- element = elements.element_map[ename]
690
- assert_not_nil(element)
691
- assert_equal(ns, element.namespace)
692
- assert_equal("{#{ns}}#{ename}", element.nstag)
693
- assert(element.empty)
694
- assert(!element.has_content)
695
-
696
- assert_equal(1, element.attribute_child.size)
697
- assert_equal(1, element.attribute_map.size)
698
- assert_not_nil(element.attribute_map["pid"])
699
- assert_nil(element.attribute_map["pid"].namespace)
700
-
701
- assert_equal(5, element.child_element_child.size)
702
-
703
- cname = "{#{ns}}description"
704
- assert_not_nil(element.child_element_map[cname])
705
- assert_equal(ns, element.child_element_map[cname].namespace)
706
- assert_equal("description", element.child_element_map[cname].element_name)
707
-
708
- cname = "{#{ns}}keyValue"
709
- assert_not_nil(element.child_element_map[cname])
710
- assert_equal(ns, element.child_element_map[cname].namespace)
711
- assert_equal("keyValue", element.child_element_map[cname].element_name)
712
-
713
- cname = "{#{ns}}stuff"
714
- assert_not_nil(element.child_element_map[cname])
715
- assert_equal(ns, element.child_element_map[cname].namespace)
716
- assert_equal("stuff", element.child_element_map[cname].element_name)
717
-
718
- cname = "{#{ns}}thing"
719
- assert_not_nil(element.child_element_map[cname])
720
- assert_equal(ns, element.child_element_map[cname].namespace)
721
- assert_equal("thing", element.child_element_map[cname].element_name)
722
-
723
- cname = "{#{ns}}things"
724
- assert_not_nil(element.child_element_map[cname])
725
- assert_equal(ns, element.child_element_map[cname].namespace)
726
- assert_equal("things", element.child_element_map[cname].element_name)
727
-
728
- ename = "things"
729
- element = elements.element_map[ename]
730
- assert_not_nil(element)
731
- assert_equal(ns, element.namespace)
732
- assert_equal("{#{ns}}#{ename}", element.nstag)
733
- assert(element.empty)
734
- assert(!element.has_content)
735
-
736
- assert_equal(0, element.attribute_child.size)
737
- assert_equal(1, element.child_element_child.size)
738
-
739
- cname = "{#{ns}}thing"
740
- assert_not_nil(element.child_element_map[cname])
741
- assert_equal(ns, element.child_element_map[cname].namespace)
742
- assert_equal("thing", element.child_element_map[cname].element_name)
743
-
744
- #generator.print_stats
745
- #generator.analyse
746
-
747
- ename = "emph"
748
- element = elements.element_map[ename]
749
- assert_equal("simple", element.kind, "emph is wrong kind")
750
- assert_nil(element.indexed_by)
751
- assert_nil(element.persisted)
752
- assert_equal("XamplAdHoc", element.package)
753
- assert_equal("Emph", element.class_name)
754
- assert_equal("emph", element.attribute_name)
755
-
756
- ename = "description"
757
- element = elements.element_map[ename]
758
- assert_equal("mixed", element.kind, "description is wrong kind")
759
- assert_nil(element.indexed_by)
760
- assert_nil(element.persisted)
761
- assert_equal("XamplAdHoc", element.package)
762
- assert_equal("Description", element.class_name)
763
- assert_equal("description", element.attribute_name)
764
-
765
- ename = "stuff"
766
- element = elements.element_map[ename]
767
- assert_equal("empty", element.kind, "stuff is wrong kind")
768
- assert_nil(element.indexed_by)
769
- assert_nil(element.persisted)
770
- assert_equal("XamplAdHoc", element.package)
771
- assert_equal("Stuff", element.class_name)
772
- assert_equal("stuff", element.attribute_name)
773
-
774
- ename = "keyValue"
775
- element = elements.element_map[ename]
776
- assert_equal("empty", element.kind, "keyValue is wrong kind")
777
- assert_equal("id", element.indexed_by)
778
- assert_nil(element.persisted)
779
- assert_equal("XamplAdHoc", element.package)
780
- assert_equal("KeyValue", element.class_name)
781
- assert_equal("key_value", element.attribute_name)
782
-
783
- ename = "thing"
784
- element = elements.element_map[ename]
785
- assert_equal("data", element.kind, "thing is wrong kind")
786
- assert_equal("pid", element.indexed_by)
787
- assert_not_nil(element.persisted)
788
- assert_equal("XamplAdHoc", element.package)
789
- assert_equal("Thing", element.class_name)
790
- assert_equal("thing", element.attribute_name)
791
-
792
- generator.generate_to_directory(nil)
793
- end
794
-
795
- def choose_name_test_helper(name, expected_class_name, expected_attribute_name)
796
- original_name = name.dup
797
- class_name, attribute_name = Generator.choose_names(name)
798
- assert_equal(original_name, name, "changed the original name")
799
- assert_equal(expected_class_name, class_name, "CLASS name wrong")
800
- assert_equal(expected_attribute_name, attribute_name, "ATTRIBUTE name wrong")
801
- end
802
-
803
- def test_choose_names
804
- choose_name_test_helper("abcd", "Abcd", "abcd")
805
- choose_name_test_helper("Abcd", "Abcd", "abcd")
806
- choose_name_test_helper("abCd", "AbCd", "ab_cd")
807
- choose_name_test_helper("AbCd", "AbCd", "ab_cd")
808
- choose_name_test_helper("ABcd", "ABcd", "abcd")
809
-
810
- choose_name_test_helper("ABcdefABCdef", "ABcdefABCdef", "abcdef_abcdef")
811
-
812
- choose_name_test_helper("ab-cd", "AbCd", "ab_cd")
813
- choose_name_test_helper("Ab-Cd", "AbCd", "ab_cd")
814
-
815
- choose_name_test_helper("ab--cd", "AbCd", "ab_cd")
816
- choose_name_test_helper("Ab--Cd", "AbCd", "ab_cd")
817
-
818
- choose_name_test_helper("ab_-cd", "AbCd", "ab_cd")
819
- choose_name_test_helper("Ab_-Cd", "AbCd", "ab_cd")
820
-
821
- choose_name_test_helper("ab__cd", "AbCd", "ab_cd")
822
- choose_name_test_helper("Ab__Cd", "AbCd", "ab_cd")
823
-
824
- choose_name_test_helper("ab:cd", "AbCd", "ab_cd")
825
- choose_name_test_helper("Ab:Cd", "AbCd", "ab_cd")
826
- end
827
-
828
- # TODO -- test no namespace
829
-
830
- def test_bug_indexed_child_same_pid_added_twice
831
- element = Element.new
832
- attr0 = element.new_attribute("repeated")
833
-
834
- assert_equal(1, element.attribute_map.size)
835
- assert_equal(1, element.attribute_child.size)
836
- assert_equal(1, element.children.size)
837
- assert_equal(attr0, element.children[0])
838
-
839
- ce1 = element.new_child_element("something")
840
-
841
- assert_equal(1, element.attribute_map.size)
842
- assert_equal(1, element.attribute_child.size)
843
- assert_equal(2, element.children.size)
844
- assert_equal(attr0, element.children[0])
845
- assert_equal(ce1, element.children[1])
846
-
847
- attr2 = element.new_attribute("repeated")
848
-
849
- assert_equal(1, element.attribute_map.size)
850
- assert_equal(1, element.attribute_child.size)
851
- assert_equal(2, element.children.size)
852
- assert_equal(ce1, element.children[0])
853
- assert_equal(attr2, element.children[1])
854
- end
855
-
856
- def check_parents(xampl, parent=nil)
857
- if (nil != parent) then
858
- found = false
859
- xampl.parents.each{ | p |
860
- found = true if (parent == p)
861
- }
862
- assert(found)
863
- else
864
- if (xampl.kind_of? XamplObject)
865
- assert((nil == xampl.parents) || (0 == xampl.parents.size))
866
- end
867
- end
868
- xampl.children.each{ | child |
869
- check_parents(child, xampl) if (child.kind_of? XamplObject)
870
- }
871
- end
872
- end
873
-