glimmer 0.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 (61) hide show
  1. data/COPYING.LGPL +504 -0
  2. data/README +27 -0
  3. data/samples/contactmanager/contact.rb +12 -0
  4. data/samples/contactmanager/contact_manager.rb +65 -0
  5. data/samples/contactmanager/contact_manager_presenter.rb +23 -0
  6. data/samples/contactmanager/contact_repository.rb +27 -0
  7. data/samples/hello_world.rb +26 -0
  8. data/samples/login.rb +97 -0
  9. data/samples/tictactoe/tic_tac_toe.rb +67 -0
  10. data/samples/tictactoe/tic_tac_toe_board.rb +149 -0
  11. data/src/command_handler.rb +11 -0
  12. data/src/command_handler_chain_factory.rb +23 -0
  13. data/src/command_handler_chain_link.rb +22 -0
  14. data/src/command_handlers.rb +26 -0
  15. data/src/command_handlers/bind_command_handler.rb +29 -0
  16. data/src/command_handlers/data_binding_command_handler.rb +64 -0
  17. data/src/command_handlers/models/model_observer.rb +25 -0
  18. data/src/command_handlers/models/observable_array.rb +46 -0
  19. data/src/command_handlers/models/observable_model.rb +35 -0
  20. data/src/command_handlers/models/r_runnable.rb +14 -0
  21. data/src/command_handlers/models/r_shell.rb +27 -0
  22. data/src/command_handlers/models/r_widget.rb +146 -0
  23. data/src/command_handlers/models/r_widget_listener.rb +12 -0
  24. data/src/command_handlers/models/r_widget_packages.rb +9 -0
  25. data/src/command_handlers/models/table_items_updater.rb +39 -0
  26. data/src/command_handlers/models/widget_observer.rb +23 -0
  27. data/src/command_handlers/shell_command_handler.rb +18 -0
  28. data/src/command_handlers/swt_constant_command_handler.rb +22 -0
  29. data/src/command_handlers/table_column_properties_data_binding_command_handler.rb +24 -0
  30. data/src/command_handlers/table_items_data_binding_command_handler.rb +30 -0
  31. data/src/command_handlers/widget_command_handler.rb +26 -0
  32. data/src/command_handlers/widget_listener_command_handler.rb +35 -0
  33. data/src/command_handlers/widget_method_command_handler.rb +22 -0
  34. data/src/glimmer.rb +45 -0
  35. data/src/parent.rb +8 -0
  36. data/src/shine.rb +24 -0
  37. data/src/swt.rb +10 -0
  38. data/src/xml.rb +10 -0
  39. data/src/xml_command_handlers.rb +18 -0
  40. data/src/xml_command_handlers/html_command_handler.rb +49 -0
  41. data/src/xml_command_handlers/models/depth_first_search_iterator.rb +20 -0
  42. data/src/xml_command_handlers/models/name_space_visitor.rb +21 -0
  43. data/src/xml_command_handlers/models/node.rb +83 -0
  44. data/src/xml_command_handlers/models/node_visitor.rb +12 -0
  45. data/src/xml_command_handlers/models/xml_visitor.rb +62 -0
  46. data/src/xml_command_handlers/xml_command_handler.rb +22 -0
  47. data/src/xml_command_handlers/xml_name_space_command_handler.rb +34 -0
  48. data/src/xml_command_handlers/xml_tag_command_handler.rb +26 -0
  49. data/src/xml_command_handlers/xml_text_command_handler.rb +22 -0
  50. data/test/glimmer_constant_test.rb +36 -0
  51. data/test/glimmer_data_binding_test.rb +236 -0
  52. data/test/glimmer_listeners_test.rb +61 -0
  53. data/test/glimmer_shine_data_binding_test.rb +88 -0
  54. data/test/glimmer_table_data_binding_test.rb +135 -0
  55. data/test/glimmer_test.rb +233 -0
  56. data/test/observable_model_test.rb +27 -0
  57. data/test/r_widget_test.rb +52 -0
  58. data/test/samples/contactmanager/contact_manager_presenter_test.rb +60 -0
  59. data/test/samples/tictactoe/tic_tac_toe_test.rb +265 -0
  60. data/test/xml/glimmer_xml_test.rb +163 -0
  61. metadata +126 -0
@@ -0,0 +1,27 @@
1
+ # Copyright (C) 2007-2008 Annas Al Maleh
2
+ # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
+
4
+ require "test/unit"
5
+ require File.dirname(__FILE__) + "/../src/command_handlers/models/observable_model"
6
+
7
+ require "test/unit"
8
+ class ObservableModelTest < Test::Unit::TestCase
9
+ class Person
10
+ attr_accessor :name
11
+ end
12
+
13
+ def test_observe_model
14
+ person = Person.new
15
+ person.name = "Marty"
16
+ assert_equal "Marty", person.name
17
+ person.extend ObservableModel
18
+ person.add_observer(:name, self)
19
+ person.name = "Julia"
20
+ assert_equal "Julia", @observed_name
21
+ assert_equal "Julia", person.name
22
+ end
23
+
24
+ def update(name)
25
+ @observed_name = name
26
+ end
27
+ end
@@ -0,0 +1,52 @@
1
+ # Copyright (C) 2007-2008 Annas Al Maleh
2
+ # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
+
4
+ require "test/unit"
5
+ require File.dirname(__FILE__) + "/../src/swt"
6
+
7
+ class RWidgetTest < Test::Unit::TestCase
8
+ include Glimmer
9
+
10
+ def test_async_exec
11
+ @target = shell {
12
+ @text = text {
13
+ text "text1"
14
+ }
15
+ }
16
+
17
+ @target.async_exec do
18
+ @text.widget.setText("text2")
19
+ end
20
+
21
+ @target.async_exec do
22
+ assert_equal "text2", @text.widget.getText
23
+ @target.widget.close
24
+ end
25
+
26
+ @target.open
27
+ end
28
+
29
+ def test_sync_exec
30
+ @target = shell {
31
+ @text = text {
32
+ text "text1"
33
+ }
34
+ }
35
+
36
+ @target.async_exec do
37
+ assert_equal "text2", @text.widget.getText
38
+ @text.widget.setText("text3")
39
+ end
40
+
41
+ @target.sync_exec do
42
+ @text.widget.setText("text2")
43
+ end
44
+
45
+ @target.async_exec do
46
+ @target.widget.close
47
+ end
48
+
49
+ @target.open
50
+ end
51
+
52
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright (C) 2007-2008 Nick Malnick and Annas Al Maleh
2
+ # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
+
4
+ require "test/unit"
5
+ require File.dirname(__FILE__) + "/../../../samples/contactmanager/contact_manager_presenter"
6
+
7
+ class ContactManagerPresenterTest < Test::Unit::TestCase
8
+
9
+ def test_find_specify_all_fields_for_one_result
10
+ contact_manager_presenter = ContactManagerPresenter.new
11
+ contact_manager_presenter.first_name = "Frank"
12
+ contact_manager_presenter.last_name = "Deelio"
13
+ contact_manager_presenter.email = "frank@deelio.com"
14
+ contact_manager_presenter.find
15
+ contacts = contact_manager_presenter.results
16
+ assert_not_nil contacts
17
+ assert_equal 1, contacts.size
18
+ contact = contacts[0]
19
+ assert contact.is_a?(Contact)
20
+ assert_equal "Frank", contact.first_name
21
+ assert_equal "Deelio", contact.last_name
22
+ assert_equal "frank@deelio.com", contact.email
23
+ end
24
+
25
+ def test_find_specify_one_field_for_two_results
26
+ contact_manager_presenter = ContactManagerPresenter.new
27
+ contact_manager_presenter.first_name = "Frank"
28
+ contact_manager_presenter.find
29
+ contacts = contact_manager_presenter.results
30
+ assert_not_nil contacts
31
+ assert_equal 2, contacts.size
32
+ contact1 = contacts[0]
33
+ contact2 = contacts[1]
34
+ assert_equal "Frank", contact1.first_name
35
+ assert_equal "Deelio", contact1.last_name
36
+ assert_equal "frank@deelio.com", contact1.email
37
+ assert_equal "franky", contact2.first_name
38
+ assert_equal "miller", contact2.last_name
39
+ assert_equal "frank@miller.com", contact2.email
40
+ end
41
+
42
+ def test_find_specify_all_fields_for_no_results
43
+ contact_manager_presenter = ContactManagerPresenter.new
44
+ contact_manager_presenter.first_name = "Julia"
45
+ contact_manager_presenter.last_name = "Big"
46
+ contact_manager_presenter.email = "julia@big.com"
47
+ contact_manager_presenter.find
48
+ contacts = contact_manager_presenter.results
49
+ assert_not_nil contacts
50
+ assert_equal 0, contacts.size
51
+ end
52
+
53
+ def test_initial_results
54
+ contact_manager_presenter = ContactManagerPresenter.new
55
+ contacts = contact_manager_presenter.results
56
+ assert_not_nil contacts
57
+ assert_equal 0, contacts.size
58
+ end
59
+
60
+ end
@@ -0,0 +1,265 @@
1
+ # Copyright (C) 2007-2008 Nick Malnick and Annas Al Maleh
2
+ # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
+
4
+ require "test/unit"
5
+ require File.dirname(__FILE__) + "/../../../samples/tictactoe/tic_tac_toe_board"
6
+
7
+ class TicTacToeTest < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @board = TicTacToeBoard.new
11
+ end
12
+
13
+ def test_mark_center_x
14
+ assert_equal("", @board.box(2, 2).sign)
15
+ @board.mark_box(2, 2)
16
+ assert ! @board.box(2, 2).empty
17
+ assert_equal("X", @board.box(2, 2).sign)
18
+ assert @board.box(1, 1).empty
19
+ assert @board.box(1, 2).empty
20
+ assert @board.box(1, 3).empty
21
+ assert @board.box(2, 1).empty
22
+ assert @board.box(2, 3).empty
23
+ assert @board.box(3, 1).empty
24
+ assert @board.box(3, 2).empty
25
+ assert @board.box(3, 3).empty
26
+ end
27
+
28
+ def test_mark_center_x_top_center_o_bottom_right_x
29
+ @board.mark_box(2, 2)
30
+ @board.mark_box(1, 2)
31
+ @board.mark_box(3, 3)
32
+ assert ! @board.box(2, 2).empty
33
+ assert ! @board.box(1, 2).empty
34
+ assert ! @board.box(3, 3).empty
35
+ assert_equal("X", @board.box(2, 2).sign)
36
+ assert_equal("O", @board.box(1, 2).sign)
37
+ assert_equal("X", @board.box(3, 3).sign)
38
+ end
39
+
40
+ def test_top_center_not_marked
41
+ assert @board.box(1, 2).empty
42
+ end
43
+
44
+ def test_top_right_marked
45
+ @board.mark_box(1, 3)
46
+ assert ! @board.box(1, 3).empty
47
+ end
48
+
49
+ def test_lower_right_marked
50
+ @board.mark_box(3, 3)
51
+ assert ! @board.box(3, 3).empty
52
+ end
53
+
54
+ def test_game_over_false
55
+ assert ! @board.game_over?
56
+ assert_equal "X", @board.current_sign
57
+ assert_equal TicTacToeBoard::IN_PROGRESS, @board.game_status
58
+ end
59
+
60
+ def test_game_over_X_wins_top_row_across
61
+ @board.mark_box(1, 1)
62
+ assert_equal("X", @board.box(1, 1).sign)
63
+ @board.mark_box(2, 1)
64
+ assert_equal("O", @board.box(2, 1).sign)
65
+ @board.mark_box(1, 2)
66
+ assert_equal("X", @board.box(1, 2).sign)
67
+ @board.mark_box(2, 2)
68
+ assert_equal("O", @board.box(2, 2).sign)
69
+ @board.mark_box(1, 3)
70
+ assert_equal("X", @board.box(1, 3).sign)
71
+ assert @board.game_over?
72
+ assert_equal "X", @board.winning_sign
73
+ assert_equal TicTacToeBoard::WIN, @board.game_status
74
+ end
75
+
76
+ def test_game_over_O_wins_top_row_across
77
+ @board.mark_box(2, 1)
78
+ @board.mark_box(1, 1)
79
+ @board.mark_box(2, 2)
80
+ @board.mark_box(1, 2)
81
+ @board.mark_box(3, 3)
82
+ @board.mark_box(1, 3)
83
+ assert @board.game_over?
84
+ assert_equal "O", @board.winning_sign
85
+ end
86
+
87
+ def test_game_over_X_wins_second_row_across
88
+ @board.mark_box(2, 1)
89
+ @board.mark_box(1, 1)
90
+ @board.mark_box(2, 2)
91
+ @board.mark_box(1, 2)
92
+ @board.mark_box(2, 3)
93
+ assert @board.game_over?
94
+ assert_equal "X", @board.winning_sign
95
+ end
96
+
97
+ def test_game_over_O_wins_second_row_across
98
+ @board.mark_box(1, 1)
99
+ @board.mark_box(2, 1)
100
+ @board.mark_box(3, 1)
101
+ @board.mark_box(2, 2)
102
+ @board.mark_box(1, 2)
103
+ @board.mark_box(2, 3)
104
+ assert @board.game_over?
105
+ assert_equal "O", @board.winning_sign
106
+ end
107
+
108
+ def test_game_over_X_wins_third_row_across
109
+ @board.mark_box(3, 1)
110
+ @board.mark_box(1, 1)
111
+ @board.mark_box(3, 2)
112
+ @board.mark_box(1, 2)
113
+ @board.mark_box(3, 3)
114
+ assert @board.game_over?
115
+ assert_equal "X", @board.winning_sign
116
+ end
117
+
118
+ def test_game_over_O_wins_third_row_across
119
+ @board.mark_box(1, 1)
120
+ @board.mark_box(3, 1)
121
+ @board.mark_box(1, 2)
122
+ @board.mark_box(3, 2)
123
+ @board.mark_box(2, 3)
124
+ @board.mark_box(3, 3)
125
+ assert @board.game_over?
126
+ end
127
+
128
+ def test_game_over_X_wins_first_column_down
129
+ @board.mark_box(1, 1)
130
+ @board.mark_box(2, 2)
131
+ @board.mark_box(2, 1)
132
+ @board.mark_box(3, 2)
133
+ @board.mark_box(3, 1)
134
+ assert @board.game_over?
135
+ assert_equal "X", @board.winning_sign
136
+ end
137
+
138
+ def test_game_over_O_wins_first_column_down
139
+ @board.mark_box(2, 2)
140
+ @board.mark_box(1, 1)
141
+ @board.mark_box(3, 2)
142
+ @board.mark_box(2, 1)
143
+ @board.mark_box(3, 3)
144
+ @board.mark_box(3, 1)
145
+ assert @board.game_over?
146
+ end
147
+
148
+ def test_game_over_X_wins_second_column_down
149
+ @board.mark_box(1, 2)
150
+ @board.mark_box(2, 1)
151
+ @board.mark_box(2, 2)
152
+ @board.mark_box(3, 1)
153
+ @board.mark_box(3, 2)
154
+ assert @board.game_over?
155
+ assert_equal "X", @board.winning_sign
156
+ end
157
+
158
+ def test_game_over_O_wins_second_column_down
159
+ @board.mark_box(2, 1)
160
+ @board.mark_box(1, 2)
161
+ @board.mark_box(3, 1)
162
+ @board.mark_box(2, 2)
163
+ @board.mark_box(2, 3)
164
+ @board.mark_box(3, 2)
165
+ assert @board.game_over?
166
+ assert_equal "O", @board.winning_sign
167
+ end
168
+
169
+ def test_game_over_X_wins_third_column_down
170
+ @board.mark_box(1, 3)
171
+ @board.mark_box(2, 1)
172
+ @board.mark_box(2, 3)
173
+ @board.mark_box(3, 1)
174
+ @board.mark_box(3, 3)
175
+ assert @board.game_over?
176
+ assert_equal "X", @board.winning_sign
177
+ end
178
+
179
+ def test_game_over_O_wins_third_column_down
180
+ @board.mark_box(2, 1)
181
+ @board.mark_box(1, 3)
182
+ @board.mark_box(3, 1)
183
+ @board.mark_box(2, 3)
184
+ @board.mark_box(3, 2)
185
+ @board.mark_box(3, 3)
186
+ assert @board.game_over?
187
+ assert_equal "O", @board.winning_sign
188
+ end
189
+
190
+ def test_game_over_X_wins_top_left_to_bottom_right
191
+ @board.mark_box(1, 1)
192
+ @board.mark_box(2, 1)
193
+ @board.mark_box(2, 2)
194
+ @board.mark_box(3, 2)
195
+ @board.mark_box(3, 3)
196
+ assert_equal "X", @board.winning_sign
197
+ assert @board.game_over?
198
+ end
199
+
200
+ def test_game_over_O_wins_top_left_to_bottom_right
201
+ @board.mark_box(2, 1)
202
+ @board.mark_box(1, 1)
203
+ @board.mark_box(3, 2)
204
+ @board.mark_box(2, 2)
205
+ @board.mark_box(2, 3)
206
+ @board.mark_box(3, 3)
207
+ assert_equal "O", @board.winning_sign
208
+ assert @board.game_over?
209
+ end
210
+
211
+ def test_game_over_X_wins_top_right_to_bottom_left
212
+ @board.mark_box(1, 3)
213
+ @board.mark_box(2, 1)
214
+ @board.mark_box(2, 2)
215
+ @board.mark_box(3, 2)
216
+ @board.mark_box(3, 1)
217
+ assert_equal "X", @board.winning_sign
218
+ assert @board.game_over?
219
+ end
220
+
221
+ def test_game_over_O_wins_top_right_to_bottom_left
222
+ @board.mark_box(2, 1)
223
+ @board.mark_box(1, 3)
224
+ @board.mark_box(3, 2)
225
+ @board.mark_box(2, 2)
226
+ @board.mark_box(1, 1)
227
+ @board.mark_box(3, 1)
228
+ assert_equal "O", @board.winning_sign
229
+ assert @board.game_over?
230
+ end
231
+
232
+ # 1 2 3
233
+ #1 x o x
234
+ #2 o x x
235
+ #3 o x o
236
+ def test_game_over_draw
237
+ @board.mark_box(1, 1)
238
+ @board.mark_box(1, 2)
239
+ @board.mark_box(1, 3)
240
+ @board.mark_box(2, 1)
241
+ @board.mark_box(2, 2)
242
+ @board.mark_box(3, 1)
243
+ @board.mark_box(2, 3)
244
+ @board.mark_box(3, 3)
245
+ assert ! @board.game_over?
246
+ @board.mark_box(3, 2)
247
+ assert @board.game_over?
248
+ assert_equal TicTacToeBox::EMPTY, @board.winning_sign
249
+ assert_equal TicTacToeBoard::DRAW, @board.game_status
250
+ end
251
+
252
+ def test_reset
253
+ @board.mark_box(1, 3)
254
+ @board.mark_box(2, 1)
255
+ @board.mark_box(2, 2)
256
+ @board.mark_box(3, 2)
257
+ @board.mark_box(3, 1)
258
+ @board.reset
259
+ assert ! @board.game_over?
260
+ assert_equal TicTacToeBox::EMPTY, @board.winning_sign
261
+ assert_equal TicTacToeBoard::IN_PROGRESS, @board.game_status
262
+ assert_equal "X", @board.current_sign
263
+ end
264
+
265
+ end
@@ -0,0 +1,163 @@
1
+ # Copyright (C) 2007-2008 Annas Al Maleh
2
+ # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
+
4
+ require "test/unit"
5
+ require File.dirname(__FILE__) + "/../../src/parent"
6
+ require File.dirname(__FILE__) + "/../../src/xml"
7
+
8
+ class GlimmerXmlTest < Test::Unit::TestCase
9
+ include Glimmer
10
+
11
+ def test_single_html_tag
12
+ @target = html
13
+
14
+ assert_not_nil @target
15
+ assert_equal "<html/>", @target.to_xml
16
+ end
17
+
18
+ def test_single_document_tag_upper_case
19
+ @target = tag(:_name => "DOCUMENT")
20
+
21
+ assert_not_nil @target
22
+ assert_equal "<DOCUMENT/>", @target.to_xml
23
+ end
24
+
25
+ def test_open_and_closed_html_tag
26
+ @target = html {}
27
+
28
+ assert_not_nil @target
29
+ assert_equal "<html></html>", @target.to_xml
30
+ end
31
+
32
+ def test_open_and_closed_html_tag_with_contents
33
+ @target = html { "This is an HTML Document" }
34
+
35
+ assert_not_nil @target
36
+ assert_equal "<html>This is an HTML Document</html>", @target.to_xml
37
+ end
38
+
39
+ def test_open_and_closed_html_tag_with_contents
40
+ @target = html { "This is an HTML Document" }
41
+
42
+ assert_not_nil @target
43
+ assert_equal "<html>This is an HTML Document</html>", @target.to_xml
44
+ end
45
+
46
+ def test_open_and_closed_html_tag_with_attributes
47
+ @target = html(:id => "thesis", :class => "document") {
48
+ }
49
+
50
+ assert_not_nil @target
51
+ assert_equal '<html id="thesis" class="document"></html>', @target.to_xml
52
+ end
53
+
54
+ def test_open_and_closed_html_tag_with_attributes_and_nested_body_with_attributes
55
+ @target = html(:id => "thesis", :class => "document") {
56
+ body(:id => "main") {
57
+ }
58
+ }
59
+
60
+ assert_not_nil @target
61
+ assert_equal '<html id="thesis" class="document"><body id="main"></body></html>', @target.to_xml
62
+ end
63
+
64
+ def test_tag_with_contents_before_and_after_nested_tag
65
+ @target = html(:id => "thesis", :class => "document") {
66
+ text "Before body"
67
+ body(:id => "main") {
68
+ }
69
+ text "When a string is the last part of the tag contents, text prefix is optional"
70
+ }
71
+
72
+ assert_not_nil @target
73
+ assert_equal '<html id="thesis" class="document">Before body<body id="main"></body>When a string is the last part of the tag contents, text prefix is optional</html>', @target.to_xml
74
+ end
75
+
76
+ def test_different_name_spaced_tags
77
+ @target = w3c.html(:id => "thesis", :class => "document") {
78
+ document.body(:id => "main") {
79
+ }
80
+ }
81
+
82
+ assert_not_nil @target
83
+ assert_equal '<w3c:html id="thesis" class="document"><document:body id="main"></document:body></w3c:html>', @target.to_xml
84
+ end
85
+
86
+ def test_different_name_spaced_attributes_and_tags
87
+ @target = w3c.html(w3c.id => "thesis", :class => "document") {
88
+ document.body(document.id => "main") {
89
+ }
90
+ }
91
+
92
+ assert_not_nil @target
93
+ assert_equal '<w3c:html w3c:id="thesis" class="document"><document:body document:id="main"></document:body></w3c:html>', @target.to_xml
94
+ end
95
+
96
+ def test_name_space_context
97
+ @target = name_space(:w3c) {
98
+ html(:id => "thesis", :class => "document") {
99
+ body(:id => "main") {
100
+ }
101
+ }
102
+ }
103
+
104
+ assert_not_nil @target
105
+ assert_equal '<w3c:html id="thesis" class="document"><w3c:body id="main"></w3c:body></w3c:html>', @target.to_xml
106
+ end
107
+
108
+ def test_two_name_space_contexts
109
+ @target = name_space(:w3c) {
110
+ html(:id => "thesis", :class => "document") {
111
+ name_space(:document) {
112
+ sectionDivider(:id => "main") {
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ assert_not_nil @target
119
+ assert_equal '<w3c:html id="thesis" class="document"><document:sectionDivider id="main"></document:sectionDivider></w3c:html>', @target.to_xml
120
+ end
121
+
122
+ def test_two_name_space_contexts_including_contents
123
+ @target = name_space(:w3c) {
124
+ html(:id => "thesis", :class => "document") {
125
+ text "before section divider"
126
+ name_space(:document) {
127
+ sectionDivider(:id => "main") {
128
+ "section divider"
129
+ }
130
+ }
131
+ text "after section divider"
132
+ }
133
+ }
134
+
135
+ assert_not_nil @target
136
+ assert_equal '<w3c:html id="thesis" class="document">before section divider<document:sectionDivider id="main">section divider</document:sectionDivider>after section divider</w3c:html>', @target.to_xml
137
+ end
138
+
139
+ def test_mixed_contents_custom_syntax
140
+ @target = html{"before section divider#strong{section divider}after section divider"}
141
+
142
+ assert_not_nil @target
143
+ assert_equal '<html>before section divider<strong>section divider</strong>after section divider</html>', @target.to_xml
144
+ end
145
+
146
+ #TODO handle special characters such as #, {, }, and .
147
+ #TODO CDATA support
148
+ #TODO encode special characters
149
+
150
+ def test_html_alternative_syntax_for_id_and_class_attributes
151
+ @target = html_thesis_document {
152
+ body_main {
153
+ h1__title
154
+ }
155
+ }
156
+
157
+ assert_not_nil @target
158
+ assert_equal '<html id="thesis" class="document"><body id="main"><h1 class="title" /></body></html>', @target.to_xml
159
+ end
160
+
161
+ end
162
+
163
+