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.
@@ -0,0 +1,260 @@
1
+ require "eim_xml/formatter"
2
+ require "eim_xml/dsl"
3
+
4
+ describe EimXML::Formatter do
5
+ describe ".write" do
6
+ it "should return output object" do
7
+ s = ""
8
+ EimXML::Formatter.write(EimXML::Element.new(:e), :out=>s).should be_equal(s)
9
+ end
10
+
11
+ it "should return string when destination not given" do
12
+ r = EimXML::Formatter.write(EimXML::Element.new(:e))
13
+ r.should be_kind_of(String)
14
+ end
15
+
16
+ describe "should return formatted elements string" do
17
+ def write(*arg)
18
+ EimXML::Formatter.write(*arg)
19
+ end
20
+
21
+ it "(element not have content)"do
22
+ write(EimXML::DSL.element(:e)).should == "<e />\n"
23
+ end
24
+
25
+ it "(empty element which has attributes)" do
26
+ r = (write(EimXML::DSL.element(:e, :a1=>"v1", :a2=>"v2")) =~ %r[<e (a.='v.') (a.='v.') />])
27
+ r.should_not be_nil
28
+ [$1, $2].sort.should == ["a1='v1'", "a2='v2'"]
29
+ end
30
+
31
+ it "(element in element)" do
32
+ e = EimXML::DSL.element(:e) do
33
+ element(:s)
34
+ end
35
+ write(e).should == <<EOT
36
+ <e>
37
+ <s />
38
+ </e>
39
+ EOT
40
+ end
41
+
42
+ it "(elements in element)" do
43
+ e = EimXML::DSL.element(:e) do
44
+ element(:s1)
45
+ element(:s2)
46
+ end
47
+ write(e).should == <<EOT
48
+ <e>
49
+ <s1 />
50
+ <s2 />
51
+ </e>
52
+ EOT
53
+ end
54
+
55
+ it "(comment in element)" do
56
+ e = EimXML::DSL.element(:e) do
57
+ comment("multi\nline\n pre-indented\n comment")
58
+ end
59
+ write(e).should == <<EOT
60
+ <e>
61
+ <!-- multi
62
+ line
63
+ pre-indented
64
+ comment -->
65
+ </e>
66
+ EOT
67
+ end
68
+
69
+ it "(string in element)" do
70
+ e = EimXML::Element.new(:e)
71
+ e.add("string")
72
+ write(e).should == "<e>\n string\n</e>\n"
73
+
74
+ esc = "&<>'\""
75
+ esc = "&amp;&lt;&gt;\n&apos;&quot;"
76
+ write(EimXML::Element.new(:e, :a=>"&<>\n'\"").add("&<>\n'\"")).should == "<e a='&amp;&lt;&gt;\n&apos;&quot;'>\n &amp;&lt;&gt;\n &apos;&quot;\n</e>\n"
77
+ write(EimXML::Element.new(:e, :a=>"&<>\n'\"").add(EimXML::PCString.new("&<>\n'\"", true))).should == "<e a='&amp;&lt;&gt;\n&apos;&quot;'>\n &<>\n '\"\n</e>\n"
78
+ end
79
+
80
+ it "(multi-line string in element)" do
81
+ e = EimXML::Element.new(:e)
82
+ e.add("multi\nline")
83
+ write(e).should == <<EOT
84
+ <e>
85
+ multi
86
+ line
87
+ </e>
88
+ EOT
89
+ end
90
+
91
+ describe "(preserve spaces" do
92
+ it "name of element" do
93
+ e = EimXML::DSL.element(:e) do
94
+ element(:pre1) do
95
+ element(:sub1).add("text")
96
+ element(:sub2)
97
+ end
98
+ element(:pre2).add("multi\nline\ntext")
99
+ element(:sub1).add("text")
100
+ end
101
+ s = <<EOT
102
+ <e>
103
+ <pre1><sub1>text</sub1><sub2 /></pre1>
104
+ <pre2>multi
105
+ line
106
+ text</pre2>
107
+ <sub1>
108
+ text
109
+ </sub1>
110
+ </e>
111
+ EOT
112
+
113
+ write(e, :preservers=>[:pre1, :pre2]).should == s
114
+ end
115
+
116
+ it "class of element" do
117
+ m = Module.new
118
+ class m::Pre < EimXML::Element
119
+ def initialize(n=nil)
120
+ super(n||"pre")
121
+ end
122
+ end
123
+ class m::P1 < m::Pre
124
+ def initialize(n=nil)
125
+ super(n||"p1")
126
+ end
127
+ end
128
+ class m::P2 < m::P1
129
+ def initialize
130
+ super("p2")
131
+ end
132
+ end
133
+
134
+ e = EimXML::Element.new(:e)
135
+ e << m::Pre.new.add("text\nwith\nnewline")
136
+ e << m::Pre.new("dummy").add("t\nn")
137
+ e << m::P1.new.add("t1\nn")
138
+ e << m::P2.new.add("t2\nn")
139
+ e << m::Pre.new.add(EimXML::Element.new(:s).add("t\ns"))
140
+ e << m::P2.new.add(EimXML::Element.new(:s).add("t\ns2"))
141
+ e << EimXML::Element.new(:s).add(EimXML::Element.new(:s).add("t\ns"))
142
+
143
+ s = <<EOT
144
+ <e>
145
+ <pre>text
146
+ with
147
+ newline</pre>
148
+ <dummy>t
149
+ n</dummy>
150
+ <p1>t1
151
+ n</p1>
152
+ <p2>t2
153
+ n</p2>
154
+ <pre><s>t
155
+ s</s></pre>
156
+ <p2><s>t
157
+ s2</s></p2>
158
+ <s>
159
+ <s>
160
+ t
161
+ s
162
+ </s>
163
+ </s>
164
+ </e>
165
+ EOT
166
+ write(e, :preservers=>[m::Pre]).should == s
167
+ end
168
+ end
169
+
170
+ it "(all)" do
171
+ s = <<EOT
172
+ <base>
173
+ <sub1 />
174
+ <sub2>
175
+ text2
176
+ </sub2>
177
+ <sub3 a1='v1'>
178
+ <sub31 />
179
+ <sub32>
180
+ text32
181
+ </sub32>
182
+ </sub3>
183
+ <sub4>
184
+ multi-line
185
+ text
186
+ </sub4>
187
+ <sub5>
188
+ <sub51 />
189
+ sub52
190
+ <sub53 />
191
+ sub54-1
192
+ sub54-2
193
+ </sub5>
194
+ </base>
195
+ EOT
196
+ e = EimXML::DSL.element(:base) do
197
+ element(:sub1)
198
+ element(:sub2).add("text2")
199
+ element(:sub3, :a1=>"v1") do
200
+ element(:sub31)
201
+ element(:sub32).add("text32")
202
+ end
203
+ element(:sub4).add("multi-line\ntext")
204
+ element(:sub5) do
205
+ element(:sub51)
206
+ add("sub52")
207
+ element(:sub53)
208
+ add("sub54-1\nsub54-2")
209
+ end
210
+ end
211
+ write(e).should == s
212
+ end
213
+ end
214
+ end
215
+ end
216
+
217
+ describe EimXML::Formatter::ElementWrapper do
218
+ before do
219
+ @out = ""
220
+ @opt = {:out=>@out, :preservers=>[], :a=>10, :b=>20}
221
+ @formatter = EimXML::Formatter.new(@opt)
222
+ @m = Module.new
223
+ class @m::Wrapper < EimXML::Formatter::ElementWrapper
224
+ def initialize(mocks)
225
+ @mocks = mocks
226
+ end
227
+
228
+ def contents(option)
229
+ @mocks
230
+ end
231
+ end
232
+ @mocks = [mock(:m1).as_null_object, mock(:m2).as_null_object]
233
+ @wrapper = @m::Wrapper.new(@mocks)
234
+ @xml = EimXML::Element.new(:e) do |e|
235
+ e << @wrapper
236
+ end
237
+ end
238
+
239
+ describe "#each" do
240
+ it "will give options from formatter" do
241
+ @wrapper.should_receive(:contents).with(:a=>10, :b=>20).and_return([])
242
+ @formatter.write(@xml)
243
+ end
244
+
245
+ it "yield result of contents" do
246
+ @mocks.each_with_index do |mock, index|
247
+ mock.should_receive(:to_s).and_return("m#{index}")
248
+ end
249
+ @formatter.write(@xml)
250
+ @out.should == "<e>\n m0\n m1\n</e>\n"
251
+ end
252
+
253
+ it "raise error when subclass of ElementWrapper is not implement #contents" do
254
+ class @m::Wrapper2 < EimXML::Formatter::ElementWrapper; end
255
+ @xml << @m::Wrapper2.new
256
+
257
+ expect{@formatter.write(@xml)}.to raise_error(NoMethodError)
258
+ end
259
+ end
260
+ end
@@ -0,0 +1,102 @@
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
@@ -0,0 +1,524 @@
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