htmlgrid 1.0.0

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.
Files changed (83) hide show
  1. data/History.txt +6 -0
  2. data/LICENCE.txt +515 -0
  3. data/Manifest.txt +82 -0
  4. data/README.txt +30 -0
  5. data/Rakefile +28 -0
  6. data/ext/htmlgrid/MANIFEST +3 -0
  7. data/ext/htmlgrid/Makefile +150 -0
  8. data/ext/htmlgrid/extconf.rb +33 -0
  9. data/ext/htmlgrid/grid.c +881 -0
  10. data/ext/htmlgrid/grid.o +0 -0
  11. data/ext/htmlgrid/htmlgrid.c +30 -0
  12. data/ext/htmlgrid/htmlgrid.o +0 -0
  13. data/ext/htmlgrid/htmlgrid.so +0 -0
  14. data/ext/htmlgrid/include/grid.h +79 -0
  15. data/ext/htmlgrid/include/htmlgrid.h +33 -0
  16. data/install.rb +1098 -0
  17. data/lib/htmlgrid/booleanvalue.rb +41 -0
  18. data/lib/htmlgrid/button.rb +36 -0
  19. data/lib/htmlgrid/centeredcomposite.rb +47 -0
  20. data/lib/htmlgrid/component.rb +232 -0
  21. data/lib/htmlgrid/composite.rb +350 -0
  22. data/lib/htmlgrid/datevalue.rb +39 -0
  23. data/lib/htmlgrid/div.rb +37 -0
  24. data/lib/htmlgrid/divcomposite.rb +52 -0
  25. data/lib/htmlgrid/divform.rb +35 -0
  26. data/lib/htmlgrid/divlist.rb +26 -0
  27. data/lib/htmlgrid/divtemplate.rb +12 -0
  28. data/lib/htmlgrid/dojotoolkit.rb +173 -0
  29. data/lib/htmlgrid/errormessage.rb +70 -0
  30. data/lib/htmlgrid/form.rb +93 -0
  31. data/lib/htmlgrid/formlist.rb +42 -0
  32. data/lib/htmlgrid/grid.rb +286 -0
  33. data/lib/htmlgrid/image.rb +43 -0
  34. data/lib/htmlgrid/infomessage.rb +41 -0
  35. data/lib/htmlgrid/input.rb +59 -0
  36. data/lib/htmlgrid/inputcheckbox.rb +41 -0
  37. data/lib/htmlgrid/inputcurrency.rb +36 -0
  38. data/lib/htmlgrid/inputdate.rb +38 -0
  39. data/lib/htmlgrid/inputfile.rb +40 -0
  40. data/lib/htmlgrid/inputradio.rb +37 -0
  41. data/lib/htmlgrid/inputtext.rb +37 -0
  42. data/lib/htmlgrid/javascript.rb +22 -0
  43. data/lib/htmlgrid/label.rb +90 -0
  44. data/lib/htmlgrid/labeltext.rb +35 -0
  45. data/lib/htmlgrid/link.rb +54 -0
  46. data/lib/htmlgrid/list.rb +170 -0
  47. data/lib/htmlgrid/namedcomponent.rb +52 -0
  48. data/lib/htmlgrid/pass.rb +38 -0
  49. data/lib/htmlgrid/passthru.rb +44 -0
  50. data/lib/htmlgrid/popuplink.rb +66 -0
  51. data/lib/htmlgrid/reset.rb +36 -0
  52. data/lib/htmlgrid/richtext.rb +26 -0
  53. data/lib/htmlgrid/select.rb +53 -0
  54. data/lib/htmlgrid/span.rb +37 -0
  55. data/lib/htmlgrid/spancomposite.rb +45 -0
  56. data/lib/htmlgrid/spanlist.rb +15 -0
  57. data/lib/htmlgrid/staticinput.rb +40 -0
  58. data/lib/htmlgrid/submit.rb +36 -0
  59. data/lib/htmlgrid/template.rb +130 -0
  60. data/lib/htmlgrid/text.rb +36 -0
  61. data/lib/htmlgrid/textarea.rb +49 -0
  62. data/lib/htmlgrid/ulcomposite.rb +49 -0
  63. data/lib/htmlgrid/ullist.rb +15 -0
  64. data/lib/htmlgrid/urllink.rb +65 -0
  65. data/lib/htmlgrid/value.rb +36 -0
  66. data/test/rebuild.rb +39 -0
  67. data/test/stub/cgi.rb +44 -0
  68. data/test/suite.rb +32 -0
  69. data/test/test_component.rb +138 -0
  70. data/test/test_composite.rb +201 -0
  71. data/test/test_datevalue.rb +60 -0
  72. data/test/test_form.rb +123 -0
  73. data/test/test_formlist.rb +111 -0
  74. data/test/test_grid.rb +395 -0
  75. data/test/test_input.rb +70 -0
  76. data/test/test_label.rb +116 -0
  77. data/test/test_list.rb +146 -0
  78. data/test/test_select.rb +78 -0
  79. data/test/test_template.rb +97 -0
  80. data/test/test_text.rb +63 -0
  81. data/usage-en.txt +112 -0
  82. data/widget/Tooltip.js +85 -0
  83. metadata +180 -0
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # HtmlGrid -- HyperTextMarkupLanguage Framework
4
+ # Copyright (C) 2003 ywesee - intellectual capital connected
5
+ # Hannes Wyss
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
22
+ # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
23
+ #
24
+ # TestComponent -- htmlgrid -- 26.11.2002 -- hwyss@ywesee.com
25
+
26
+ $: << File.expand_path("../lib", File.dirname(__FILE__))
27
+ $: << File.expand_path("../ext", File.dirname(__FILE__))
28
+
29
+ require 'test/unit'
30
+ require 'htmlgrid/component'
31
+
32
+ module HtmlGrid
33
+ class Component
34
+ attr_reader :model, :session, :container
35
+ end
36
+ end
37
+
38
+ class TestComponent < Test::Unit::TestCase
39
+ class StubAttributeComponent < HtmlGrid::Component
40
+ HTML_ATTRIBUTES = { "key" => "val" }
41
+ end
42
+ class StubInitComponent < HtmlGrid::Component
43
+ attr_reader :init_called
44
+ def init
45
+ @init_called = true
46
+ end
47
+ end
48
+ class StubLabelComponent < HtmlGrid::Component
49
+ LABEL = true
50
+ end
51
+ class StubContainer
52
+ attr_accessor :onsubmit
53
+ end
54
+ def setup
55
+ @component = HtmlGrid::Component.new(nil, nil)
56
+ end
57
+ def test_initialize1
58
+ assert_nothing_raised {
59
+ HtmlGrid::Component.new("foo", "bar")
60
+ }
61
+ comp = HtmlGrid::Component.new("foo", "bar")
62
+ assert_equal("foo", comp.model)
63
+ assert_equal("bar", comp.session)
64
+ assert_equal(nil, comp.container)
65
+ assert_equal(false, comp.label?)
66
+ assert_nothing_raised {
67
+ comp.label = true
68
+ }
69
+ assert_equal(true, comp.label?)
70
+ end
71
+ def test_initialize2
72
+ assert_nothing_raised {
73
+ HtmlGrid::Component.new("foo", "bar", "baz")
74
+ }
75
+ comp = HtmlGrid::Component.new("foo", "bar", "baz")
76
+ assert_equal("foo", comp.model)
77
+ assert_equal("bar", comp.session)
78
+ assert_equal("baz", comp.container)
79
+ end
80
+ def test_initialize3
81
+ comp = StubAttributeComponent.new("foo", "bar")
82
+ expected = { "key" => "val" }
83
+ assert_respond_to(comp, :attributes)
84
+ assert_equal(expected, comp.attributes)
85
+ assert_equal(expected, StubAttributeComponent::HTML_ATTRIBUTES)
86
+ assert_nothing_raised {
87
+ comp.attributes.store("other", "val")
88
+ }
89
+ expected2 = { "key" => "val", "other" => "val" }
90
+ assert_equal(expected2, comp.attributes)
91
+ assert_equal(expected, StubAttributeComponent::HTML_ATTRIBUTES)
92
+ assert_equal({}, @component.attributes)
93
+ assert_equal({}, HtmlGrid::Component::HTML_ATTRIBUTES)
94
+ assert_nothing_raised {
95
+ @component.attributes.store("third", "val")
96
+ }
97
+ expected = {"third"=>"val"}
98
+ assert_equal(expected, @component.attributes)
99
+ assert_equal({}, HtmlGrid::Component::HTML_ATTRIBUTES)
100
+ end
101
+ def test_initialize4
102
+ comp = StubInitComponent.new("foo", "bar")
103
+ assert_equal(true, comp.init_called)
104
+ end
105
+ def test_initialize5
106
+ comp = StubLabelComponent.new(nil, nil)
107
+ assert_equal(true, comp.label?)
108
+ end
109
+ def test_escape
110
+ txt = "Guten Tag! & wie gehts uns denn heute? '<' schlechter oder '>' besser?"
111
+ control = txt.dup
112
+ expected = "Guten Tag! &amp; wie gehts uns denn heute? '&lt;' schlechter oder '&gt;' besser?"
113
+ assert_equal(expected, @component.escape(txt))
114
+ assert_equal(control, txt)
115
+ assert_equal(expected, @component.escape(txt))
116
+ end
117
+ def test_escape_symbols
118
+ txt = "\263"
119
+ expected = "&ge;"
120
+ assert_equal(expected, @component.escape_symbols(txt))
121
+ end
122
+ def test_onsubmit
123
+ @component.onsubmit = 'submitted'
124
+ assert_equal({}, @component.attributes)
125
+ cont = StubContainer.new
126
+ comp = HtmlGrid::Component.new("foo", "bar", cont)
127
+ comp.onsubmit = 'submitted'
128
+ assert_equal('submitted', cont.onsubmit)
129
+ end
130
+ def test_set_attribute
131
+ assert_equal({}, @component.attributes)
132
+ @component.set_attribute('href', 'http://www.ywesee.com')
133
+ expected = {
134
+ 'href' => 'http://www.ywesee.com',
135
+ }
136
+ assert_equal(expected, @component.attributes)
137
+ end
138
+ end
@@ -0,0 +1,201 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # HtmlGrid -- HyperTextMarkupLanguage Framework
4
+ # Copyright (C) 2003 ywesee - intellectual capital connected
5
+ # Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
22
+ # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
23
+ #
24
+ # TestComposite -- htmlgrid -- 24.10.2002 -- hwyss@ywesee.com
25
+
26
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
27
+ $: << File.dirname(__FILE__)
28
+
29
+ require 'test/unit'
30
+ require 'stub/cgi'
31
+ require 'htmlgrid/composite'
32
+ require 'htmlgrid/inputtext'
33
+ require 'htmlgrid/form'
34
+
35
+ class StubComposite < HtmlGrid::Composite
36
+ attr_writer :container
37
+ COMPONENTS = {
38
+ [0,0,0] => :baz,
39
+ [0,0,1] => :foo,
40
+ [0,0,2] => :baz,
41
+ [0,1,0] => :baz,
42
+ [0,1,1] => :baz,
43
+ }
44
+ LABELS = true
45
+ SYMBOL_MAP = {
46
+ :bar => HtmlGrid::InputText,
47
+ }
48
+ attr_reader :model, :session
49
+ public :resolve_offset, :labels?
50
+ def init
51
+ @barcount=0
52
+ super
53
+ end
54
+ def foo(model, lookandfeel)
55
+ "Foo"
56
+ end
57
+ def baz(model, lookandfeel)
58
+ @barcount += 1
59
+ "Baz#{@barcount}"
60
+ end
61
+ end
62
+ class StubCompositeComponent < HtmlGrid::Component
63
+ def to_html(context)
64
+ context.a(@attributes) { 'brafoo' }
65
+ end
66
+ end
67
+ class StubComposite2 < HtmlGrid::Composite
68
+ COMPONENTS = {
69
+ [0,0] => StubCompositeComponent,
70
+ }
71
+ end
72
+ class StubComposite3 < StubComposite2
73
+ COMPONENT_CSS_MAP = {[0,0,4,4]=>'standard'}
74
+ end
75
+ class StubComposite4 < StubComposite3
76
+ CSS_MAP = {[0,0]=>'dradnats'}
77
+ COMPONENT_CSS_MAP = {[0,0,4,4]=>'standard'}
78
+ end
79
+ class StubCompositeNoLabel < HtmlGrid::Composite
80
+ LABELS = false
81
+ COMPONENTS = {}
82
+ public :labels?
83
+ end
84
+ class StubCompositeModel
85
+ end
86
+ class StubCompositeLookandfeel
87
+ def attributes(key)
88
+ {}
89
+ end
90
+ def lookup(key)
91
+ end
92
+ def base_url
93
+ 'http://www.oddb.org/de/gcc'
94
+ end
95
+ end
96
+ class StubCompositeSession
97
+ def lookandfeel
98
+ StubCompositeLookandfeel.new
99
+ end
100
+ def error(key)
101
+ end
102
+ end
103
+ class StubCompositeForm < HtmlGrid::Form
104
+ COMPONENTS = {
105
+ [0,0] => StubComposite
106
+ }
107
+ EVENT = :foo
108
+ end
109
+ class StubCompositeColspan1 < HtmlGrid::Composite
110
+ COMPONENTS = {}
111
+ end
112
+ class StubCompositeColspan2 < HtmlGrid::Composite
113
+ COMPONENTS = {
114
+ [0,0] => :foo,
115
+ }
116
+ end
117
+ class StubCompositeColspan3 < HtmlGrid::Composite
118
+ COMPONENTS = {
119
+ [0,0] => :foo,
120
+ [1,0] => :bar,
121
+ }
122
+ end
123
+ class StubCompositeColspan4 < HtmlGrid::Composite
124
+ COMPONENTS = {
125
+ [0,0] => :foo,
126
+ [2,0] => :bar,
127
+ }
128
+ end
129
+
130
+ class TestComposite < Test::Unit::TestCase
131
+ def setup
132
+ @composite = StubComposite.new(StubCompositeModel.new, StubCompositeSession.new)
133
+ end
134
+ def test_create_method
135
+ foo = nil
136
+ assert_nothing_raised {
137
+ foo = @composite.create(:foo, @composite.model)
138
+ }
139
+ assert_equal("Foo", foo)
140
+ end
141
+ def test_create_symbol
142
+ bar = nil
143
+ assert_nothing_raised {
144
+ bar = @composite.create(:bar, @composite.model)
145
+ }
146
+ assert_equal(HtmlGrid::InputText, bar.class)
147
+ end
148
+ def test_full_colspan1
149
+ composite = StubCompositeColspan1.new(StubCompositeModel.new, StubCompositeSession.new)
150
+ assert_nothing_raised { composite.full_colspan }
151
+ assert_equal(nil, composite.full_colspan)
152
+ end
153
+ def test_full_colspan2
154
+ composite = StubCompositeColspan2.new(StubCompositeModel.new, StubCompositeSession.new)
155
+ assert_nothing_raised { composite.full_colspan }
156
+ assert_equal(nil, composite.full_colspan)
157
+ end
158
+ def test_full_colspan3
159
+ composite = StubCompositeColspan3.new(StubCompositeModel.new, StubCompositeSession.new)
160
+ assert_nothing_raised { composite.full_colspan }
161
+ assert_equal(2, composite.full_colspan)
162
+ end
163
+ def test_full_colspan4
164
+ composite = StubCompositeColspan4.new(StubCompositeModel.new, StubCompositeSession.new)
165
+ assert_nothing_raised { composite.full_colspan }
166
+ assert_equal(3, composite.full_colspan)
167
+ end
168
+ def test_labels1
169
+ composite = StubCompositeNoLabel.new(StubCompositeModel.new, StubCompositeSession.new)
170
+ assert_equal(false, composite.labels?)
171
+ end
172
+ def test_labels2
173
+ assert_equal(true, @composite.labels?)
174
+ end
175
+ def test_to_html
176
+ expected = '<TABLE cellspacing="0"><TR><TD>Baz1FooBaz2</TD></TR><TR><TD>Baz3Baz4</TD></TR></TABLE>'
177
+ assert_equal(expected, @composite.to_html(CGI.new))
178
+ end
179
+ def test_resolve_offset
180
+ matrix = [1,2,3,4]
181
+ assert_equal(matrix, @composite.resolve_offset(matrix))
182
+ offset = [5,6]
183
+ expected = [6,8,3,4]
184
+ assert_equal(expected, @composite.resolve_offset(matrix, offset))
185
+ end
186
+ def test_event
187
+ assert_nothing_raised { @composite.event() }
188
+ form = StubCompositeForm.new(@composite.model, @composite.session)
189
+ @composite.container = form
190
+ assert_equal(:foo, @composite.event())
191
+ end
192
+ def test_component_css_map
193
+ composite = StubComposite2.new(StubCompositeModel.new, StubCompositeSession.new)
194
+ expected = '<TABLE cellspacing="0"><TR><TD><A>brafoo</A></TD></TR></TABLE>'
195
+ assert_equal(expected, composite.to_html(CGI.new))
196
+ composite = StubComposite3.new(StubCompositeModel.new, StubCompositeSession.new)
197
+ expected = '<TABLE cellspacing="0"><TR><TD><A class="standard">brafoo</A></TD></TR></TABLE>'
198
+ assert_equal(expected, composite.to_html(CGI.new))
199
+ composite = StubComposite4.new(StubCompositeModel.new, StubCompositeSession.new)
200
+ end
201
+ end
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # HtmlGrid -- HyperTextMarkupLanguage Framework
4
+ # Copyright (C) 2003 ywesee - intellectual capital connected
5
+ # Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
22
+ # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
23
+ #
24
+ # TestDateValue -- htmlgrid -- 10.03.2003 -- hwyss@ywesee.com
25
+
26
+ $: << File.expand_path("../lib", File.dirname(__FILE__))
27
+
28
+ require 'test/unit'
29
+ require 'htmlgrid/datevalue'
30
+ require 'stub/cgi'
31
+ require 'date'
32
+
33
+ class StubDateLookandfeel
34
+ def lookup(key)
35
+ '%d.%m.%Y'
36
+ end
37
+ def attributes(key)
38
+ {}
39
+ end
40
+ end
41
+ class StubDateSession
42
+ def lookandfeel
43
+ StubDateLookandfeel.new
44
+ end
45
+ end
46
+ class StubDateProvider
47
+ def date
48
+ Date.new(2002,1,1)
49
+ end
50
+ end
51
+
52
+ class TestDateValue < Test::Unit::TestCase
53
+ def setup
54
+ @component = HtmlGrid::DateValue.new(:date, StubDateProvider.new,
55
+ StubDateSession.new)
56
+ end
57
+ def test_formatted
58
+ assert_equal('01.01.2002', @component.to_html(CGI.new))
59
+ end
60
+ end
data/test/test_form.rb ADDED
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # HtmlGrid -- HyperTextMarkupLanguage Framework
4
+ # Copyright (C) 2003 ywesee - intellectual capital connected
5
+ # Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
22
+ # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
23
+ #
24
+ # TestForm -- htmlgrid -- 25.11.2002 -- hwyss@ywesee.com
25
+
26
+ $: << File.dirname(__FILE__)
27
+ $: << File.expand_path("../lib", File.dirname(__FILE__))
28
+
29
+ require 'test/unit'
30
+ require 'htmlgrid/form'
31
+ require 'stub/cgi'
32
+
33
+ class StubFormModel; end
34
+ class StubFormLookandfeel
35
+ def attributes(key)
36
+ {}
37
+ end
38
+ def base_url
39
+ 'http://test.oddb.org/de/gcc'
40
+ end
41
+ def flavor
42
+ 'gcc'
43
+ end
44
+ def language
45
+ 'de'
46
+ end
47
+ def lookup(key)
48
+ 'Submit-Value'
49
+ end
50
+ def lookandfeel
51
+ self
52
+ end
53
+ def state
54
+ 0
55
+ end
56
+ end
57
+ class StubFormComponent < HtmlGrid::Component
58
+ def init
59
+ self.onsubmit = 'submitted'
60
+ end
61
+ end
62
+ class Form < HtmlGrid::Form
63
+ EVENT = :foo
64
+ COMPONENTS = {}
65
+ public :submit
66
+ end
67
+ class StubForm2 < HtmlGrid::Form
68
+ EVENT = :foo
69
+ COMPONENTS = {
70
+ [0,0] => StubFormComponent,
71
+ }
72
+ end
73
+ class StubFormMultiPart < HtmlGrid::Form
74
+ EVENT = :foo
75
+ COMPONENTS = {}
76
+ TAG_METHOD = :multipart_form
77
+ end
78
+
79
+ class TestForm < Test::Unit::TestCase
80
+ def setup
81
+ @model = StubFormModel.new
82
+ @lookandfeel = StubFormLookandfeel.new
83
+ @form = Form.new(@model, @lookandfeel)
84
+ end
85
+ def test_event
86
+ assert_equal(:foo, @form.event)
87
+ end
88
+ def test_multipart
89
+ form = StubFormMultiPart.new(@model, @lookandfeel)
90
+ result = form.to_html(CGI.new)
91
+ expected = '<FORM ACCEPT-CHARSET="ISO-8859-1" NAME="stdform" METHOD="POST" ENCTYPE="multipart/form-data" ACTION="http://test.oddb.org/de/gcc">'
92
+ assert_equal(0, result.index(expected), "expected\n#{result}\nto start with\n#{expected}")
93
+ end
94
+ def test_to_html
95
+ result = @form.to_html(CGI.new)
96
+ expected = [
97
+ '<INPUT NAME="flavor" TYPE="hidden" VALUE="gcc">',
98
+ '<INPUT NAME="language" TYPE="hidden" VALUE="de">',
99
+ '<INPUT NAME="event" TYPE="hidden" ID="event" VALUE="foo">',
100
+ '<INPUT NAME="state_id" TYPE="hidden" VALUE="1">',
101
+ ]
102
+ expected.each { |line|
103
+ assert(result.index(line), "\nmissing #{line}\n in #{result}")
104
+ }
105
+ end
106
+ def test_submit
107
+ expected = '<INPUT name="foo" type="submit" value="Submit-Value">'
108
+ assert_equal(expected, @form.submit(@model, @lookandfeel).to_html(CGI.new))
109
+ end
110
+ def test_onsubmit
111
+ @form.onsubmit = 'submitted'
112
+ expected = 'onSubmit="submitted"'
113
+ result = /<FORM[^>]+>/.match(@form.to_html(CGI.new))[0]
114
+ assert(result.index(expected), "missing:\n#{expected}\nin:\n#{result}")
115
+ end
116
+ def test_onsubmit_init
117
+ form = nil
118
+ assert_nothing_raised { form = StubForm2.new(@model, @lookandfeel) }
119
+ expected = 'onSubmit="submitted"'
120
+ result = /<FORM[^>]+>/.match(form.to_html(CGI.new))[0]
121
+ assert(result.index(expected), "missing:\n#{expected}\nin:\n#{result}")
122
+ end
123
+ end
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # HtmlGrid -- HyperTextMarkupLanguage Framework
4
+ # Copyright (C) 2003 ywesee - intellectual capital connected
5
+ # Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
6
+ #
7
+ # This library is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU Lesser General Public
9
+ # License as published by the Free Software Foundation; either
10
+ # version 2.1 of the License, or (at your option) any later version.
11
+ #
12
+ # This library is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public
18
+ # License along with this library; if not, write to the Free Software
19
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ #
21
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
22
+ # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
23
+ #
24
+ #TestFormList -- htmlgrid -- 25.03.2003 --aschrafl@ywesee.com
25
+
26
+ $: << File.dirname(__FILE__)
27
+ $: << File.expand_path("../lib", File.dirname(__FILE__))
28
+
29
+ require 'test/unit'
30
+ require 'htmlgrid/formlist'
31
+ require 'stub/cgi'
32
+
33
+ class StubFormList < HtmlGrid::FormList
34
+ attr_reader :model
35
+ COMPONENTS = {
36
+ [0,0] => :jaguar,
37
+ [1,0] => :panther,
38
+ }
39
+ CSS_MAP = {
40
+ [0,0] => 'flecken',
41
+ [1,0] => 'schwarz',
42
+ }
43
+ SORT_HEADER = false
44
+ SORT_DEFAULT = :foo
45
+ end
46
+ class StubFormListLookandfeel
47
+ def lookup(key)
48
+ key.to_s
49
+ end
50
+ def attributes(key)
51
+ {}
52
+ end
53
+ def base_url
54
+ "http://www.ywesee.com"
55
+ end
56
+ def event_url(event)
57
+ "http://www.ywesee.com/event"
58
+ end
59
+ def flavor
60
+ "strawberry"
61
+ end
62
+ def language
63
+ "de"
64
+ end
65
+ end
66
+ class StubFormListSession
67
+ attr_accessor :event
68
+ def lookandfeel
69
+ StubFormListLookandfeel.new
70
+ end
71
+ def state
72
+ 0
73
+ end
74
+ end
75
+ class StubFormListModel
76
+ attr_reader :foo
77
+ def initialize(foo)
78
+ @foo = foo
79
+ end
80
+ def jaguar
81
+ 'Jaguar'
82
+ end
83
+ def panther
84
+ 'Panther'
85
+ end
86
+ end
87
+
88
+ class TestFormList < Test::Unit::TestCase
89
+ def setup
90
+ model = [
91
+ StubFormListModel.new(3),
92
+ StubFormListModel.new(2),
93
+ StubFormListModel.new(4),
94
+ StubFormListModel.new(1),
95
+ ]
96
+ @list = StubFormList.new(model, StubFormListSession.new)
97
+ end
98
+ def test_to_html
99
+ result = @list.to_html(CGI.new)
100
+ [
101
+ '<FORM ACCEPT-CHARSET="ISO-8859-1" NAME="stdform" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" ACTION="http://www.ywesee.com">',
102
+ '<INPUT name="new_item" type="submit" value="new_item">',
103
+ '<INPUT NAME="flavor" TYPE="hidden" VALUE="strawberry">',
104
+ '<INPUT NAME="language" TYPE="hidden" VALUE="de">',
105
+ '<INPUT NAME="event" TYPE="hidden" ID="event" VALUE="new_item">',
106
+ '<INPUT NAME="state_id" TYPE="hidden" VALUE="1">',
107
+ ].each { |expected|
108
+ assert_not_nil(result.index(expected), "missing:\n#{expected}\nin:\n#{result}")
109
+ }
110
+ end
111
+ end