eimxml 0.0.2 → 0.0.3.1

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,7 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eimxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ hash: 65
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 3
10
+ - 1
11
+ version: 0.0.3.1
5
12
  platform: ruby
6
13
  authors:
7
14
  - KURODA Hiraku
@@ -9,8 +16,7 @@ autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2008-04-14 00:00:00 -04:00
13
- default_executable:
19
+ date: 2011-07-19 00:00:00 Z
14
20
  dependencies: []
15
21
 
16
22
  description:
@@ -19,57 +25,65 @@ executables: []
19
25
 
20
26
  extensions: []
21
27
 
22
- extra_rdoc_files:
23
- - README
28
+ extra_rdoc_files: []
29
+
24
30
  files:
25
- - lib
26
- - lib/eim_xml.rb
27
- - lib/eim_xml
28
- - lib/eim_xml/parser.rb
31
+ - Rakefile.utirake
32
+ - Rakefile
29
33
  - lib/eim_xml/matcher.rb
30
- - lib/eim_xml/assertions.rb
31
34
  - lib/eim_xml/xhtml.rb
32
- - README
33
- - Rakefile
34
- - test
35
- - test/xhtml_test.rb
36
- - test/eim_xml_test.rb
37
- - test/assertions_test.rb
38
- - test/parser_test.rb
39
- has_rdoc: true
35
+ - lib/eim_xml/dsl.rb
36
+ - lib/eim_xml/parser.rb
37
+ - lib/eim_xml/formatter.rb
38
+ - lib/eim_xml/xhtml/dsl.rb
39
+ - lib/eim_xml/assertions.rb
40
+ - lib/eim_xml/formatter/element_wrapper.rb
41
+ - lib/eim_xml.rb
42
+ - spec/assertions_test.rb
43
+ - spec/formatter_spec.rb
44
+ - spec/eim_xml_spec.rb
45
+ - spec/dsl_spec.rb
46
+ - spec/xhtml_spec.rb
47
+ - spec/parser_spec.rb
40
48
  homepage: http://eimxml.rubyforge.org/
41
- post_install_message:
42
- rdoc_options:
43
- - -S
44
- - -w
45
- - "3"
46
- - -c
47
- - UTF-8
48
- - -m
49
- - README
49
+ licenses: []
50
+
51
+ post_install_message: |-
52
+ ************************************************************
53
+ [DEPRECATION]
54
+ "eimxml" gem is deprecated.
55
+ Please use "eim_xml" gem instead.
56
+ ************************************************************
57
+ rdoc_options: []
58
+
50
59
  require_paths:
51
60
  - lib
52
61
  required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
53
63
  requirements:
54
64
  - - ">="
55
65
  - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
56
69
  version: "0"
57
- version:
58
70
  required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
59
72
  requirements:
60
- - - ">="
73
+ - - ">"
61
74
  - !ruby/object:Gem::Version
62
- version: "0"
63
- version:
75
+ hash: 25
76
+ segments:
77
+ - 1
78
+ - 3
79
+ - 1
80
+ version: 1.3.1
64
81
  requirements: []
65
82
 
66
83
  rubyforge_project: eimxml
67
- rubygems_version: 1.1.1
84
+ rubygems_version: 1.8.5
68
85
  signing_key:
69
- specification_version: 2
86
+ specification_version: 3
70
87
  summary: Easy IMplemented XML
71
- test_files:
72
- - test/xhtml_test.rb
73
- - test/eim_xml_test.rb
74
- - test/assertions_test.rb
75
- - test/parser_test.rb
88
+ test_files: []
89
+
data/README DELETED
@@ -1,58 +0,0 @@
1
- = Easy IMplemented XML
2
- :lang:ja
3
- Easy IMplemented XML(EimXML)は、RubyスクリプトからXMLを作成するためのライブラリです。
4
- 動作が軽くなるように、単純さを心がけて実装しています。
5
-
6
- :lang:en
7
- Easy IMplemented XML(EimXML) is library to construct XML on Ruby.
8
- For light weight performance, this library is implemented simply.
9
-
10
- :lang:
11
- = URLs
12
- * Document(Japanese)[http://eimxml.rubyforge.org/ja/]
13
- * Document(English)[http://eimxml.rubyforge.org/en/]
14
- * MercurialRepository[https://hg.hinet.mydns.jp/eim_xml/]
15
-
16
- = Sample
17
- :lang:ja
18
- 例えば、次のようなHTMLを作成する場合は
19
-
20
- :lang:en
21
- For example, to construct html like bellow
22
-
23
- :lang:
24
- <html>
25
- <head>
26
- <title>TITLE</title>
27
- </head>
28
- <body>
29
- <p>Texts...</p>
30
- </body>
31
- </html>
32
-
33
- :lang:ja
34
- スクリプトは以下のように記述します。
35
-
36
- :lang:en
37
- write script like bellow.
38
-
39
- :lang:
40
- #!/usr/bin/ruby
41
- # require "rubygems"
42
- require "eim_xml/xhtml"
43
-
44
- include EimXML::XHTML
45
- html = HTML.new do |html|
46
- html << Head.new do |head|
47
- head << Title.new do |title|
48
- title << "TITLE"
49
- end
50
- end
51
- html << Body.new do |body|
52
- body << P.new do |par|
53
- par << "Text..."
54
- end
55
- end
56
- end
57
-
58
- html.write($stdout, false)
@@ -1,648 +0,0 @@
1
- # Test for eim_xml.rb
2
- #
3
- # Copyright (C) 2006, KURODA Hiraku <hiraku@hinet.mydns.jp>
4
- # You can redistribute it and/or modify it under GPL2.
5
-
6
- require "test/unit"
7
- require "eim_xml"
8
- require "spec"
9
-
10
- class PCStringTest < Test::Unit::TestCase
11
- include EimXML
12
-
13
- def test_encode
14
- assert_equal("&lt;&gt;&quot;&apos;&amp;", PCString.encode("<>\"'&"))
15
- assert_equal("&amp;test;", PCString.encode("&test;"))
16
- assert_equal("&amp;amp;", PCString.encode("&amp;"))
17
- end
18
-
19
- def test_new
20
- assert_equal("&amp;", PCString.new("&").encoded_string)
21
- assert_equal("&", PCString.new("&", true).encoded_string)
22
- end
23
-
24
- def test_equal
25
- p1 = PCString.new("str")
26
- p2 = PCString.new("str")
27
- assert_equal(p1, p2)
28
-
29
- assert_not_equal(p1, "str")
30
- end
31
-
32
- def test_to_xml
33
- assert_equal("&amp;amp;", PCString.new("&amp;").to_xml)
34
- end
35
- end
36
-
37
- class ElementTest < Test::Unit::TestCase
38
- include EimXML
39
-
40
- class Dummy < Element
41
- def chgname(name)
42
- self.name = name
43
- end
44
- end
45
-
46
- def test_name
47
- e = Element.new("el")
48
- assert_equal(:el, e.name)
49
- assert_raises(NoMethodError){e.name="changed"}
50
-
51
- d = Dummy.new("el1")
52
- assert_equal(:el1, d.name)
53
- d.chgname(:el2)
54
- assert_equal(:el2, d.name)
55
- d.chgname("el3")
56
- assert_equal(:el3, d.name)
57
- end
58
-
59
- def test_attributes
60
- e = Element.new("el", {"a1"=>"v1", "a2"=>"v2", "a3"=>nil})
61
- assert_equal(:el, e.name)
62
- assert_equal({:a1=>"v1", :a2=>"v2", :a3=>nil}, e.attributes)
63
- end
64
-
65
- def test_bracket
66
- e = Element.new(:el, :attr=>"value")
67
- e << "test"
68
- assert_equal("value", e[:attr])
69
- assert_equal("test", e[0])
70
- end
71
-
72
- def test_add_attribute
73
- e = Element.new("el")
74
- e.add_attribute("key_str", "value1")
75
- e.add_attribute(:key_sym, "value2")
76
- assert_equal({:key_str=>"value1", :key_sym=>"value2"}, e.attributes)
77
- e.add_attribute(:nil, nil)
78
- assert_equal({:key_str=>"value1", :key_sym=>"value2", :nil=>nil}, e.attributes)
79
- end
80
-
81
- def test_del_attribute
82
- e = Element.new("el", {:a1=>"v1", :a2=>"v2"})
83
- e.del_attribute("a1")
84
- assert_equal({:a2=>"v2"}, e.attributes)
85
- e.del_attribute(:a2)
86
- assert_equal({}, e.attributes)
87
- end
88
-
89
- def test_contents
90
- sub = Element.new("sub")
91
- e = Element.new("el") << "String1" << "String2" << sub
92
- assert_equal(["String1", "String2", sub], e.contents)
93
- end
94
-
95
- def test_add
96
- e = Element.new("el").add(Element.new("sub"))
97
- assert_instance_of(Element, e, "add Element")
98
- assert_equal(:el, e.name)
99
-
100
- e = Element.new("el")
101
- e.add(Element.new("sub1"))
102
- e.add([Element.new("sub2").add("text"), "string"])
103
- assert_equal([Element.new("sub1"), Element.new("sub2").add("text"), "string"], e.contents, "add Array")
104
-
105
- e = Element.new("el")
106
- e.add(nil)
107
- assert_equal(0, e.contents.size, "add nil")
108
-
109
- e = Element.new("el").add(:symbol)
110
- assert_equal([:symbol], e.contents, "add anything(which has to_s)")
111
- assert_equal("<el>symbol</el>", e.to_xml)
112
-
113
- e = Element.new("super") << Element.new("sub")
114
- assert_equal(:super, e.name)
115
- assert_equal([Element.new("sub")], e.contents)
116
- end
117
-
118
- def test_to_xml_with_indent
119
- e = Element.new("el")
120
- s = String.new
121
- assert_equal(s.object_id, e.to_xml_with_indent(s).object_id)
122
- assert_equal("<el />", s)
123
-
124
- e = Element.new("super")
125
- e << Element.new("sub")
126
- assert_equal("<super><sub /></super>", e.to_xml_with_indent)
127
- e << Element.new("sub2")
128
- assert_equal("<super>\n <sub />\n <sub2 />\n</super>", e.to_xml_with_indent)
129
- assert_equal(" <super>\n <sub />\n <sub2 />\n </super>", e.to_xml_with_indent("", 1))
130
- assert_equal("<super>\n <sub />\n <sub2 />\n </super>", e.to_xml_with_indent("", 1, false))
131
-
132
- s = Element.new("supersuper")
133
- s << e
134
- assert_equal("<supersuper><super>\n <sub />\n <sub2 />\n</super></supersuper>", s.to_xml_with_indent)
135
-
136
- e = Element.new("el") << "str"
137
- s = Element.new("sub")
138
- s << "inside"
139
- e << s
140
- assert_equal("<el>\n str\n <sub>inside</sub>\n</el>", e.to_xml_with_indent)
141
-
142
- e = Element.new("el")
143
- e.attributes["a1"] = "v1"
144
- e.attributes["a2"] = "'\"<>&"
145
- s = e.to_xml_with_indent
146
- assert_match(/\A<el ([^>]*) \/>\z/, s)
147
- assert_match(/a1='v1'/, s)
148
- assert_match(/a2='&apos;&quot;&lt;&gt;&amp;'/, s)
149
-
150
- e = Element.new("el", {"a1"=>nil})
151
- assert_equal("<el a1='a1' />", e.to_xml_with_indent)
152
- end
153
-
154
- def test_to_xml
155
- el = Element.new("el")
156
- ex = "<el />"
157
- assert_equal(ex, el.to_xml)
158
-
159
- s = ""
160
- r = el.to_xml(s)
161
- assert_equal(ex, r)
162
- assert_equal(s.object_id, r.object_id)
163
- end
164
-
165
- def test_spcial_string
166
- e = Element.new("el") << "&\"'<>"
167
- e << PCString.new("&\"'<>", true)
168
- e.attributes["key"] = PCString.new("&\"'<>", true)
169
- assert_equal(%[<el key='&\"'<>'>\n &amp;&quot;&apos;&lt;&gt;\n &\"'<>\n</el>], e.to_s)
170
- end
171
-
172
- def test_dup
173
- e = Element.new("el")
174
- e.attributes["key"] = "value"
175
- e << "String"
176
- e << "Freeze".freeze
177
- s = Element.new("sub")
178
- s.attributes["subkey"] = "subvalue"
179
- e << s
180
- f = e.dup
181
-
182
- assert_equal(e.attributes.object_id, f.attributes.object_id)
183
- assert_equal(e.contents.object_id, f.contents.object_id)
184
-
185
- assert_equal(e.to_s, f.to_s)
186
-
187
- e = Element.new("el")
188
- e.hold_space
189
- f = e.dup
190
- assert(f.hold_space?)
191
- end
192
-
193
- def test_clone
194
- e = Element.new("el")
195
- e.attributes["key"] = "value"
196
- e << "String"
197
- e << "Freeze".freeze
198
- s = Element.new("sub")
199
- s.attributes["subkey"] = "subvalue"
200
- e << s
201
- f = e.clone
202
-
203
- assert_equal(e.attributes.object_id, f.attributes.object_id)
204
- assert_equal(e.contents.object_id, f.contents.object_id)
205
-
206
- assert_equal(e.to_s, f.to_s)
207
-
208
- e = Element.new("el")
209
- e.hold_space
210
- f = e.clone
211
- assert(f.hold_space?)
212
- end
213
-
214
- def test_hold_space
215
- e = Element.new("el") << "Line1" << "Line2"
216
- s = Element.new("sub") << "Sub1" << "Sub2"
217
- ss = Element.new("subsub") << "ss1" << "ss2"
218
- s << ss
219
- e << s
220
- e.hold_space
221
- assert_equal("<el>Line1Line2<sub>Sub1Sub2<subsub>ss1ss2</subsub></sub></el>", e.to_s)
222
-
223
- e.unhold_space
224
- assert_equal("<el>\n Line1\n Line2\n <sub>\n Sub1\n Sub2\n <subsub>\n ss1\n ss2\n </subsub>\n </sub>\n</el>", e.to_s)
225
-
226
- e = Element.new("e")
227
- assert_equal(e.object_id, e.hold_space.object_id)
228
- assert_equal(e.object_id, e.unhold_space.object_id)
229
- end
230
-
231
- def test_equal
232
- e1 = Element.new("el")
233
- e1.attributes["key"] = "value"
234
- s = Element.new("sub")
235
- s << "String"
236
- e1 << s
237
- e2 = e1.dup
238
- assert_equal(e1, e2)
239
-
240
- e3 = Element.new("e")
241
- e3.attributes["key"] = "value"
242
- s = Element.new("sub")
243
- s << "String"
244
- e3 << s
245
- assert_not_equal(e1, e3)
246
-
247
- e3 = Element.new("e")
248
- e3.attributes["k"] = "value"
249
- s = Element.new("sub")
250
- s << "String"
251
- e3 << s
252
- assert_not_equal(e1, e3)
253
-
254
- e3 = Element.new("e")
255
- e3.attributes["key"] = "v"
256
- s = Element.new("sub")
257
- s << "String"
258
- e3 << s
259
- assert_not_equal(e1, e3)
260
-
261
- e3 = Element.new("e")
262
- e3.attributes["key"] = "value"
263
- s = Element.new("sub")
264
- s << "S"
265
- e3 << s
266
- assert_not_equal(e1, e3)
267
-
268
- e3 = Element.new("e")
269
- e3.attributes["key"] = "value"
270
- s = Element.new("s")
271
- s << "String"
272
- e3 << s
273
- assert_not_equal(e1, e3)
274
-
275
- assert_not_equal(e1, "string")
276
- end
277
-
278
- def test_new_with_block
279
- base = nil
280
- e = Element.new("base") do |b|
281
- b["attr"]="value"
282
- b << Element.new("sub")
283
- base = b
284
- end
285
- assert_same(e, base)
286
- e2 = Element.new("base", "attr"=>"value")
287
- e2 << Element.new("sub")
288
- assert_equal(e, e2)
289
-
290
- e = Element.new("base") do |e|
291
- e <<= Element.new("sub1") do |e|
292
- e <<= Element.new("sub12")
293
- end
294
- e <<= Element.new("sub2")
295
- end
296
- base = Element.new("base")
297
- sub1 = Element.new("sub1")
298
- sub1 << Element.new("sub12")
299
- sub2 = Element.new("sub2")
300
- base << sub1 << sub2
301
- assert_equal(base, e)
302
- end
303
-
304
- def test_symbol_string_compatible
305
- sym = Element.new(:tag, :attr=>"value")
306
- str = Element.new("tag", "attr"=>"value")
307
-
308
- assert_equal(sym.to_s, str.to_s)
309
- assert_equal(sym, str)
310
- end
311
-
312
- def test_match
313
- e = Element.new(:tag, :attr=>"value")
314
- assert(e.match?(:tag))
315
- assert(e.match?(:tag, :attr=>"value"))
316
- assert(! e.match?(:t))
317
- assert(! e.match?(:tag, :attr2=>"value"))
318
- assert(! e.match?(:tag, :attr=>"value2"))
319
-
320
- assert(e.match?(Element.new(:tag)))
321
- assert(e.match?(Element.new(:tag, :attr=>"value")))
322
- assert(! e.match?(Element.new(:t)))
323
- assert(! e.match?(Element.new(:tag, :attr2=>"value")))
324
- assert(! e.match?(Element.new(:tag, :attr=>"value2")))
325
-
326
- assert(e.match?(/ag/))
327
- assert(e.match?(/ag/, /tt/=>/al/))
328
- assert(! e.match?(/elem/))
329
- assert(! e.match?(/tag/, /attr2/=>/val/))
330
- assert(! e.match?(/tag/, /attr/=>/v2/))
331
-
332
- assert(e.match?(:tag, :attr=>/val/))
333
- assert(e.match?(/t/, /at/=>"value"))
334
-
335
- e = Element.new(:tag, :attr1=>"value", :attr2=>"test")
336
- assert(e.match?(:tag, /attr/=>"value"))
337
- assert(e.match?(:tag, /attr/=>/t/))
338
-
339
- assert(e.match?(Element))
340
- assert(!e.match?(Dummy))
341
- assert(!e.match?(String))
342
-
343
- e1 = Element.new(:tag, :attr=>:value)
344
- e2 = Element.new(:tag, :attr=>"value")
345
- assert(e1.match?(e2))
346
- assert(e2.match?(e1))
347
- end
348
-
349
- def test_match_by_array
350
- e = Element.new(:tag, :attr=>"value", :a2=>"v2")
351
- assert(e.match?([:tag]))
352
- assert(e.match?([:tag, {:attr=>"value"}]))
353
- assert(e.match?([:tag, {:attr=>"value", :a2=>"v2"}]))
354
- assert(e.match?([/tag/, {/a/=>/v/}]))
355
- end
356
-
357
- def test_match_operator
358
- e = Element.new(:tag, :attr=>"value", :a2=>"v2")
359
- assert_match(:tag, e)
360
- assert_match(Element.new(:tag), e)
361
- assert_match([:tag], e)
362
- assert_match([:tag, {:attr=>"value"}], e)
363
- assert_match(Element.new(:tag, :a2=>"v2"), e)
364
- assert_match([/t/, {/a/=>/v/}], e)
365
-
366
- assert(e !~ :t)
367
- assert(e !~ Element.new(:t))
368
- assert(e !~ [:t])
369
- assert(e !~ [:tag, {:a=>"v"}])
370
- assert(e !~ Element.new(:tag, :a=>"v"))
371
- end
372
-
373
- def test_has?
374
- e = Element.new(:base) do |b|
375
- b <<= Element.new(:sub) do |s|
376
- s <<= Element.new(:deep) do |d|
377
- d << "text"
378
- end
379
- end
380
- b <<= Element.new(:sub, :attr=>"value")
381
- end
382
-
383
- assert(e.has?(:base))
384
- assert(e.has?(:sub))
385
- assert(e.has?(:sub, :attr=>"value"))
386
- assert(!e.has?(:sub, :attr=>"value", :attr2=>""))
387
- assert(e.has?(:deep))
388
- assert(! e.has?(:deep, {}, false))
389
-
390
- assert(e.has?(String))
391
-
392
- e = DSL.element(:base) do
393
- element(:sub, :sym=>:v1, "string"=>"v2")
394
- end
395
- assert(e.has?(Element.new(:sub, :sym=>"v1")))
396
- assert(e.has?(Element.new(:sub, "sym"=>"v1")))
397
- assert(e.has?(Element.new(:sub, "string"=>:v2)))
398
- assert(e.has?(Element.new(:sub, :string=>:v2)))
399
- end
400
-
401
- def test_has_element?
402
- e = Element.new(:base) do |b|
403
- b <<= Element.new(:sub) do |s|
404
- s <<= Element.new(:deep) do |d|
405
- d << "text"
406
- end
407
- end
408
- b <<= Element.new(:sub, :attr=>"value")
409
- end
410
-
411
- assert(e.has_element?(:base))
412
- assert(e.has_element?(:sub))
413
- assert(e.has_element?(:sub, :attr=>"value"))
414
- assert(!e.has_element?(:sub, :attr=>"value", :attr2=>""))
415
- assert(e.has_element?(:deep))
416
- assert(! e.has_element?(:deep, {}, false))
417
-
418
- assert(e.has_element?(String))
419
-
420
- e = DSL.element(:base) do
421
- element(:sub, :sym=>:v1, "string"=>"v2")
422
- end
423
- assert(e.has_element?(Element.new(:sub, :sym=>"v1")))
424
- assert(e.has_element?(Element.new(:sub, "sym"=>"v1")))
425
- assert(e.has_element?(Element.new(:sub, "string"=>:v2)))
426
- assert(e.has_element?(Element.new(:sub, :string=>:v2)))
427
- end
428
-
429
- def test_find
430
- s1 = Element.new(:sub)
431
- d = Element.new(:deep)
432
- d << "3rd"
433
- s1 << "2nd" << d
434
- s2 = Element.new(:sub, :attr=>"value")
435
- e = Element.new(:base)
436
- e << "1st" << s1 << s2
437
-
438
- assert_equal([d], e.find(:deep))
439
- assert_equal([s1, s2], e.find(:sub))
440
- assert_equal([e, s1, d, s2], e.find(//))
441
-
442
- assert_equal(["1st", "2nd", "3rd"], e.find(String))
443
- end
444
- end
445
-
446
- class SymbolKeyHashTest < Test::Unit::TestCase
447
- SKH = EimXML::SymbolKeyHash
448
-
449
- def test_new
450
- s = SKH.new({"key1"=>"value1", :key2=>"value2"})
451
- assert_equal({:key1=>"value1", :key2=>"value2"}, s)
452
- end
453
-
454
- def test_update
455
- h = {"key"=>"value"}
456
- s = SKH.new
457
- s.update(h)
458
- assert_equal({:key=>"value"}, s)
459
-
460
- s2 = SKH.new
461
- s2.update(s)
462
- assert_equal(s, s2)
463
- end
464
-
465
- def test_merge
466
- s = SKH.new
467
- s2 = s.merge({"key"=>"value"})
468
- assert_equal({}, s)
469
- assert_equal({:key=>"value"}, s2)
470
- end
471
-
472
- def test_merge!
473
- s = SKH.new
474
- s2 = s.merge!({"key"=>"value"})
475
- h = {:key=>"value"}
476
- assert_equal(h, s)
477
- assert_equal(h, s2)
478
- end
479
-
480
- def test_store
481
- s = SKH.new
482
- s.store(:sym1, "value1")
483
- s.store("str1", "value2")
484
- s[:sym2] = "value3"
485
- s["str2"] = "value4"
486
-
487
- assert_equal({:sym1=>"value1", :str1=>"value2", :sym2=>"value3", :str2=>"value4"}, s)
488
- end
489
- end
490
-
491
- describe EimXML::DSL do
492
- it "scope is in instance of EimXML::DSL" do
493
- outer = inner = nil
494
- e3 = e2 = nil
495
- block_executed = false
496
- e = EimXML::DSL.element(:out, :k1=>"v1") do
497
- outer = self
498
- e2 = element(:in, :k2=>"v2") do
499
- block_executed = true
500
- inner = self
501
- e3 = element(:deep)
502
- end
503
- end
504
-
505
- block_executed.should == true
506
- outer.should be_kind_of(EimXML::DSL)
507
- inner.should be_kind_of(EimXML::DSL)
508
- outer.object_id.should == inner.object_id
509
-
510
- e.name.should == :out
511
- e[:k1].should == "v1"
512
- e[0].name.should == :in
513
- e[0][:k2].should == "v2"
514
- e[0][0].name.should == :deep
515
- e2.object_id.should == e[0].object_id
516
- e3.object_id.should == e[0][0].object_id
517
- end
518
- end
519
-
520
- describe "Subclass of EimXML::BaseDSL" do
521
- class DSL1 < EimXML::BaseDSL
522
- register([EimXML::Element, "call"])
523
- register(Hash)
524
- register(String, Array, Object)
525
- end
526
-
527
- it "register" do
528
- lambda{EimXML::DSL.call(:dummy)}.should raise_error(NoMethodError)
529
- lambda{EimXML::BaseDSL.call(:dummy)}.should raise_error(NoMethodError)
530
- lambda{DSL1.element(:dummy)}.should raise_error(NoMethodError)
531
- DSL1.call(:dummy).should be_kind_of(EimXML::Element)
532
- DSL1.hash.should be_kind_of(Hash)
533
- DSL1.string.should be_kind_of(String)
534
- DSL1.array.should be_kind_of(Array)
535
- DSL1.object.should be_kind_of(Object)
536
- end
537
- end
538
-
539
- describe EimXML::OpenDSL do
540
- it "scope of block is one of outside" do
541
- @scope_checker_variable = 1
542
- block_executed = false
543
- d = EimXML::OpenDSL.new do |d|
544
- block_executed = true
545
- d.should be_kind_of(EimXML::OpenDSL)
546
- d.container.should be_nil
547
- d.element(:base, :key1=>"v1") do
548
- @scope_checker_variable.should == 1
549
- self.should_not be_kind_of(EimXML::Element)
550
- d.container.should be_kind_of(EimXML::Element)
551
- d.container.should == EimXML::Element.new(:base, :key1=>"v1")
552
- d.element(:sub, :key2=>"v2") do
553
- d.container.should be_kind_of(EimXML::Element)
554
- d.container.should == EimXML::Element.new(:sub, :key2=>"v2")
555
- end
556
- d.element(:sub2).should == EimXML::Element.new(:sub2)
557
- end
558
- end
559
- block_executed.should be_true
560
- end
561
-
562
- it "DSL methods return element" do
563
- d = EimXML::OpenDSL.new
564
- d.container.should be_nil
565
- r = d.element(:base, :key1=>"v1") do
566
- d.element(:sub, :key2=>"v2")
567
- end
568
- r.should == EimXML::DSL.element(:base, :key1=>"v1") do
569
- element(:sub, :key2=>"v2")
570
- end
571
- end
572
-
573
- it "DSL method's block given instance of OpenDSL" do
574
- e = EimXML::OpenDSL.new.element(:base) do |d|
575
- d.should be_kind_of(EimXML::OpenDSL)
576
- d.container.name.should == :base
577
- d.element(:sub) do |d2|
578
- d2.object_id.should == d.object_id
579
- end
580
- end
581
-
582
- e.should == EimXML::DSL.element(:base) do
583
- element(:sub)
584
- end
585
- end
586
-
587
- it "ensure reset container when error raised" do
588
- EimXML::OpenDSL.new do |d|
589
- begin
590
- d.element(:base) do
591
- begin
592
- d.element(:sub) do
593
- raise "OK"
594
- end
595
- rescue RuntimeError => e
596
- raise unless e.message=="OK"
597
- d.container.name.should == :base
598
- raise
599
- end
600
- end
601
- rescue RuntimeError => e
602
- raise unless e.message=="OK"
603
- d.container.should == nil
604
- end
605
- end
606
- end
607
-
608
- it "respond to add" do
609
- r = EimXML::OpenDSL.new.element(:base) do |d|
610
- d.add "text"
611
- d.element(:sub) do
612
- s = EimXML::Element.new(:sub)
613
- s.add("sub text")
614
- d.add("sub text").should == s
615
- end
616
- end
617
-
618
- r.should == EimXML::DSL.element(:base) do
619
- add "text"
620
- element(:sub) do
621
- add "sub text"
622
- end
623
- end
624
- end
625
-
626
- it "respond to <<" do
627
- r = EimXML::OpenDSL.new.element(:base) do |d|
628
- b = EimXML::Element.new(:base)
629
- b << "text" << "next"
630
- (d << "text" << "next").should == b
631
- end
632
- r.should == EimXML::DSL.element(:base) do
633
- add "text"
634
- add "next"
635
- end
636
- end
637
-
638
- it "can call directly element method" do
639
- r = EimXML::OpenDSL.element(:base) do |d|
640
- d.element(:sub)
641
- d.element(:sub2)
642
- end
643
- r.should == EimXML::DSL.element(:base) do
644
- element(:sub)
645
- element(:sub2)
646
- end
647
- end
648
- end