eim_xml 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/parser_spec.rb DELETED
@@ -1,102 +0,0 @@
1
- require "eim_xml/parser"
2
-
3
- module Module.new::M
4
- include EimXML
5
-
6
- describe Parser do
7
- def parse(src)
8
- Parser.new(src).parse
9
- end
10
-
11
- it "'parser' method for test" do
12
- s = " <e /> "
13
- parse(s).should == Parser.new(s).parse
14
- end
15
-
16
- it "#parse with empty element" do
17
- parse("<e />").should == Element.new("e")
18
- parse("<e/>").should == Element.new("e")
19
-
20
- parse(%[<e key="value"/>]).should == Element.new("e", :key=>"value")
21
- parse(%[<e key='value'/>]).should == Element.new("e", :key=>"value")
22
- parse(%[<e key="value" />]).should == Element.new("e", :key=>"value")
23
- parse(%[<e key='value' />]).should == Element.new("e", :key=>"value")
24
-
25
- parse(%[<e key="value" key2="value2"/>]).should == Element.new("e", :key=>"value", :key2=>"value2")
26
- parse(%[<e key="value" key2="value2" />]).should == Element.new("e", :key=>"value", :key2=>"value2")
27
-
28
- s = " <e1 /> <e2 /> "
29
- p = Parser.new(s)
30
- p.parse.should == PCString.new(" ")
31
- p.parse.should == Element.new("e1")
32
- p.parse.should == PCString.new(" ")
33
- p.parse.should == Element.new("e2")
34
- end
35
-
36
- it "#parse with nonempty element" do
37
- parse("<super><sub /></super>").should == Element.new("super") << Element.new("sub")
38
-
39
- parse("<out><in></in></out>").should == Element.new("out") << Element.new("in")
40
-
41
- lambda{parse("<el></e>")}.should raise_error(ParseError, "End tag mismatched.")
42
- lambda{parse("<el><></el>")}.should raise_error(ParseError, "Syntax error.")
43
- end
44
-
45
- it "#parse with string" do
46
- e = parse("string&amp;")
47
- e.should be_kind_of(PCString)
48
- e.to_s.should == "string&amp;"
49
- e = parse(" string &amp; ")
50
- e.should be_kind_of(PCString)
51
- e.to_s.should == " string &amp; "
52
-
53
- e = Element.new("e")
54
- e << PCString.new(" string ")
55
- parse("<e> string </e>").should == e
56
-
57
- e = Element.new("e")
58
- e << PCString.new("string")
59
- parse("<e>string</e>").should == e
60
- end
61
-
62
- it "#parse escaped characters" do
63
- e = parse("&amp;&quot;&apos;&lt;&gt;")
64
- e.to_s.should == "&amp;&quot;&apos;&lt;&gt;"
65
- e.src.should == "&\"'<>"
66
- end
67
-
68
- it "#parse with holding space" do
69
- s = "<e> string with space\n</e>"
70
- e = Element.new("e")
71
- e << PCString.new(" string with space\n")
72
- parse(s).should == e
73
- parse(s).to_s.should == s
74
-
75
- s = "<ns:e> string with space\n</ns:e>"
76
- e = Element.new("ns:e")
77
- e << PCString.new(" string with space\n")
78
- parse(s).should == e
79
- parse(s).to_s.should == s
80
-
81
- s = "<a> string without space <b> string with space <a> string with space 2 </a> </b> </a>"
82
- oa = Element.new("a") << PCString.new(" string without space ")
83
- b = Element.new("b")
84
- b << PCString.new(" string with space ")
85
- ia = Element.new("a")
86
- ia << PCString.new(" string with space 2 ")
87
- b << ia
88
- b << PCString.new(" ")
89
- oa << b
90
- oa << PCString.new(" ")
91
- parse(s).should == oa
92
- parse(s).to_s.should == s
93
-
94
- s = "<a><b/></a>"
95
- a = Element.new("a")
96
- b = Element.new("b")
97
- a << b
98
- parse(s).should == a
99
- parse(s).to_s.should == "<a><b /></a>"
100
- end
101
- end
102
- end
data/spec/xhtml_spec.rb DELETED
@@ -1,524 +0,0 @@
1
- require "stringio"
2
- require "eim_xml/xhtml/dsl"
3
-
4
- module Module.new::M
5
- include EimXML
6
- include EimXML::XHTML
7
- XDSL = XHTML::DSL
8
-
9
- describe XHTML do
10
- it "DSL.base_ should raise NoMethodError" do
11
- lambda{XDSL.base_}.should raise_error(NoMethodError)
12
- end
13
-
14
- it "HTML" do
15
- h = HTML.new(:attr=>"value")
16
- h.should == Element.new(:html, :attr=>"value")
17
-
18
- h = HTML.new do |e|
19
- e <<= Element.new(:sub)
20
- end
21
- h2 = HTML.new
22
- h2 << Element.new(:sub)
23
- h2.should == h
24
-
25
- lambda{EimXML::DSL.html}.should raise_error(NoMethodError)
26
- XDSL.html(:key=>"v").should == HTML.new(:key=>"v")
27
- OpenDSL.html(:key=>"v").should == HTML.new(:key=>"v")
28
-
29
- h = HTML.new
30
- h.write_to.should == "<html />"
31
- h.prefix='<?xml version="1.0"?>'
32
- h.write_to.should == %[<?xml version="1.0"?>\n<html />]
33
- end
34
-
35
- it "HEAD" do
36
- HEAD.new.name.should == :head
37
- XDSL.head.should be_kind_of(HEAD)
38
- OpenDSL.head.should be_kind_of(HEAD)
39
- end
40
-
41
- it "META" do
42
- META.new.name.should == :meta
43
- XDSL.meta.should be_kind_of(META)
44
- OpenDSL.meta.should be_kind_of(META)
45
- end
46
-
47
- it "LINK" do
48
- LINK.new.name.should == :link
49
- XDSL.link.should be_kind_of(LINK)
50
- OpenDSL.link.should be_kind_of(LINK)
51
- end
52
-
53
- it "STYLE" do
54
- STYLE.new.name.should == :style
55
- XDSL.style.should be_kind_of(STYLE)
56
- OpenDSL.style.should be_kind_of(STYLE)
57
- end
58
-
59
- it "IMG" do
60
- IMG.new.name.should == :img
61
- XDSL.img.should be_kind_of(IMG)
62
- OpenDSL.img.should be_kind_of(IMG)
63
- end
64
-
65
- it "SCRIPT" do
66
- SCRIPT.new.name.should == :script
67
- XDSL.script.should be_kind_of(SCRIPT)
68
- OpenDSL.script.should be_kind_of(SCRIPT)
69
- end
70
-
71
- it "TITLE" do
72
- TITLE.new.name.should == :title
73
- XDSL.title.should be_kind_of(TITLE)
74
- OpenDSL.title.should be_kind_of(TITLE)
75
- end
76
-
77
- it "BODY" do
78
- BODY.new.name.should == :body
79
- XDSL.body.should be_kind_of(BODY)
80
- OpenDSL.body.should be_kind_of(BODY)
81
- end
82
-
83
- it "PRE" do
84
- PRE.new.name.should == :pre
85
- XDSL.pre.should be_kind_of(PRE)
86
- OpenDSL.pre.should be_kind_of(PRE)
87
- end
88
-
89
- it "Hn" do
90
- h1 = Hn.new(1)
91
- h6 = Hn.new(6)
92
- h1.name.should == :h1
93
- h1.should be_kind_of(H1)
94
- h6.name.should == :h6
95
- h6.should be_kind_of(H6)
96
- lambda{Hn.new(7)}.should raise_error(ArgumentError)
97
- lambda{Hn.new(0)}.should raise_error(ArgumentError)
98
-
99
- h = Hn.new(1, :key=>:value) do |hn|
100
- hn << "test"
101
- end
102
- h[:key].should == :value
103
- h[0].should == "test"
104
-
105
- [
106
- [H1, XDSL.h1, OpenDSL.h1],
107
- [H2, XDSL.h2, OpenDSL.h2],
108
- [H3, XDSL.h3, OpenDSL.h3],
109
- [H4, XDSL.h4, OpenDSL.h4],
110
- [H5, XDSL.h5, OpenDSL.h5],
111
- [H6, XDSL.h6, OpenDSL.h6]
112
- ].each do |klass, dsl, od|
113
- dsl.should be_kind_of(klass)
114
- od.should be_kind_of(klass)
115
- end
116
- end
117
-
118
- it "P" do
119
- P.new.name.should == :p
120
- XDSL.p.should be_kind_of(P)
121
- OpenDSL.p.should be_kind_of(P)
122
- end
123
-
124
- it "A" do
125
- A.new.name.should == :a
126
- XDSL.a.should be_kind_of(A)
127
- OpenDSL.a.should be_kind_of(A)
128
- end
129
-
130
- it "EM" do
131
- EM.new.name.should == :em
132
- XDSL.em.should be_kind_of(EM)
133
- OpenDSL.em.should be_kind_of(EM)
134
- end
135
-
136
- it "STRONG" do
137
- STRONG.new.name.should == :strong
138
- XDSL.strong.should be_kind_of(STRONG)
139
- OpenDSL.strong.should be_kind_of(STRONG)
140
- end
141
-
142
- it "DIV" do
143
- DIV.new.name.should == :div
144
- XDSL.div.should be_kind_of(DIV)
145
- OpenDSL.div.should be_kind_of(DIV)
146
- end
147
-
148
- it "SPAN" do
149
- SPAN.new.name.should == :span
150
- XDSL.span.should be_kind_of(SPAN)
151
- OpenDSL.span.should be_kind_of(SPAN)
152
- end
153
-
154
- it "UL" do
155
- UL.new.name.should == :ul
156
- XDSL.ul.should be_kind_of(UL)
157
- OpenDSL.ul.should be_kind_of(UL)
158
- end
159
-
160
- it "OL" do
161
- OL.new.name.should == :ol
162
- XDSL.ol.should be_kind_of(OL)
163
- OpenDSL.ol.should be_kind_of(OL)
164
- end
165
-
166
- it "LI" do
167
- LI.new.name.should == :li
168
- XDSL.li.should be_kind_of(LI)
169
- OpenDSL.li.should be_kind_of(LI)
170
- end
171
-
172
- it "DL" do
173
- DL.new.name.should == :dl
174
- XDSL.dl.should be_kind_of(DL)
175
- OpenDSL.dl.should be_kind_of(DL)
176
- end
177
-
178
- it "DT" do
179
- DT.new.name.should == :dt
180
- XDSL.dt.should be_kind_of(DT)
181
- OpenDSL.dt.should be_kind_of(DT)
182
- end
183
-
184
- it "DD" do
185
- DD.new.name.should == :dd
186
- XDSL.dd.should be_kind_of(DD)
187
- OpenDSL.dd.should be_kind_of(DD)
188
- end
189
-
190
- it "TABLE" do
191
- TABLE.new.name.should == :table
192
- XDSL.table.should be_kind_of(TABLE)
193
- OpenDSL.table.should be_kind_of(TABLE)
194
- end
195
-
196
- it "CAPTION" do
197
- CAPTION.new.name.should == :caption
198
- XDSL.caption.should be_kind_of(CAPTION)
199
- OpenDSL.caption.should be_kind_of(CAPTION)
200
- end
201
-
202
- it "TR" do
203
- TR.new.name.should == :tr
204
- XDSL.tr.should be_kind_of(TR)
205
- OpenDSL.tr.should be_kind_of(TR)
206
- end
207
-
208
- it "TH" do
209
- TH.new.name.should == :th
210
- XDSL.th.should be_kind_of(TH)
211
- OpenDSL.th.should be_kind_of(TH)
212
- end
213
-
214
- it "TD" do
215
- TD.new.name.should == :td
216
- XDSL.td.should be_kind_of(TD)
217
- OpenDSL.td.should be_kind_of(TD)
218
- end
219
-
220
- it "FORM" do
221
- FORM.new.name.should == :form
222
- XDSL.form.should be_kind_of(FORM)
223
- OpenDSL.form.should be_kind_of(FORM)
224
-
225
- FORM.new.should_not include(HIDDEN)
226
- end
227
-
228
- it "FORM.new should be able to receive CGI::Session object and set random token" do
229
- s = mock("session")
230
- h = {}
231
- s.should_receive(:[]).any_number_of_times{|k| h[k]}
232
- s.should_receive(:[]=).any_number_of_times{|k, v| h[k]=v}
233
- f = FORM.new(:session=>s)
234
- h["token"].size.should == 40
235
- h["token"].should =~ /\A[0-9a-f]{40}\z/
236
- f.should include(HIDDEN.new(:name=>"token", :value=>h["token"]))
237
-
238
- s = mock("session")
239
- h = {}
240
- s.should_receive(:[]).any_number_of_times{|k| h[k]}
241
- s.should_receive(:[]=).any_number_of_times{|k, v| h[k]=v}
242
- f = FORM.new(:session=>s, :session_name=>"random_key")
243
- h["token"].should be_nil
244
- h["random_key"].size.should == 40
245
- h["random_key"].should =~ /\A[0-9a-f]{40}\z/
246
- f.should include(HIDDEN.new(:name=>"random_key", :value=>h["random_key"]))
247
-
248
- s = mock("session")
249
- h = {}
250
- s.should_receive(:[]).any_number_of_times{|k| h[k]}
251
- s.should_receive(:[]=).any_number_of_times{|k, v| h[k]=v}
252
- FORM.new(:session=>s)
253
- token = s["token"]
254
- FORM.new(:session=>s).should include(HIDDEN.new(:name=>"token", :value=>token))
255
- s["token"].should == token
256
- end
257
-
258
- it "TEXTAREA" do
259
- TEXTAREA.new(:name=>"item").should == Element.new(:textarea, :name=>"item")
260
- TEXTAREA.new(:name=>:item).should == Element.new(:textarea, :name=>:item)
261
- TEXTAREA.new(:name=>"item", :class=>"cv").should == Element.new(:textarea, :name=>"item", :class=>"cv")
262
-
263
- t = XDSL.textarea(:name=>"t")
264
- t.should be_kind_of(TEXTAREA)
265
- t[:name].should == "t"
266
-
267
- t = OpenDSL.textarea(:name=>"t")
268
- t.should be_kind_of(TEXTAREA)
269
- t[:name].should == "t"
270
- end
271
-
272
- it "BUTTON" do
273
- BUTTON.new.should == Element.new(:button)
274
- end
275
-
276
- it "INPUT" do
277
- INPUT.new(:type=>:test, :name=>:item, :value=>"v").should == Element.new(:input, :type=>:test, :name=>:item, :value=>"v")
278
- INPUT.new(:type=>"test", :name=>"item", :value=>"v").should == Element.new(:input, :type=>"test", :name=>"item", :value=>"v")
279
- INPUT.new(:type=>:test, :name=>:item, :value=>"v", :class=>"c").should == Element.new(:input, :type=>:test, :name=>:item, :value=>"v", :class=>"c")
280
-
281
- INPUT.new(:type=>:submit, :value=>"v").should == Element.new(:input, :type=>:submit, :value=>"v")
282
- INPUT.new(:type=>:submit, :name=>"item").should == Element.new(:input, :type=>:submit, :name=>"item")
283
-
284
- i = XDSL.input(:type=>:dummy, :name=>:n, :value=>:v)
285
- i.should be_kind_of(INPUT)
286
- i.should =~ INPUT.new(:type=>:dummy, :name=>:n, :value=>:v)
287
-
288
- i = OpenDSL.input(:type=>:dummy, :name=>:n, :value=>:v)
289
- i.should be_kind_of(INPUT)
290
- i.should == INPUT.new(:type=>:dummy, :name=>:n, :value=>:v)
291
- end
292
-
293
- it "HIDDEN" do
294
- HIDDEN.new(:name=>"item", :value=>"v").should == Element.new(:input, :type=>:hidden, :name=>"item", :value=>"v")
295
- HIDDEN.new(:name=>:item, :value=>"v").should == Element.new(:input, :type=>:hidden, :name=>:item, :value=>"v")
296
- HIDDEN.new(:name=>:item, :value=>"v", :class=>"c").should == Element.new(:input, :type=>:hidden, :name=>:item, :value=>"v", :class=>"c")
297
-
298
- h = XDSL.hidden(:name=>:n, :value=>:v)
299
- h.should be_kind_of(HIDDEN)
300
- h.should =~ HIDDEN.new(:name=>:n, :value=>:v)
301
-
302
- h = OpenDSL.hidden(:name=>:n, :value=>:v)
303
- h.should be_kind_of(HIDDEN)
304
- h.should == HIDDEN.new(:name=>:n, :value=>:v)
305
- end
306
-
307
- it "SUBMIT" do
308
- SUBMIT.new.should == Element.new(:button, :type=>:submit)
309
- SUBMIT.new(:value=>"OK").should == Element.new(:button, :type=>:submit, :value=>"OK")
310
- SUBMIT.new(:value=>"OK", :class=>"c").should == Element.new(:button, :type=>:submit, :value=>"OK", :class=>"c")
311
- opt = {:value=>"v", :name=>"n"}
312
- opt2 = opt.dup
313
- SUBMIT.new(opt2)
314
- opt2.should == opt
315
-
316
- s = XDSL.submit
317
- s.should be_kind_of(SUBMIT)
318
- s.should =~ SUBMIT.new
319
- (!s[:name]).should be_true
320
- (!s[:value]).should be_true
321
- s = XDSL.submit(:name=>:s, :value=>:v)
322
- s[:name].should == :s
323
- s[:value].should == :v
324
-
325
- s = OpenDSL.submit
326
- s.should be_kind_of(SUBMIT)
327
- s.should == SUBMIT.new
328
- s[:name].should be_nil
329
- s[:value].should be_nil
330
- s = OpenDSL.submit(:name=>:s, :value=>:v)
331
- s.should == SUBMIT.new(:name=>:s, :value=>:v)
332
- end
333
-
334
- it "TEXT" do
335
- TEXT.new(:name=>:item).should == Element.new(:input, :type=>:text, :name=>:item)
336
- TEXT.new(:name=>"item").should == Element.new(:input, :type=>:text, :name=>"item")
337
- TEXT.new(:name=>:item, :value=>"txt").should == Element.new(:input, :type=>:text, :name=>:item, :value=>"txt")
338
- TEXT.new(:name=>:item, :value=>"txt", :class=>"c").should == Element.new(:input, :type=>:text, :name=>:item, :value=>"txt", :class=>"c")
339
-
340
- t = XDSL.text(:name=>:n, :value=>:v)
341
- t.should be_kind_of(TEXT)
342
- t.should =~ TEXT.new(:name=>:n, :value=>:v)
343
-
344
- t = OpenDSL.text(:name=>:n, :value=>:v)
345
- t.should be_kind_of(TEXT)
346
- t.should == TEXT.new(:name=>:n, :value=>:v)
347
- end
348
-
349
- it "PASSWORD" do
350
- PASSWORD.new(:name=>:item).should == Element.new(:input, :type=>:password, :name=>:item)
351
- PASSWORD.new(:name=>"item").should == Element.new(:input, :type=>:password, :name=>"item")
352
- PASSWORD.new(:name=>:item, :value=>"txt").should == Element.new(:input, :type=>:password, :name=>:item, :value=>"txt")
353
- PASSWORD.new(:name=>:item, :value=>"txt", :class=>"c").should == Element.new(:input, :type=>:password, :name=>:item, :value=>"txt", :class=>"c")
354
-
355
- t = XDSL.password(:name=>:n, :value=>:v)
356
- t.should be_kind_of(PASSWORD)
357
- t.should =~ PASSWORD.new(:name=>:n, :value=>:v)
358
-
359
- t = OpenDSL.password(:name=>:n, :value=>:v)
360
- t.should be_kind_of(PASSWORD)
361
- t.should == PASSWORD.new(:name=>:n, :value=>:v)
362
- end
363
-
364
- it "FILE" do
365
- FILE.new(:name=>:foo).should == Element.new(:input, :type=>:file, :name=>:foo)
366
- XDSL.file(:name=>:foo).should =~ FILE.new(:name=>:foo)
367
-
368
- OpenDSL.file(:name=>:foo).should == FILE.new(:name=>:foo)
369
- end
370
-
371
- it "SELECT" do
372
- SELECT.new(:name=>:foo).should == Element.new(:select, :name=>:foo)
373
- XDSL.select(:name=>:foo).should == SELECT.new(:name=>:foo)
374
-
375
- OpenDSL.select(:name=>:foo).should == SELECT.new(:name=>:foo)
376
- end
377
-
378
- it "OPTION" do
379
- OPTION.new(:value=>:bar, :selected=>true){|e| e << "TEXT"}.should == Element.new(:option, :value=>:bar, :selected=>true){|e| e.add("TEXT")}
380
- XDSL.option(:value=>:bar).should == OPTION.new(:value=>:bar)
381
-
382
- OpenDSL.option(:value=>:bar).should == OPTION.new(:value=>:bar)
383
- end
384
-
385
- it "BR" do
386
- BR.new.name.should == :br
387
- XDSL.br.should be_kind_of(BR)
388
- OpenDSL.br.should be_kind_of(BR)
389
- end
390
-
391
- it "HR" do
392
- HR.new.name.should == :hr
393
- XDSL.hr.should be_kind_of(HR)
394
- OpenDSL.hr.should be_kind_of(HR)
395
- end
396
- end
397
-
398
- describe EimXML::XHTML::OpenDSL do
399
- it "replace EimXML::XHTML::DSL" do
400
- e = EimXML::XHTML::OpenDSL.html do |d|
401
- d.head do
402
- d.title.add "Title"
403
- end
404
- d.body do
405
- d.h1.add "Sample"
406
- d.p do
407
- d.add "text"
408
- d.add "next"
409
- end
410
- end
411
- end
412
- e.should == EimXML::XHTML::DSL.html do
413
- head do
414
- title.add "Title"
415
- end
416
- body do
417
- h1.add "Sample"
418
- p do
419
- add "text"
420
- add "next"
421
- end
422
- end
423
- end
424
- end
425
- end
426
-
427
- describe EimXML::XHTML::Formatter do
428
- describe "#write" do
429
- it "should set :preservers=>PRESERVE_SPACES to default option" do
430
- e = EimXML::XHTML::HTML.new
431
- EimXML::Formatter.should_receive(:write).with(e, :preservers=>EimXML::XHTML::PRESERVE_SPACES, :opt=>:dummy)
432
- EimXML::XHTML::Formatter.write(e, :opt=>:dummy)
433
- end
434
-
435
- it "should return string" do
436
- h = EimXML::XHTML::DSL.html do
437
- head do
438
- style.add("style\ntext")
439
- script.add("script\ntext")
440
- end
441
- body do
442
- div.add("text\nin\ndiv")
443
- pre.add("pre\nt")
444
- h1.add("1\nt")
445
- h2.add("2\nt")
446
- h3.add("3\nt")
447
- h4.add("4\nt")
448
- h5.add("5\nt")
449
- h6.add("6\nt")
450
- p.add("p\nt")
451
- a.add("a\nt")
452
- em.add("e\nt")
453
- strong.add("s\nt")
454
- span.add("sp\nt")
455
- li.add("li\nt")
456
- dt.add("dt\nt")
457
- dd.add("dd\nt")
458
- caption.add("c\nt")
459
- th.add("th\nt")
460
- td.add("td\nt")
461
- button.add("button\nt")
462
- end
463
- end
464
-
465
- s = <<EOT
466
- <html>
467
- <head>
468
- <style>style
469
- text</style>
470
- <script>script
471
- text</script>
472
- </head>
473
- <body>
474
- <div>
475
- text
476
- in
477
- div
478
- </div>
479
- <pre>pre
480
- t</pre>
481
- <h1>1
482
- t</h1>
483
- <h2>2
484
- t</h2>
485
- <h3>3
486
- t</h3>
487
- <h4>4
488
- t</h4>
489
- <h5>5
490
- t</h5>
491
- <h6>6
492
- t</h6>
493
- <p>p
494
- t</p>
495
- <a>a
496
- t</a>
497
- <em>e
498
- t</em>
499
- <strong>s
500
- t</strong>
501
- <span>sp
502
- t</span>
503
- <li>li
504
- t</li>
505
- <dt>dt
506
- t</dt>
507
- <dd>dd
508
- t</dd>
509
- <caption>c
510
- t</caption>
511
- <th>th
512
- t</th>
513
- <td>td
514
- t</td>
515
- <button>button
516
- t</button>
517
- </body>
518
- </html>
519
- EOT
520
- EimXML::XHTML::Formatter.write(h).should == s
521
- end
522
- end
523
- end
524
- end