eimxml 0.0.2 → 0.0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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