htmlgrid 1.1.0 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,132 @@
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
+
25
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
26
+ $: << File.dirname(__FILE__)
27
+
28
+ require 'minitest/autorun'
29
+ require 'stub/cgi'
30
+ require 'htmlgrid/dojotoolkit'
31
+ require 'test_helper'
32
+ require 'flexmock/minitest'
33
+ require 'sbsm/lookandfeel'
34
+
35
+ class TestDojotoolkit < Minitest::Test
36
+ class StubAttributeComponent < HtmlGrid::Component
37
+ HTML_ATTRIBUTES = { "key" => "val" }
38
+ end
39
+ class StubInitComponent < HtmlGrid::Component
40
+ attr_reader :init_called
41
+ def init
42
+ @init_called = true
43
+ end
44
+ end
45
+ class StubLabelComponent < HtmlGrid::Component
46
+ LABEL = true
47
+ end
48
+ class StubContainer
49
+ attr_accessor :onsubmit
50
+ end
51
+ def setup
52
+ @component = HtmlGrid::Component.new(nil, nil)
53
+ @session = flexmock('session') do |s|
54
+ s.should_receive(:user_agent).and_return('user_agent').by_default
55
+ end
56
+ @cgi = CGI.new
57
+ end
58
+ def test_dynamic_html
59
+ comp = HtmlGrid::Component.new("foo", @session)
60
+ comp.dojo_tooltip = 'my_tooltip'
61
+ assert_equal("foo", comp.model)
62
+ assert_equal(false, comp.label?)
63
+ result= comp.dynamic_html(@cgi)
64
+ assert(/href="my_tooltip"/.match(result))
65
+ end
66
+ def test_dynamic_html_with_msie
67
+ @session.should_receive(:user_agent).and_return('MSIE 4')
68
+ comp = HtmlGrid::Component.new("foo", @session)
69
+ comp.dojo_tooltip = 'my_tooltip'
70
+ assert_equal("foo", comp.model)
71
+ assert_equal(false, comp.label?)
72
+ result= comp.dynamic_html(@cgi)
73
+ assert(/href="my_tooltip"/.match(result))
74
+ end
75
+ end
76
+ class StubTemplateLookandfeel < SBSM::Lookandfeel
77
+ RESOURCES = {
78
+ :css => "test.css"
79
+ }
80
+ DICTIONARIES = {
81
+ "de" => {
82
+ :html_title => "Test",
83
+ }
84
+ }
85
+ def lookandfeel
86
+ self
87
+ end
88
+ end
89
+ class StubTemplateSession
90
+ def flavor
91
+ "gcc"
92
+ end
93
+ def language
94
+ "de"
95
+ end
96
+ def http_protocol
97
+ 'http'
98
+ end
99
+ def server_name
100
+ "testserver.com"
101
+ end
102
+ def server_port
103
+ '80'
104
+ end
105
+ alias :default_language :language
106
+ end
107
+ class PublicTemplate < HtmlGrid::Template
108
+ include HtmlGrid::DojoToolkit::DojoTemplate
109
+ COMPONENTS = {}
110
+ def dynamic_html_headers(context)
111
+ headers = super
112
+ end
113
+ end
114
+
115
+ class TestTemplate < Minitest::Test
116
+ def setup
117
+ lookandfeel = StubTemplateLookandfeel.new(StubTemplateSession.new)
118
+ @template = PublicTemplate.new(nil, lookandfeel, nil)
119
+ end
120
+ def test_dynamic_html_headers
121
+ @cgi = CGI.new
122
+ result = @template.to_html(@cgi)
123
+ @session = flexmock('session')
124
+ comp = HtmlGrid::Component.new("foo", @session)
125
+ comp.dojo_tooltip = 'my_tooltip'
126
+ assert_equal("foo", comp.model)
127
+ assert_equal(false, comp.label?)
128
+ result= comp.to_html(@cgi)
129
+ skip 'tooltip test does not work'
130
+ assert(/href="my_tooltip"/.match(result))
131
+ end
132
+ end
@@ -28,20 +28,10 @@ $: << File.expand_path("../ext", File.dirname(__FILE__))
28
28
  $: << File.dirname(__FILE__)
29
29
 
30
30
  require 'minitest/autorun'
31
- require 'rebuild'
32
31
  require 'stub/cgi'
33
32
  require 'htmlgrid/label'
34
33
  require 'htmlgrid/grid'
35
-
36
- module HtmlGrid
37
- class Grid
38
- class Row
39
- class Field
40
- attr_reader :attributes
41
- end
42
- end
43
- end
44
- end
34
+ require 'test_helper'
45
35
 
46
36
  class TestGrid < Minitest::Test
47
37
  class StubLabel
@@ -133,9 +123,9 @@ class TestGrid < Minitest::Test
133
123
  def test_add_multiple__3
134
124
  @grid.add(["test", nil, "foo"], 0, 0)
135
125
  assert_equal(1, @grid.height)
136
- expected = '<TABLE cellspacing="0"><TR><TD>test</TD><TD>foo</TD></TR></TABLE>'
126
+ expected = '<TABLE cellspacing="0"><TR><TD>testfoo</TD></TR></TABLE>'
137
127
  assert_equal(expected, @grid.to_html(CGI.new))
138
- assert_equal(2, @grid.width)
128
+ assert_equal(1, @grid.width)
139
129
  end
140
130
  def test_add_fieldx
141
131
  @grid.add("test", 1, 0)
@@ -235,7 +225,7 @@ class TestGrid < Minitest::Test
235
225
  expected = '<TABLE cellspacing="0"><TR><TD class="foo">&nbsp;</TD></TR></TABLE>'
236
226
  assert_equal(expected, @grid.to_html(CGI.new))
237
227
  @grid.add(nil, 1,1)
238
- @grid.add_style('bar', 0, 1, 2)
228
+ @grid.add_style('bar', 0, 1, 2)
239
229
  expected = '<TABLE cellspacing="0"><TR><TD class="foo">&nbsp;</TD>'
240
230
  expected << '<TD>&nbsp;</TD></TR><TR><TD class="bar">&nbsp;</TD>'
241
231
  expected << '<TD class="bar">&nbsp;</TD></TR></TABLE>'
@@ -281,7 +271,7 @@ class TestGrid < Minitest::Test
281
271
  assert_equal(expected, @grid.to_html(CGI.new))
282
272
  end
283
273
  def test_attributes
284
- ### this test has changed behavior: its not desirable to have magically
274
+ ### this test has changed behavior: its not desirable to have magically
285
275
  ### transferred css information from a component to its container
286
276
  @grid.add(StubGridComponent.new, 0,0)
287
277
  expected = '<TABLE cellspacing="0"><TR><TD>bar</TD></TR></TABLE>'
@@ -319,7 +309,7 @@ class TestGrid < Minitest::Test
319
309
  end
320
310
  def test_set_row_attributes3
321
311
  @grid.set_row_attributes({'foo' => 'bar'}, 1, 2)
322
- expected = '<TABLE cellspacing="0"><TR><TD>&nbsp;</TD></TR><TR foo="bar"><TD>&nbsp;</TD></TR><TR foo="bar"><TD>&nbsp;</TD></TR></TABLE>'
312
+ expected = '<TABLE cellspacing="0"><TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR><TR foo="bar"><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>'
323
313
  assert_equal(expected, @grid.to_html(CGI.new))
324
314
  end
325
315
  def test_insert_row
@@ -333,20 +323,24 @@ class TestGrid < Minitest::Test
333
323
  expected = '<TABLE cellspacing="0"><TR><TD>testreihe</TD></TR><TR><TD>&nbsp;</TD></TR><TR><TD>testfeld</TD></TR></TABLE>'
334
324
  assert_equal(expected, @grid.to_html(CGI.new))
335
325
  end
336
- def test_gc
337
- 100.times { |y|
338
- 200.times { |x|
339
- str = "[#{x}, #{y}]: test"
340
- @grid.add(str, x, y)
341
- @grid.add(str, x, y)
342
- @grid.add(str, x, y)
343
- @grid.add(str, x, y)
344
- }
345
- }
346
- assert_equal(100, @grid.height)
347
- assert_equal(200, @grid.width)
348
- result = @grid.to_html(CGI.new)
349
- end
326
+
327
+ # @todo
328
+ # What does this test? (gabage collection?)
329
+ def test_gc
330
+ 100.times { |y|
331
+ 200.times { |x|
332
+ str = "[#{x}, #{y}]: test"
333
+ @grid.add(str, x, y)
334
+ @grid.add(str, x, y)
335
+ @grid.add(str, x, y)
336
+ @grid.add(str, x, y)
337
+ }
338
+ }
339
+ assert_equal(100, @grid.height)
340
+ assert_equal(200, @grid.width)
341
+ @grid.to_html(CGI.new)
342
+ end
343
+
350
344
  def test_label
351
345
  label = StubLabel.new
352
346
  @grid.add(label, 0,0)
@@ -363,7 +357,7 @@ class TestGrid < Minitest::Test
363
357
  end
364
358
  def test_nil_attribute2
365
359
  thing = StubGridComponent.new
366
- thing.set_attribute("class", nil)
360
+ thing.set_attribute("class", nil)
367
361
  @grid.add(thing, 0,0)
368
362
  @grid.to_html(CGI.new)
369
363
  end
@@ -373,15 +367,15 @@ class TestGrid < Minitest::Test
373
367
  @grid.to_html(CGI.new)
374
368
  end
375
369
  def test_add_negative
376
- assert_raises(ArgumentError) { @grid.add('foo', -1, 0) }
377
- assert_raises(ArgumentError) { @grid.add('foo', 0, -1) }
378
- assert_raises(ArgumentError) { @grid.add(['foo', 'bar'], -1, 0) }
379
- assert_raises(ArgumentError) { @grid.add(['foo', 'bar'], 0, -1) }
370
+ assert( @grid.add('foo', -1, 0) )
371
+ assert( @grid.add('foo', 0, -1) )
372
+ assert( @grid.add(['foo', 'bar'], -1, 0) )
373
+ assert( @grid.add(['foo', 'bar'], 0, -1) )
380
374
  end
381
375
  def test_add_style_negative
382
- assert_raises(ArgumentError) { @grid.add_style('bar', -1, 1) }
383
- assert_raises(ArgumentError) { @grid.add_style('bar', 1, -1) }
384
- assert_raises(ArgumentError) { @grid.add_style('bar', 1, 1, -1) }
385
- assert_raises(ArgumentError) { @grid.add_style('bar', 1, 1, 1,-1) }
376
+ assert( @grid.add_style('bar', -1, 1) )
377
+ assert( @grid.add_style('bar', 1, -1) )
378
+ assert( @grid.add_style('bar', 1, 1, -1) )
379
+ assert( @grid.add_style('bar', 1, 1, 1,-1) )
386
380
  end
387
381
  end
@@ -0,0 +1,9 @@
1
+ module HtmlGrid
2
+ class Grid
3
+ class Row
4
+ class Field
5
+ attr_reader :attributes
6
+ end
7
+ end
8
+ end
9
+ end
@@ -16,242 +16,271 @@ require 'htmlgrid/form'
16
16
  require 'htmlgrid/list'
17
17
  require 'htmlgrid/div'
18
18
 
19
- class StubComposite < HtmlGrid::Composite
20
- attr_writer :container
21
- COMPONENTS = {
22
- [0,0,0] => :baz,
23
- [0,0,1] => :foo,
24
- [0,0,2] => :baz,
25
- [0,1,0] => :baz,
26
- [0,1,1] => :baz,
27
- }
28
- LABELS = true
29
- SYMBOL_MAP = {
30
- :bar => HtmlGrid::InputText,
31
- }
32
- attr_reader :model, :session
33
- public :resolve_offset, :labels?
34
- def initialize(first, second, third = nil)
35
- super(first, second)
19
+ module InteractionTest
20
+ class StubComposite < HtmlGrid::Composite
21
+ attr_writer :container
22
+ COMPONENTS = {
23
+ [0, 0, 0] => :baz,
24
+ [0, 0, 1] => :foo,
25
+ [0, 0, 2] => :baz,
26
+ [0, 1, 0] => :baz,
27
+ [0, 1, 1] => :baz,
28
+ }
29
+ LABELS = true
30
+ SYMBOL_MAP = {
31
+ :bar => HtmlGrid::InputText,
32
+ }
33
+ attr_reader :model, :session
34
+ public :resolve_offset, :labels?
35
+ def initialize(first, second, third = nil)
36
+ super(first, second)
37
+ end
38
+ def init
39
+ @barcount=0
40
+ super
41
+ end
42
+ def foo(model, session=@session)
43
+ "Foo"
44
+ end
45
+ def baz(model, session=@session)
46
+ @barcount += 1
47
+ "Baz#{@barcount}"
48
+ end
36
49
  end
37
- def init
38
- @barcount=0
39
- super
50
+ class StubCompositeComponent < HtmlGrid::Component
51
+ def to_html(context)
52
+ context.a(@attributes) { 'brafoo' }
53
+ end
40
54
  end
41
- def foo(model, session=@session)
42
- "Foo"
55
+ class StubComposite2 < HtmlGrid::Composite
56
+ COMPONENTS = {
57
+ [0, 0] => StubCompositeComponent,
58
+ }
43
59
  end
44
- def baz(model, session=@session)
45
- @barcount += 1
46
- "Baz#{@barcount}"
60
+ class StubComposite3 < StubComposite2
61
+ COMPONENT_CSS_MAP = {[0, 0, 4, 4] => 'standard'}
47
62
  end
48
- end
49
- class StubCompositeComponent < HtmlGrid::Component
50
- def to_html(context)
51
- context.a(@attributes) { 'brafoo' }
63
+ class StubComposite4 < StubComposite3
64
+ CSS_MAP = {[0, 0] => 'dradnats'}
65
+ COMPONENT_CSS_MAP = {[0, 0, 4, 4] => 'standard'}
52
66
  end
53
- end
54
- class StubComposite2 < HtmlGrid::Composite
55
- COMPONENTS = {
56
- [0,0] => StubCompositeComponent,
57
- }
58
- end
59
- class StubComposite3 < StubComposite2
60
- COMPONENT_CSS_MAP = {[0,0,4,4]=>'standard'}
61
- end
62
- class StubComposite4 < StubComposite3
63
- CSS_MAP = {[0,0]=>'dradnats'}
64
- COMPONENT_CSS_MAP = {[0,0,4,4]=>'standard'}
65
- end
66
- class StubCompositeNoLabel < HtmlGrid::Composite
67
- LABELS = false
68
- COMPONENTS = {}
69
- public :labels?
70
- end
71
- class StubCompositeModel
72
- end
73
- class StubCompositeLookandfeel
74
- def attributes(key)
75
- {}
67
+ class StubCompositeNoLabel < HtmlGrid::Composite
68
+ LABELS = false
69
+ COMPONENTS = {}
70
+ public :labels?
76
71
  end
77
- def lookup(key)
72
+ class StubCompositeModel
78
73
  end
79
- def base_url
80
- 'http://www.oddb.org/de/gcc'
81
- end
82
- end
83
- class StubCompositeSession
84
- attr_accessor :event
85
- def lookandfeel
86
- StubCompositeLookandfeel.new
74
+ class StubCompositeLookandfeel
75
+ def attributes(key)
76
+ {}
77
+ end
78
+ def lookup(key)
79
+ end
80
+ def base_url
81
+ 'http://www.oddb.org/de/gcc'
82
+ end
87
83
  end
88
- def error(key)
84
+ class StubCompositeSession
85
+ attr_accessor :event
86
+ def lookandfeel
87
+ StubCompositeLookandfeel.new
88
+ end
89
+ def error(key)
90
+ end
91
+ def user_agent
92
+ 'user_agent'
93
+ end
89
94
  end
90
- end
91
- class StubCompositeForm < HtmlGrid::Form
92
- COMPONENTS = {
93
- [0,0] => StubComposite
94
- }
95
- EVENT = :foo
96
- end
97
- class StubCompositeColspan1 < HtmlGrid::Composite
98
- COMPONENTS = {}
99
- end
100
- class StubCompositeColspan2 < HtmlGrid::Composite
101
- COMPONENTS = {
102
- [0,0] => :foo,
103
- }
104
- end
105
- class StubCompositeColspan3 < HtmlGrid::Composite
106
- COMPONENTS = {
107
- [0,0] => :foo,
108
- [1,0] => :bar,
109
- }
110
- end
111
- class StubCompositeColspan4 < HtmlGrid::Composite
112
- COMPONENTS = {
113
- [0,0] => :foo,
114
- [2,0] => :bar,
115
- }
116
- end
117
-
118
- class StubInteractionChooserDrugList < HtmlGrid::List
119
- attr_reader :model, :value
120
- COMPONENTS = {
121
- [0,0] => :info_drug,
122
- }
123
- CSS_MAP = {
124
- [0,0] => 'css.info',
125
- }
126
- SORT_HEADER = false
127
- SORT_DEFAULT = :foo
128
- def initialize(models, session=@session)
129
- super # must come first or it will overwrite @value
130
- @value = []
131
- models.each{ |model|
132
- @value << StubInteractionChooserDrug.new(model, session)
133
- }
95
+ class StubCompositeForm < HtmlGrid::Form
96
+ COMPONENTS = {
97
+ [0, 0] => StubComposite
98
+ }
99
+ EVENT = :foo
134
100
  end
135
- def to_html(context)
136
- div = HtmlGrid::Div.new(@model, @session, self)
137
- if @drugs and !@drugs.empty?
138
- delete_all_link = HtmlGrid::Link.new(:delete, @model, @session, self)
139
- delete_all_link.href = @lookandfeel._event_url(:delete_all, [])
140
- delete_all_link.value = @lookandfeel.lookup(:interaction_chooser_delete_all)
141
- delete_all_link.css_class = 'list'
142
- div.value = delete_all_link
143
- end
144
- div.set_attribute('id', 'drugs')
145
- @value << div unless @value.find{ |v| v.attributes['id'].eql?('drugs') }
146
- super
101
+ class StubCompositeColspan1 < HtmlGrid::Composite
102
+ COMPONENTS = {}
147
103
  end
148
- end
149
-
150
- class StubDrugModel
151
- attr_reader :foo
152
- def initialize(foo)
153
- @foo = foo
104
+ class StubCompositeColspan2 < HtmlGrid::Composite
105
+ COMPONENTS = {
106
+ [0, 0] => :foo,
107
+ }
154
108
  end
155
- def fachinfo
156
- @foo
109
+ class StubCompositeColspan3 < HtmlGrid::Composite
110
+ COMPONENTS = {
111
+ [0, 0] => :foo,
112
+ [1, 0] => :bar,
113
+ }
157
114
  end
158
- def drug
159
- 'Drug'
115
+ class StubCompositeColspan4 < HtmlGrid::Composite
116
+ COMPONENTS = {
117
+ [0, 0] => :foo,
118
+ [2, 0] => :bar,
119
+ }
160
120
  end
161
- end
162
121
 
163
- class StubInteractionChooserDrugHeader < HtmlGrid::Composite
164
- COMPONENTS = {
165
- [0,0] => :fachinfo,
166
- [1,0] => :atc,
167
- [2,0] => :delete,
168
- }
169
- CSS_MAP = {
170
- [0,0] => 'small',
171
- [1,0] => 'interaction-atc',
172
- [2,0] => 'small',
173
- }
174
- HTML_ATTRIBUTES = {
175
- 'style' => 'background-color:greenyellow',
176
- }
177
- def init
178
- super
179
- end
180
- def fachinfo(model, session=@session)
181
- "fachinfo-#{model.foo}"
182
- end
183
- def atc(model, session=@session)
184
- 'atc'
185
- end
186
- def delete(model, session=@session)
187
- 'delete'
188
- end
189
- end
190
- class StubInteractionChooserDrug < HtmlGrid::Composite
191
- COMPONENTS = {
122
+ class StubInteractionChooserDrugList < HtmlGrid::List
123
+ attr_reader :model, :value
124
+ COMPONENTS = {
125
+ [0, 0] => :info_drug,
192
126
  }
193
- CSS_MAP = {}
194
- CSS_CLASS = 'composite'
195
- @@barcode ||= 0
196
- def init
197
- @@barcode += 1
198
- components.store([0,0], :header_info)
199
- css_map.store([0,0], 'subheading')
200
- 1.upto(@@barcode) { |idx|
201
- components.store([0,idx], :text_info)
127
+ CSS_MAP = {
128
+ [0, 0] => 'css.info',
202
129
  }
203
- @attributes.store('id', 'drugs_' + @@barcode.to_s)
204
- super
205
- end
206
- def header_info(model, session=@session)
207
- StubInteractionChooserDrugHeader.new(model, session, self)
208
- end
209
- def text_info(model, session=@session)
210
- "interaction for #{model.foo}"
211
- end
212
- end
213
- class TestComposite < Minitest::Test
214
- def setup
215
- @composite = StubComposite.new(StubCompositeModel.new, StubCompositeSession.new)
130
+ SORT_HEADER = false
131
+ SORT_DEFAULT = :foo
132
+ def initialize(models, session=@session)
133
+ @drugs = nil
134
+ super # must come first or it will overwrite @value
135
+ @value = []
136
+ models.each{ |model|
137
+ @value << StubInteractionChooserDrug.new(model, session)
138
+ }
139
+ end
140
+ def to_html(context)
141
+ div = HtmlGrid::Div.new(@model, @session, self)
142
+ if @drugs and !@drugs.empty?
143
+ link = HtmlGrid::Link.new(:delete, @model, @session, self)
144
+ link.href = @lookandfeel._event_url(:delete_all, [])
145
+ link.value = @lookandfeel.lookup(:interaction_chooser_delete_all)
146
+ link.css_class = 'list'
147
+ div.value = link
148
+ end
149
+ div.set_attribute('id', 'drugs')
150
+ @value << div unless @value.find{ |v| v.attributes['id'].eql?('drugs') }
151
+ super
152
+ end
216
153
  end
217
- def test_create_method
218
- foo = nil
219
- foo = @composite.create(:foo, @composite.model)
220
- assert_equal("Foo", foo)
154
+
155
+ class StubDrugModel
156
+ attr_reader :foo
157
+ def initialize(foo)
158
+ @foo = foo
159
+ end
160
+ def fachinfo
161
+ @foo
162
+ end
163
+ def drug
164
+ 'Drug'
165
+ end
221
166
  end
222
- def test_to_html
223
- expected = '<TABLE cellspacing="0"><TR><TD>Baz1FooBaz2</TD></TR><TR><TD>Baz3Baz4</TD></TR></TABLE>'
224
- assert_equal(expected, @composite.to_html(CGI.new))
167
+
168
+ class StubInteractionChooserDrugHeader < HtmlGrid::Composite
169
+ COMPONENTS = {
170
+ [0, 0] => :fachinfo,
171
+ [1, 0] => :atc,
172
+ [2, 0] => :delete,
173
+ }
174
+ CSS_MAP = {
175
+ [0, 0] => 'small',
176
+ [1, 0] => 'interaction-atc',
177
+ [2, 0] => 'small',
178
+ }
179
+ HTML_ATTRIBUTES = {
180
+ 'style' => 'background-color:greenyellow',
181
+ }
182
+ def init
183
+ super
184
+ end
185
+ def fachinfo(model, session=@session)
186
+ "fachinfo-#{model.foo}"
187
+ end
188
+ def atc(model, session=@session)
189
+ 'atc'
190
+ end
191
+ def delete(model, session=@session)
192
+ 'delete'
193
+ end
225
194
  end
226
- def test_component_css_map
227
- composite = StubComposite2.new(StubCompositeModel.new, StubCompositeSession.new)
228
- expected = '<TABLE cellspacing="0"><TR><TD><A>brafoo</A></TD></TR></TABLE>'
229
- assert_equal(expected, composite.to_html(CGI.new))
230
- composite = StubComposite3.new(StubCompositeModel.new, StubCompositeSession.new)
231
- expected = '<TABLE cellspacing="0"><TR><TD><A class="standard">brafoo</A></TD></TR></TABLE>'
232
- assert_equal(expected, composite.to_html(CGI.new))
233
- composite = StubComposite4.new(StubCompositeModel.new, StubCompositeSession.new)
195
+ class StubInteractionChooserDrug < HtmlGrid::Composite
196
+ COMPONENTS = {
197
+ }
198
+ CSS_MAP = {}
199
+ CSS_CLASS = 'composite'
200
+ @@barcode ||= 0
201
+ def init
202
+ @@barcode += 1
203
+ components.store([0,0], :header_info)
204
+ css_map.store([0,0], 'subheading')
205
+ 1.upto(@@barcode) { |idx|
206
+ components.store([0,idx], :text_info)
207
+ }
208
+ @attributes.store('id', 'drugs_' + @@barcode.to_s)
209
+ super
210
+ end
211
+ def header_info(model, session=@session)
212
+ StubInteractionChooserDrugHeader.new(model, session, self)
213
+ end
214
+ def text_info(model, session=@session)
215
+ "interaction for #{model.foo}"
216
+ end
234
217
  end
235
- def test_interaction_list_to_html
236
- models = [ StubDrugModel.new('Aspirin'),
237
- StubDrugModel.new('Marcoumar'),
238
- ]
239
- composite = StubInteractionChooserDrugList.new(models, StubCompositeSession.new)
240
- expected = [ '<TABLE cellspacing="0" class="composite" id="drugs_1">',
241
- '<TR><TD class="subheading"><TABLE cellspacing="0" style="background-color:greenyellow">',
242
- '<TR><TD class="small">fachinfo-Aspirin</TD><TD class="interaction-atc">atc</TD><TD class="small">delete</TD></TR></TABLE></TD></TR>',
243
- '<TR><TD>interaction for Aspirin</TD></TR></TABLE> <TABLE cellspacing="0" class="composite" id="drugs_2">',
244
- '<TR><TD class="subheading"><TABLE cellspacing="0" style="background-color:greenyellow">',
245
- '<TR><TD class="small">fachinfo-Marcoumar</TD><TD class="interaction-atc">atc</TD><TD class="small">delete</TD></TR></TABLE></TD></TR>',
246
- '<TR><TD>interaction for Marcoumar</TD></TR>',
247
- '<TR><TD>interaction for Marcoumar</TD></TR></TABLE> <DIV id="drugs"></DIV><TABLE cellspacing="0">',
248
- '<TR><TH>&nbsp;</TH></TR>',
249
- '<TR><TD class="css.info"></TD></TR>',
250
- '<TR><TD class="css.info-bg"></TD></TR></TABLE>',
251
- ]
252
- html = composite.to_html(CGI.new)
253
- expected.each_with_index do |line, idx|
254
- assert(html.index(line), "#{idx}: missing #{line} in #{html}")
218
+ class TestComposite < Minitest::Test
219
+ def setup
220
+ @composite = StubComposite.new(
221
+ StubCompositeModel.new, StubCompositeSession.new)
222
+ end
223
+ def test_create_method
224
+ foo = nil
225
+ foo = @composite.create(:foo, @composite.model)
226
+ assert_equal("Foo", foo)
227
+ end
228
+ def test_to_html
229
+ assert_equal(<<-EXP.gsub(/\n|^\s*/, ''), @composite.to_html(CGI.new))
230
+ <TABLE cellspacing="0">
231
+ <TR><TD>Baz1FooBaz2</TD></TR><TR><TD>Baz3Baz4</TD></TR>
232
+ </TABLE>
233
+ EXP
234
+ end
235
+ def test_component_css_map
236
+ table = StubComposite2.new(
237
+ StubCompositeModel.new, StubCompositeSession.new)
238
+ assert_equal(<<-EXP.gsub(/\n|^\s*/, ''), table.to_html(CGI.new))
239
+ <TABLE cellspacing="0">
240
+ <TR><TD><A>brafoo</A></TD></TR>
241
+ </TABLE>
242
+ EXP
243
+ table = StubComposite3.new(
244
+ StubCompositeModel.new, StubCompositeSession.new)
245
+ assert_equal(<<-EXP.gsub(/\n|^\s*/, ''), table.to_html(CGI.new))
246
+ <TABLE cellspacing="0">
247
+ <TR><TD><A class="standard">brafoo</A></TD></TR>
248
+ </TABLE>
249
+ EXP
250
+ table = StubComposite4.new(
251
+ StubCompositeModel.new, StubCompositeSession.new)
252
+ assert_equal(<<-EXP.gsub(/\n|^\s*/, ''), table.to_html(CGI.new))
253
+ <TABLE cellspacing=\"0\"><TR><TD class=\"dradnats\"><A class=\"standard\">brafoo</A></TD></TR></TABLE>
254
+ EXP
255
+ end
256
+
257
+ # @todo
258
+ # Spruce up lines in expectation
259
+ def test_interaction_list_to_html
260
+ models = [
261
+ StubDrugModel.new('Aspirin'),
262
+ StubDrugModel.new('Marcoumar'),
263
+ ]
264
+ composite = StubInteractionChooserDrugList.new(
265
+ models, StubCompositeSession.new)
266
+ expected = [
267
+ '<TABLE cellspacing="0" class="composite" id="drugs_1">',
268
+ '<TR><TD class="subheading"><TABLE cellspacing="0" style="background-color:greenyellow">',
269
+ '<TR><TD class="small">fachinfo-Aspirin</TD><TD class="interaction-atc">atc</TD><TD class="small">delete</TD></TR></TABLE></TD></TR>',
270
+ '<TR><TD>interaction for Aspirin</TD></TR></TABLE> <TABLE cellspacing="0" class="composite" id="drugs_2">',
271
+ '<TR><TD class="subheading"><TABLE cellspacing="0" style="background-color:greenyellow">',
272
+ '<TR><TD class="small">fachinfo-Marcoumar</TD><TD class="interaction-atc">atc</TD><TD class="small">delete</TD></TR></TABLE></TD></TR>',
273
+ '<TR><TD>interaction for Marcoumar</TD></TR>',
274
+ '<TR><TD>interaction for Marcoumar</TD></TR></TABLE> <DIV id="drugs"></DIV><TABLE cellspacing="0">',
275
+ '<TR><TH>&nbsp;</TH></TR>',
276
+ '<TR><TD class="css.info">&nbsp;</TD></TR>',
277
+ '<TR><TD class="css.info-bg">&nbsp;</TD></TR></TABLE>',
278
+ ]
279
+ html = composite.to_html(CGI.new)
280
+ expected.each_with_index do |line, idx|
281
+ assert(html.index(line), "#{idx}: missing #{line} in #{html}")
282
+ end
255
283
  end
256
284
  end
257
285
  end
286
+