html-table 1.5.2 → 1.7.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 (59) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/{CHANGES → CHANGES.rdoc} +22 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE +177 -0
  7. data/MANIFEST.rdoc +57 -0
  8. data/README.rdoc +132 -0
  9. data/Rakefile +117 -146
  10. data/doc/table.rdoc +2 -4
  11. data/html-table.gemspec +6 -7
  12. data/lib/html/caption.rb +2 -2
  13. data/lib/html/col.rb +2 -2
  14. data/lib/html/colgroup.rb +4 -4
  15. data/lib/html/content.rb +2 -2
  16. data/lib/html/data.rb +2 -2
  17. data/lib/html/header.rb +2 -2
  18. data/lib/html/mixin/attribute_handler.rb +407 -0
  19. data/lib/html/mixin/html_handler.rb +124 -0
  20. data/lib/html/mixin/strongtyping.rb +17 -0
  21. data/lib/html/mixin/tag_handler.rb +125 -0
  22. data/lib/html/row.rb +2 -2
  23. data/lib/html/table.rb +7 -7
  24. data/lib/html/tablesection.rb +2 -2
  25. data/spec/attribute_handler_spec.rb +360 -0
  26. data/spec/body_spec.rb +81 -0
  27. data/spec/caption_spec.rb +74 -0
  28. data/spec/colgroup_col_spec.rb +34 -0
  29. data/spec/colgroup_spec.rb +83 -0
  30. data/spec/data_spec.rb +72 -0
  31. data/spec/foot_spec.rb +104 -0
  32. data/spec/head_spec.rb +101 -0
  33. data/spec/header_spec.rb +72 -0
  34. data/spec/html_handler_spec.rb +32 -0
  35. data/spec/row_spec.rb +136 -0
  36. data/spec/table_spec.rb +152 -0
  37. data/spec/tablesection_spec.rb +36 -0
  38. data/spec/tag_handler_spec.rb +85 -0
  39. metadata +55 -66
  40. metadata.gz.sig +0 -0
  41. data/MANIFEST +0 -59
  42. data/README +0 -132
  43. data/lib/html/attribute_handler.rb +0 -403
  44. data/lib/html/html_handler.rb +0 -120
  45. data/lib/html/tag_handler.rb +0 -121
  46. data/test/test_attribute_handler.rb +0 -361
  47. data/test/test_body.rb +0 -87
  48. data/test/test_caption.rb +0 -80
  49. data/test/test_col.rb +0 -40
  50. data/test/test_colgroup.rb +0 -89
  51. data/test/test_data.rb +0 -77
  52. data/test/test_foot.rb +0 -111
  53. data/test/test_head.rb +0 -104
  54. data/test/test_header.rb +0 -77
  55. data/test/test_html_handler.rb +0 -37
  56. data/test/test_row.rb +0 -141
  57. data/test/test_table.rb +0 -159
  58. data/test/test_tablesection.rb +0 -42
  59. data/test/test_tag_handler.rb +0 -90
@@ -0,0 +1,101 @@
1
+ ###############################################################################
2
+ # head_spec.rb
3
+ #
4
+ # Test suite for the described_class class. The Table::Head class is a singleton
5
+ # class, so we have to take extra measures to ensure that a fresh instance
6
+ # is created between tests.
7
+ ###############################################################################
8
+ require 'rspec'
9
+ require 'html/table'
10
+
11
+ #####################################################################
12
+ # Ensure that a fresh instance of described_class is used between tests
13
+ # by calling 'refresh' in the 'teardown' method.
14
+ #####################################################################
15
+ class HTML::Table::Head
16
+ private
17
+ def refresh
18
+ @@head = nil
19
+ end
20
+ end
21
+
22
+ RSpec.describe HTML::Table::Head do
23
+ before do
24
+ @table = HTML::Table.new
25
+ @thead = described_class.create
26
+ end
27
+
28
+ example "constructor" do
29
+ expect{ described_class.create }.not_to raise_error
30
+ expect{ described_class.create("foo") }.not_to raise_error
31
+ expect{ described_class.create(1) }.not_to raise_error
32
+ expect{ described_class.create(%w/foo bar baz/) }.not_to raise_error
33
+ expect{ described_class.create([1,2,3]) }.not_to raise_error
34
+ expect{ described_class.create([[1,2,3],["foo","bar"]]) }.not_to raise_error
35
+ end
36
+
37
+ example "basic" do
38
+ html = "<thead></thead>"
39
+ expect(@thead.html.gsub(/\s{2,}|\n/, '')).to eq(html)
40
+ end
41
+
42
+ example "end_tags" do
43
+ expect(described_class).to respond_to(:end_tags?)
44
+ expect(described_class).to respond_to(:end_tags=)
45
+ expect{ described_class.end_tags? }.not_to raise_error
46
+ expect{ described_class.end_tags = true }.not_to raise_error
47
+ expect{ described_class.end_tags = "foo" }.to raise_error(HTML::Mixin::StrongTyping::ArgumentTypeError)
48
+ end
49
+
50
+ example "with_attributes" do
51
+ html = "<thead align='left' char='x'></thead>"
52
+ @thead.align = "left"
53
+ @thead.char = 'x'
54
+ expect(@thead.html.gsub(/\s{2,}|\n/, '')).to eq(html)
55
+ end
56
+
57
+ example "push_single_row" do
58
+ html = "<thead><tr><td>test</td></tr></thead>"
59
+ @thead.push HTML::Table::Row.new{|r| r.content = "test"}
60
+ expect(@thead.html.gsub(/\s{2,}|\n/, '')).to eq(html)
61
+ end
62
+
63
+ example "push_multiple_rows" do
64
+ html = "<thead><tr><td>test</td></tr><tr><td>foo</td></tr></thead>"
65
+ r1 = HTML::Table::Row.new("test")
66
+ r2 = HTML::Table::Row.new("foo")
67
+ @thead.push(r1, r2)
68
+ expect(@thead.html.gsub(/\s{2,}|\n/, '')).to eq(html)
69
+ end
70
+
71
+ example "add_content_directly" do
72
+ html = "<thead><tr><td>hello</td><td>world</td></tr></thead>"
73
+ @thead.content = "hello","world"
74
+ expect(@thead.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
75
+ end
76
+
77
+ example "add_content_in_constructor" do
78
+ html = "<thead><tr><td>hello</td><td>world</td></tr></thead>"
79
+ @thead.send(:refresh)
80
+ @thead = described_class.create(["hello","world"])
81
+ expect(@thead.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
82
+ end
83
+
84
+ example "configure_column" do
85
+ html = "<thead><tr><td>hello</td><td abbr='test' width=3 nowrap>world"
86
+ html += "</td></tr></thead>"
87
+ @thead.content = "hello","world"
88
+ @thead.configure(0,1){ |d|
89
+ d.abbr = 'test'
90
+ d.width = 3
91
+ d.nowrap = true
92
+ }
93
+ expect(@thead.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
94
+ end
95
+
96
+ after do
97
+ @table = nil
98
+ @thead.send(:refresh)
99
+ @thead = nil
100
+ end
101
+ end
@@ -0,0 +1,72 @@
1
+ #####################################################
2
+ # header_spec.rb
3
+ #
4
+ # Test suite for the HTML::Table::Row::Header class.
5
+ #####################################################
6
+ require 'rspec'
7
+ require 'html/table'
8
+
9
+ RSpec.describe HTML::Table::Row::Header do
10
+ before do
11
+ @theader = described_class.new
12
+ end
13
+
14
+ example "basic" do
15
+ html = "<th></th>"
16
+ expect(@theader.html.gsub(/\s+/, '')).to eq(html)
17
+ end
18
+
19
+ example "constructor" do
20
+ expect{ described_class.new }.not_to raise_error
21
+ expect{ described_class.new("foo") }.not_to raise_error
22
+ expect{ described_class.new(1) }.not_to raise_error
23
+ expect{ described_class.new(%w/foo bar baz/) }.not_to raise_error
24
+ expect{ described_class.new([1,2,3]) }.not_to raise_error
25
+ expect{ described_class.new([[1,2,3],["foo","bar"]]) }.not_to raise_error
26
+ end
27
+
28
+ example "with_attributes" do
29
+ html = "<th align='left' colspan=3 nowrap></th>"
30
+ @theader.align = 'left'
31
+ @theader.colspan = 3
32
+ @theader.nowrap = true
33
+ expect(@theader.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
34
+ end
35
+
36
+ example "configure_not_allowed" do
37
+ expect{ @theader.configure }.to raise_error(NoMethodError)
38
+ end
39
+
40
+ example "add_content" do
41
+ html = "<th>hello world</th>"
42
+ @theader.content = "hello world"
43
+ expect(@theader.html.gsub(/\s{2,}/, '')).to eq(html)
44
+ end
45
+
46
+ example "add_multiple_content_items" do
47
+ html = "<th>hello world</th>"
48
+ @theader.content = "hello"," world"
49
+ expect(@theader.html.gsub(/\s{2,}/, '')).to eq(html)
50
+ end
51
+
52
+ example "add_content_in_constructor" do
53
+ html = "<th>hello world</th>"
54
+ @theader = described_class.new("hello world")
55
+ expect(@theader.html.gsub(/\s{2,}/, '')).to eq(html)
56
+ end
57
+
58
+ example "indent_level" do
59
+ expect(described_class).to respond_to(:indent_level)
60
+ expect(described_class).to respond_to(:indent_level=)
61
+ expect{ described_class.indent_level = "foo" }.to raise_error(ArgumentTypeError)
62
+ expect{ described_class.indent_level = 6 }.not_to raise_error
63
+ end
64
+
65
+ example "end_tags" do
66
+ expect(described_class).to respond_to(:end_tags?)
67
+ expect(described_class).to respond_to(:end_tags=)
68
+ expect{ described_class.end_tags = "foo" }.to raise_error(ArgumentTypeError)
69
+ expect{ described_class.end_tags = 1 }.to raise_error(ArgumentTypeError)
70
+ expect{ described_class.end_tags = true }.not_to raise_error
71
+ end
72
+ end
@@ -0,0 +1,32 @@
1
+ ############################################################################
2
+ # html_handler_spec.rb
3
+ #
4
+ # Test suite for the HtmlHandler module. For these tests, we'll use an
5
+ # instance of the Table class where the module has been mixed in.
6
+ ############################################################################
7
+ require 'rspec'
8
+ require 'html/table'
9
+
10
+ RSpec.describe HTML::Mixin::HtmlHandler do
11
+ before do
12
+ @table = HTML::Table.new(["foo",1,"bar"])
13
+ end
14
+
15
+ example "html" do
16
+ expect(@table).to respond_to(:html)
17
+ expect{ @table.html }.not_to raise_error
18
+ expect{ @table.html = "foo" }.to raise_error(NoMethodError)
19
+ expect( @table.html).to be_kind_of(String)
20
+ expect( @table.html.length > 0).to eq(true)
21
+ end
22
+
23
+ example "modify_html" do
24
+ expect{ @table.send(:modify_html) }.to raise_error(ArgumentError)
25
+ expect{ @table.send(:modify_html,"nowrap") }.not_to raise_error
26
+ expect{ @table.send(:modify_html,"align","top") }.not_to raise_error
27
+ expect{
28
+ @table.send(:modify_html,"align","top")
29
+ @table.send(:modify_html,"align","top")
30
+ }.not_to raise_error
31
+ end
32
+ end
@@ -0,0 +1,136 @@
1
+ ############################################
2
+ # row_spec.rb
3
+ #
4
+ # Specs for the Table::Row class.
5
+ ############################################
6
+ require 'rspec'
7
+ require 'html/table'
8
+ include HTML
9
+
10
+ RSpec.describe HTML::Table::Row do
11
+ before do
12
+ @trow = described_class.new
13
+ end
14
+
15
+ example "constructor" do
16
+ expect{ Table::Row.new }.not_to raise_error
17
+ expect{ Table::Row.new("foo") }.not_to raise_error
18
+ expect{ Table::Row.new(1) }.not_to raise_error
19
+ expect{ Table::Row.new([1,2,3]) }.not_to raise_error
20
+ expect{ Table::Row.new([[1,2,3],["foo","bar"]]) }.not_to raise_error
21
+ end
22
+
23
+ example "basic" do
24
+ html = "<tr></tr>"
25
+ expect(@trow.html.gsub(/\s+/, '')).to eq(html)
26
+ end
27
+
28
+ example "header" do
29
+ expect(@trow).to respond_to(:header?)
30
+ expect(@trow).to respond_to(:header=)
31
+ expect{ @trow.header? }.not_to raise_error
32
+ expect{ @trow.header = true }.not_to raise_error
33
+ end
34
+
35
+ example "with_attributes" do
36
+ html = "<tr align='center'></tr>"
37
+ @trow.align = "center"
38
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
39
+ end
40
+
41
+ example "index_assignment_constraints" do
42
+ expect{ @trow[0] = "foo" }.to raise_error(ArgumentTypeError)
43
+ expect{ @trow[0] = 1 }.to raise_error(ArgumentTypeError)
44
+ expect{ @trow[0] = Table::Caption.new }.to raise_error(ArgumentTypeError)
45
+ expect{ @trow[0] = Table::Row::Data.new }.not_to raise_error
46
+ expect{ @trow[0] = Table::Row::Header.new }.not_to raise_error
47
+ end
48
+
49
+ example "push_constraints" do
50
+ expect{ @trow.push(Table::Caption.new) }.to raise_error(ArgumentTypeError)
51
+ expect{ @trow.push(nil) }.to raise_error(ArgumentTypeError)
52
+ expect{ @trow.push("test") }.not_to raise_error
53
+ expect{ @trow.push(7) }.not_to raise_error
54
+ expect{ @trow.push(Table::Row::Data.new) }.not_to raise_error
55
+ expect{ @trow.push(Table::Row::Header.new) }.not_to raise_error
56
+ end
57
+
58
+ example "double_arrow_constraints" do
59
+ expect{ @trow << Table::Caption.new }.to raise_error(ArgumentTypeError)
60
+ expect{ @trow << "test" }.not_to raise_error
61
+ expect{ @trow << "test" << "foo" }.not_to raise_error
62
+ expect{ @trow << Table::Row::Data.new }.not_to raise_error
63
+ expect{ @trow << Table::Row::Header.new }.not_to raise_error
64
+ end
65
+
66
+ example "header_in_constructor" do
67
+ expect{ @trow = Table::Row.new('test', true) }.not_to raise_error
68
+ html = "<tr><th>test</th></tr>"
69
+ expect(@trow.html.gsub(/\s+/, '')).to eq(html)
70
+ end
71
+
72
+ example "push_single_data_element" do
73
+ html = "<tr><td>hello</td></tr>"
74
+ @trow.push Table::Row::Data.new{ |d| d.content = "hello" }
75
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
76
+ end
77
+
78
+ example "push_multiple_data_element" do
79
+ html = "<tr><td>hello</td><td>world</td></tr>"
80
+ d1 = Table::Row::Data.new{ |d| d.content = "hello" }
81
+ d2 = Table::Row::Data.new{ |d| d.content = "world" }
82
+ @trow.push d1, d2
83
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
84
+ end
85
+
86
+ example "add_content_directly" do
87
+ html = "<tr><td>hello</td><td>world</td></tr>"
88
+ @trow.content = "hello","world"
89
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
90
+ end
91
+
92
+ example "add_content_in_constructor" do
93
+ html = "<tr><td>hello</td><td>world</td></tr>"
94
+ @trow = Table::Row.new(%w/hello world/)
95
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
96
+ end
97
+
98
+ example "configure_column" do
99
+ html = "<tr><td>hello</td><td abbr='test' width=3 nowrap>world</td></tr>"
100
+ @trow.content = "hello","world"
101
+ @trow.configure(1){ |d|
102
+ d.abbr = 'test'
103
+ d.width = 3
104
+ d.nowrap = true
105
+ }
106
+ expect(@trow.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
107
+ end
108
+
109
+ example "unshift_constraints" do
110
+ expect{ @trow.unshift(Table::Caption.new) }.to raise_error(ArgumentTypeError)
111
+ expect{ @trow.unshift(nil) }.to raise_error(ArgumentTypeError)
112
+ expect{ @trow.unshift("test") }.not_to raise_error
113
+ expect{ @trow.unshift(7) }.not_to raise_error
114
+ expect{ @trow.unshift(Table::Row::Data.new) }.not_to raise_error
115
+ expect{ @trow.unshift(Table::Row::Header.new) }.not_to raise_error
116
+ end
117
+
118
+ example "configure_error" do
119
+ expect{ @trow.configure(0,0){ }.to raise_error(ArgumentError) }
120
+ end
121
+
122
+ example "indent_level" do
123
+ expect(Table::Row).to respond_to(:indent_level)
124
+ expect(Table::Row).to respond_to(:indent_level=)
125
+ expect{ Table::Row.indent_level = "foo" }.to raise_error(ArgumentTypeError)
126
+ expect{ Table::Row.indent_level = 3 }.not_to raise_error
127
+ end
128
+
129
+ example "end_tags" do
130
+ expect(Table::Row).to respond_to(:end_tags?)
131
+ expect(Table::Row).to respond_to(:end_tags=)
132
+ expect{ Table::Row.end_tags = "foo" }.to raise_error(ArgumentTypeError)
133
+ expect{ Table::Row.end_tags = 1 }.to raise_error(ArgumentTypeError)
134
+ expect{ Table::Row.end_tags = true }.not_to raise_error
135
+ end
136
+ end
@@ -0,0 +1,152 @@
1
+ #######################################################################
2
+ # table_spec.rb
3
+ #
4
+ # Specs for the HTML::Table class. These specs should be run via the
5
+ # 'rake spec' or 'rake spec:table' task.
6
+ #######################################################################
7
+ require 'rspec'
8
+ require 'html/table'
9
+
10
+ RSpec.describe HTML::Table do
11
+ before do
12
+ @table = described_class.new
13
+ end
14
+
15
+ example "version" do
16
+ expect(described_class::VERSION).to eq('1.7.0')
17
+ expect(described_class::VERSION).to be_frozen
18
+ end
19
+
20
+ example "constructor" do
21
+ expect{ described_class.new }.not_to raise_error
22
+ expect{ described_class.new('foo') }.not_to raise_error
23
+ expect{ described_class.new(1) }.not_to raise_error
24
+ expect{ described_class.new(%w/foo bar baz/) }.not_to raise_error
25
+ expect{ described_class.new([1,2,3]) }.not_to raise_error
26
+ expect{ described_class.new([[1,2,3],['foo','bar']]) }.not_to raise_error
27
+ end
28
+
29
+ example "constructor_with_attributes" do
30
+ expect{ described_class.new(%w[foo bar baz], :border => 1) }.not_to raise_error
31
+ end
32
+
33
+ example "html_case" do
34
+ expect(described_class).to respond_to(:html_case)
35
+ expect(described_class).to respond_to(:html_case=)
36
+ expect{ described_class.html_case = 'upper' }.not_to raise_error
37
+ expect{ described_class.html_case = 'lower' }.not_to raise_error
38
+ expect{ described_class.html_case = 'foo' }.to raise_error(ArgumentError)
39
+ expect{ described_class.html_case = 7 }.to raise_error(ArgumentTypeError)
40
+ end
41
+
42
+ example "indent_level" do
43
+ expect(described_class).to respond_to(:indent_level)
44
+ expect(described_class).to respond_to(:indent_level=)
45
+ expect{ described_class.indent_level = 0 }.not_to raise_error
46
+ expect{ described_class.indent_level = 'foo' }.to raise_error(ArgumentTypeError)
47
+ end
48
+
49
+ example "index" do
50
+ expect{ @table[0] = 'foo' }.to raise_error(ArgumentTypeError)
51
+ end
52
+
53
+ example "caption_index_constraints" do
54
+ expect{ @table[0] = described_class::Caption.new }.not_to raise_error
55
+ expect{ @table[1] = described_class::Caption.new }.to raise_error(ArgumentError)
56
+ end
57
+
58
+ example "head_index_constraints" do
59
+ expect{ @table[0] = described_class::Head.create }.not_to raise_error
60
+ expect{ @table[1] = described_class::Head.create }.to raise_error(ArgumentError)
61
+ expect{ @table[2] = described_class::Head.create }.to raise_error(ArgumentError)
62
+ end
63
+
64
+ example "foot_index_constraints" do
65
+ expect {
66
+ @table[0] = described_class::Caption.new
67
+ @table[-1] = described_class::Foot.create
68
+ }.not_to raise_error
69
+ expect{ @table[0] = described_class::Foot.create }.to raise_error(ArgumentError)
70
+ end
71
+
72
+ example "unshift_constraints" do
73
+ expect{ @table.unshift described_class::Row.new }.not_to raise_error
74
+ expect{ @table.unshift described_class::Row::Data.new }.to raise_error(ArgumentTypeError)
75
+ expect{ @table.unshift 'foo' }.to raise_error(ArgumentTypeError)
76
+ end
77
+
78
+ example "push_constraints" do
79
+ expect{ @table.push described_class::Row.new }.not_to raise_error
80
+ expect{ @table.push('foo') }.to raise_error(ArgumentTypeError)
81
+ expect{ @table.push(7) }.to raise_error(ArgumentTypeError)
82
+ expect{ @table.push(nil) }.to raise_error(ArgumentTypeError)
83
+ end
84
+
85
+ example "double_arrow_constraints" do
86
+ expect{ @table << HTML::Table::Row.new }.not_to raise_error
87
+ expect{ @table << HTML::Table::Row.new << HTML::Table::Row.new }.not_to raise_error
88
+ expect{ @table << 'foo' }.to raise_error(ArgumentTypeError)
89
+ expect{ @table << 7 }.to raise_error(ArgumentTypeError)
90
+ expect{ @table << nil }.to raise_error(ArgumentTypeError)
91
+ end
92
+
93
+ example "basic" do
94
+ html = "<table>\n</table>"
95
+ expect(@table.html).to eq(html)
96
+ end
97
+
98
+ example "with_attributes" do
99
+ html = "<table border=1 align='left' nowrap>\n</table>"
100
+ @table.border = 1
101
+ @table.align = 'left'
102
+ @table.nowrap = true
103
+ expect(@table.html).to eq(html)
104
+ end
105
+
106
+ example "add_row_push" do
107
+ html = '<table><tr></tr></table>'
108
+ @table.push(described_class::Row.new)
109
+ expect(@table.html.gsub(/\s+/, '')).to eq(html)
110
+ end
111
+
112
+ example "add_row_by_index" do
113
+ html = '<table><tr></tr></table>'
114
+ @table[0] = described_class::Row.new
115
+ expect(@table.html.gsub(/\s+/, '')).to eq(html)
116
+ end
117
+
118
+ example "add_multiple_rows" do
119
+ html = '<table><tr></tr><tr></tr></table>'
120
+ @table.push HTML::Table::Row.new, HTML::Table::Row.new
121
+ expect(@table.html.gsub(/\s+/, '')).to eq(html)
122
+ end
123
+
124
+ example "add_single_data_element" do
125
+ html = '<table><tr><td>hello</td></tr></table>'
126
+ @table.content = 'hello'
127
+ expect(@table.html.gsub(/\s+/, '')).to eq(html)
128
+ end
129
+
130
+ example "add_multiple_data_elements" do
131
+ html = '<table><tr><td>hello</td></tr><tr><td>world</td></tr></table>'
132
+ @table.content = 'hello','world'
133
+ expect(@table.html.gsub(/\s+/, '')).to eq(html)
134
+ end
135
+
136
+ example "configure_row" do
137
+ html = "<table><tr align='center'><td bgcolor='red'>hello</td></tr>"
138
+ html << '</table>'
139
+ @table.push HTML::Table::Row::Data.new{ |d| d.content = 'hello' }
140
+ @table.configure(0){ |t| t.align = 'center' }
141
+ @table.configure(0,0){ |d| d.bgcolor = 'red' }
142
+ expect(@table.html.gsub(/\s{2,}|\n+/, '')).to eq(html)
143
+ end
144
+
145
+ example "global_end_tags" do
146
+ expect(described_class).to respond_to(:global_end_tags?)
147
+ expect(described_class).to respond_to(:global_end_tags=)
148
+ expect{ described_class.global_end_tags = false }.not_to raise_error
149
+ expect{ described_class.global_end_tags = true }.not_to raise_error
150
+ expect{ described_class.global_end_tags = 'foo' }.to raise_error(ArgumentTypeError)
151
+ end
152
+ end