scarpe 0.2.2 → 0.3.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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +16 -2
  4. data/Gemfile.lock +7 -3
  5. data/README.md +24 -8
  6. data/Rakefile +1 -1
  7. data/examples/animate.rb +20 -0
  8. data/examples/arrow.rb +10 -0
  9. data/examples/btn_tooltip.rb +7 -0
  10. data/examples/button_style_changed.rb +7 -0
  11. data/examples/button_styles_default.rb +6 -0
  12. data/examples/gen.rb +8 -8
  13. data/examples/highlander.rb +3 -3
  14. data/examples/legacy/README.md +6 -0
  15. data/examples/legacy/not_checked/shoes-contrib/basic/shoes-notes.rb +1 -1
  16. data/examples/legacy/not_checked/simple/anim-shapes.rb +1 -1
  17. data/examples/legacy/not_checked/speedometer_app.rb +55 -0
  18. data/examples/legacy/working/simple/image-icon.rb +3 -0
  19. data/examples/legacy/{not_checked → working}/simple/image.rb +1 -1
  20. data/examples/list_box_choose.rb +17 -0
  21. data/examples/local_assets/local_file_server.rb +82 -0
  22. data/examples/local_assets/sample.gif +0 -0
  23. data/examples/local_assets/sample.mp4 +0 -0
  24. data/examples/local_fonts.rb +2 -2
  25. data/examples/local_images.rb +2 -3
  26. data/examples/para/para_text.rb +14 -0
  27. data/examples/progress.rb +31 -0
  28. data/examples/radio/radio_groups.rb +2 -2
  29. data/examples/rect.rb +4 -0
  30. data/examples/rotate_shapes.rb +17 -0
  31. data/examples/simpler-menu.rb +21 -0
  32. data/exe/scarpe +2 -1
  33. data/lacci/Gemfile +2 -0
  34. data/lacci/Gemfile.lock +8 -1
  35. data/lacci/lacci.gemspec +1 -1
  36. data/lacci/lib/lacci/scarpe_cli.rb +2 -1
  37. data/lacci/lib/lacci/scarpe_core.rb +2 -1
  38. data/lacci/lib/lacci/version.rb +1 -1
  39. data/lacci/lib/scarpe/niente/app.rb +23 -0
  40. data/lacci/lib/scarpe/niente/display_service.rb +62 -0
  41. data/lacci/lib/scarpe/niente/drawable.rb +57 -0
  42. data/lacci/lib/scarpe/niente/logger.rb +29 -0
  43. data/lacci/lib/scarpe/niente/shoes_spec.rb +87 -0
  44. data/lacci/lib/scarpe/niente.rb +20 -0
  45. data/lacci/lib/shoes/app.rb +88 -43
  46. data/lacci/lib/shoes/background.rb +2 -2
  47. data/lacci/lib/shoes/border.rb +2 -2
  48. data/lacci/lib/shoes/builtins.rb +63 -0
  49. data/lacci/lib/shoes/changelog.rb +52 -0
  50. data/lacci/lib/shoes/colors.rb +3 -1
  51. data/lacci/lib/shoes/constants.rb +19 -1
  52. data/lacci/lib/shoes/display_service.rb +39 -16
  53. data/lacci/lib/shoes/download.rb +2 -2
  54. data/lacci/lib/shoes/drawable.rb +380 -0
  55. data/lacci/lib/shoes/drawables/arc.rb +49 -0
  56. data/lacci/lib/shoes/drawables/arrow.rb +41 -0
  57. data/lacci/lib/shoes/drawables/button.rb +73 -0
  58. data/lacci/lib/shoes/{widgets → drawables}/check.rb +5 -4
  59. data/lacci/lib/shoes/{widgets → drawables}/document_root.rb +3 -3
  60. data/lacci/lib/shoes/{widgets → drawables}/edit_box.rb +6 -6
  61. data/lacci/lib/shoes/{widgets → drawables}/edit_line.rb +6 -6
  62. data/lacci/lib/shoes/{widgets → drawables}/flow.rb +6 -6
  63. data/lacci/lib/shoes/{widgets → drawables}/image.rb +6 -6
  64. data/lacci/lib/shoes/{widgets → drawables}/line.rb +7 -5
  65. data/lacci/lib/shoes/drawables/link.rb +34 -0
  66. data/lacci/lib/shoes/drawables/list_box.rb +56 -0
  67. data/lacci/lib/shoes/drawables/para.rb +118 -0
  68. data/lacci/lib/shoes/drawables/progress.rb +14 -0
  69. data/lacci/lib/shoes/drawables/radio.rb +33 -0
  70. data/lacci/lib/shoes/drawables/rect.rb +17 -0
  71. data/lacci/lib/shoes/{widgets → drawables}/shape.rb +6 -7
  72. data/lacci/lib/shoes/{widgets → drawables}/slot.rb +32 -20
  73. data/lacci/lib/shoes/{widgets → drawables}/span.rb +8 -7
  74. data/lacci/lib/shoes/{widgets → drawables}/stack.rb +6 -4
  75. data/lacci/lib/shoes/drawables/star.rb +50 -0
  76. data/lacci/lib/shoes/drawables/subscription_item.rb +93 -0
  77. data/lacci/lib/shoes/drawables/text_drawable.rb +63 -0
  78. data/lacci/lib/shoes/drawables/video.rb +16 -0
  79. data/lacci/lib/shoes/drawables/widget.rb +69 -0
  80. data/lacci/lib/shoes/drawables.rb +31 -0
  81. data/lacci/lib/shoes/errors.rb +28 -0
  82. data/lacci/lib/shoes/log.rb +2 -2
  83. data/lacci/lib/shoes/ruby_extensions.rb +15 -0
  84. data/lacci/lib/shoes/spacing.rb +2 -2
  85. data/lacci/lib/shoes-spec.rb +93 -0
  86. data/lacci/lib/shoes.rb +27 -7
  87. data/lacci/test/test_helper.rb +54 -0
  88. data/lacci/test/test_lacci.rb +12 -3
  89. data/lacci/test/test_shoes_errors.rb +49 -0
  90. data/lib/scarpe/cats_cradle.rb +81 -59
  91. data/lib/scarpe/errors.rb +77 -0
  92. data/lib/scarpe/evented_assertions.rb +50 -17
  93. data/lib/scarpe/shoes_spec.rb +181 -0
  94. data/lib/scarpe/version.rb +2 -2
  95. data/lib/scarpe/wv/app.rb +20 -20
  96. data/lib/scarpe/wv/arc.rb +4 -47
  97. data/lib/scarpe/wv/arrow.rb +9 -0
  98. data/lib/scarpe/wv/button.rb +7 -35
  99. data/lib/scarpe/wv/check.rb +3 -5
  100. data/lib/scarpe/wv/control_interface.rb +18 -20
  101. data/lib/scarpe/wv/document_root.rb +81 -4
  102. data/lib/scarpe/wv/{widget.rb → drawable.rb} +66 -43
  103. data/lib/scarpe/wv/edit_box.rb +4 -17
  104. data/lib/scarpe/wv/edit_line.rb +4 -18
  105. data/lib/scarpe/wv/flow.rb +2 -18
  106. data/lib/scarpe/wv/image.rb +8 -28
  107. data/lib/scarpe/wv/line.rb +3 -25
  108. data/lib/scarpe/wv/link.rb +3 -16
  109. data/lib/scarpe/wv/list_box.rb +6 -29
  110. data/lib/scarpe/wv/para.rb +11 -30
  111. data/lib/scarpe/wv/progress.rb +19 -0
  112. data/lib/scarpe/wv/radio.rb +9 -10
  113. data/lib/scarpe/wv/rect.rb +13 -0
  114. data/lib/scarpe/wv/shape.rb +3 -8
  115. data/lib/scarpe/wv/slot.rb +8 -25
  116. data/lib/scarpe/wv/span.rb +3 -27
  117. data/lib/scarpe/wv/stack.rb +2 -18
  118. data/lib/scarpe/wv/star.rb +3 -53
  119. data/lib/scarpe/wv/subscription_item.rb +38 -4
  120. data/lib/scarpe/wv/text_drawable.rb +32 -0
  121. data/lib/scarpe/wv/video.rb +15 -15
  122. data/lib/scarpe/wv/web_wrangler.rb +299 -329
  123. data/lib/scarpe/wv/webview_local_display.rb +48 -33
  124. data/lib/scarpe/wv/webview_relay_display.rb +12 -12
  125. data/lib/scarpe/wv/webview_relay_util.rb +7 -10
  126. data/lib/scarpe/wv/wv_display_worker.rb +2 -2
  127. data/lib/scarpe/wv.rb +45 -12
  128. data/lib/scarpe/wv_local.rb +1 -1
  129. data/lib/scarpe/wv_relay.rb +1 -1
  130. data/lib/scarpe.rb +1 -0
  131. data/logger/debug_web_wrangler.json +1 -1
  132. data/logger/scarpe_wv_test.json +1 -1
  133. data/scarpe-components/Gemfile.lock +86 -0
  134. data/scarpe-components/lib/scarpe/components/base64.rb +3 -7
  135. data/scarpe-components/lib/scarpe/components/calzini/alert.rb +49 -0
  136. data/scarpe-components/lib/scarpe/components/calzini/art_widgets.rb +203 -0
  137. data/scarpe-components/lib/scarpe/components/calzini/button.rb +39 -0
  138. data/scarpe-components/lib/scarpe/components/calzini/misc.rb +146 -0
  139. data/scarpe-components/lib/scarpe/components/calzini/para.rb +35 -0
  140. data/scarpe-components/lib/scarpe/components/calzini/slots.rb +155 -0
  141. data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +65 -0
  142. data/scarpe-components/lib/scarpe/components/calzini.rb +149 -0
  143. data/scarpe-components/lib/scarpe/components/errors.rb +20 -0
  144. data/scarpe-components/lib/scarpe/components/file_helpers.rb +1 -0
  145. data/scarpe-components/lib/scarpe/components/html.rb +131 -0
  146. data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +75 -0
  147. data/scarpe-components/lib/scarpe/components/minitest_import_runnable.rb +98 -0
  148. data/scarpe-components/lib/scarpe/components/minitest_result.rb +86 -0
  149. data/scarpe-components/lib/scarpe/components/modular_logger.rb +5 -5
  150. data/scarpe-components/lib/scarpe/components/print_logger.rb +9 -5
  151. data/scarpe-components/lib/scarpe/components/promises.rb +14 -14
  152. data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +36 -17
  153. data/scarpe-components/lib/scarpe/components/string_helpers.rb +10 -0
  154. data/scarpe-components/lib/scarpe/components/tiranti.rb +225 -0
  155. data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +45 -5
  156. data/scarpe-components/lib/scarpe/components/version.rb +2 -2
  157. data/scarpe-components/test/calzini/test_calzini_alert.rb +30 -0
  158. data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +105 -0
  159. data/scarpe-components/test/calzini/test_calzini_button.rb +52 -0
  160. data/scarpe-components/test/calzini/test_calzini_misc.rb +115 -0
  161. data/scarpe-components/test/calzini/test_calzini_para.rb +37 -0
  162. data/scarpe-components/test/calzini/test_calzini_slots.rb +130 -0
  163. data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +41 -0
  164. data/scarpe-components/test/mtr_data/exception.json +1 -0
  165. data/scarpe-components/test/mtr_data/fail_with_message.json +1 -0
  166. data/scarpe-components/test/mtr_data/skipped_no_message.json +1 -0
  167. data/scarpe-components/test/mtr_data/skipped_w_msg.json +1 -0
  168. data/scarpe-components/test/mtr_data/succeed_2_asserts.json +1 -0
  169. data/scarpe-components/test/test_dimensions.rb +26 -0
  170. data/scarpe-components/test/test_helper.rb +20 -0
  171. data/scarpe-components/test/test_html.rb +65 -0
  172. data/scarpe-components/test/test_minitest_result.rb +61 -0
  173. data/scarpe-components/test/test_promises.rb +5 -4
  174. data/scarpe-components/test/test_segmented_app_files.rb +8 -6
  175. data/scarpegen.rb +14 -14
  176. data/sig/scarpe.rbs +1 -1
  177. data/templates/basic_class_template.erb +13 -14
  178. data/templates/class_template_with_event_bind.erb +4 -4
  179. data/templates/class_template_with_shapes.erb +8 -17
  180. data/templates/example_template.erb +1 -1
  181. data/templates/module_template.erb +4 -4
  182. data/templates/webview_template.erb +3 -2
  183. metadata +113 -55
  184. data/examples/legacy/not_checked/shoes-contrib/elements/image-icon.rb +0 -3
  185. data/lacci/lib/shoes/widget.rb +0 -218
  186. data/lacci/lib/shoes/widgets/alert.rb +0 -19
  187. data/lacci/lib/shoes/widgets/arc.rb +0 -51
  188. data/lacci/lib/shoes/widgets/button.rb +0 -35
  189. data/lacci/lib/shoes/widgets/font.rb +0 -14
  190. data/lacci/lib/shoes/widgets/link.rb +0 -25
  191. data/lacci/lib/shoes/widgets/list_box.rb +0 -25
  192. data/lacci/lib/shoes/widgets/para.rb +0 -68
  193. data/lacci/lib/shoes/widgets/radio.rb +0 -35
  194. data/lacci/lib/shoes/widgets/star.rb +0 -44
  195. data/lacci/lib/shoes/widgets/subscription_item.rb +0 -60
  196. data/lacci/lib/shoes/widgets/text_widget.rb +0 -51
  197. data/lacci/lib/shoes/widgets/video.rb +0 -15
  198. data/lacci/lib/shoes/widgets.rb +0 -29
  199. data/lib/scarpe/wv/alert.rb +0 -66
  200. data/lib/scarpe/wv/background.rb +0 -27
  201. data/lib/scarpe/wv/border.rb +0 -24
  202. data/lib/scarpe/wv/control_interface_test.rb +0 -238
  203. data/lib/scarpe/wv/dimensions.rb +0 -22
  204. data/lib/scarpe/wv/font.rb +0 -36
  205. data/lib/scarpe/wv/html.rb +0 -108
  206. data/lib/scarpe/wv/spacing.rb +0 -41
  207. data/lib/scarpe/wv/text_widget.rb +0 -30
  208. /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/definr.rb +0 -0
  209. /data/examples/legacy/not_checked/{expert → shoes-contrib/basic}/funnies.rb +0 -0
  210. /data/examples/legacy/not_checked/shoes-contrib/{elements → basic}/list_box-select-class.rb +0 -0
  211. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/basic-edit-box.rb +0 -0
  212. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/basic-fps.rb +0 -0
  213. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/border-cat.rb +0 -0
  214. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/check-mate.rb +0 -0
  215. /data/examples/legacy/{not_checked/shoes-contrib/manipulation → working/simple}/clear-slot.rb +0 -0
  216. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/clock.rb +0 -0
  217. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/gradient-shoes.rb +0 -0
  218. /data/examples/legacy/{not_checked/shoes-contrib/basic → working/simple}/list_box-shape-report.rb +0 -0
  219. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/list_box.rb +0 -0
  220. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/phat-button.rb +0 -0
  221. /data/examples/legacy/{not_checked/shoes-contrib → working}/simple/simple-calc.rb +0 -0
  222. /data/examples/legacy/{not_checked/shoes-contrib/position → working/simple}/stack-width.rb +0 -0
  223. /data/examples/legacy/{not_checked/shoes-contrib/elements → working/simple}/width-introspec.rb +0 -0
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniArtDrawables < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ end
9
+
10
+ def assert_start_and_finish(start, finish, value)
11
+ assert value.start_with?(start),
12
+ "Expected string to start with correct prefix... prefix: #{start.inspect} Value: #{value.inspect}"
13
+ assert value.end_with?(finish),
14
+ "Expected string to end with correct suffix... suffix: #{finish.inspect} Value: #{value.inspect}"
15
+ end
16
+
17
+ def test_arc_example
18
+ arc_example = @calzini.render(
19
+ "arc",
20
+ {
21
+ "width" => 200,
22
+ "height" => 150,
23
+ "left" => 17,
24
+ "top" => 42,
25
+ "angle1" => 3.14 / 2,
26
+ "angle2" => 3.14 / 4,
27
+ },
28
+ )
29
+ ex_html_start = %{<div id="elt-1" style="left:17px;top:42px;width:200px;height:150px"><svg width="200" height="150"><path d="M100 75 L200 75 A100 75 0 1 0 170.73882691671997 128.01188858290243 Z" transform="rotate(, 100, 75)" /></svg></div>}
30
+ ex_html_end = %{" /></svg></div>}
31
+ assert_start_and_finish(ex_html_start, ex_html_end, arc_example)
32
+ end
33
+
34
+ def test_line_example
35
+ assert_equal %{<div id="elt-1" style="left:7px;top:4px">} +
36
+ %{<svg width="100" height="104"><line x1="7" y1="4" x2="100" y2="104" style="stroke:black;stroke-width:4">} +
37
+ %{</line></svg></div>},
38
+ @calzini.render("line", { "top" => "4", "left" => "7", "x1" => "20", "y1" => "17", "x2" => "100", "y2" => "104" })
39
+ end
40
+
41
+ def test_line_draw_context
42
+ assert_equal %{<div id="elt-1" style="left:7px;top:4px">} +
43
+ %{<svg width="100" height="104"><line x1="7" y1="4" x2="100" y2="104" style="stroke:red;stroke-width:4">} +
44
+ %{</line></svg></div>},
45
+ @calzini.render(
46
+ "line",
47
+ { "top" => "4", "left" => "7", "x1" => "20", "y1" => "17", "x2" => "100", "y2" => "104", "draw_context" => { "stroke" => "red" } },
48
+ )
49
+ end
50
+
51
+ def test_line_hidden
52
+ assert_equal %{<div id="elt-1" style="display:none;left:7px;top:4px">} +
53
+ %{<svg width="100" height="104"><line x1="7" y1="4" x2="100" y2="104" style="stroke:black;stroke-width:4">} +
54
+ %{</line></svg></div>},
55
+ @calzini.render("line", { "top" => "4", "left" => "7", "x1" => "20", "y1" => "17", "x2" => "100", "y2" => "104", "hidden" => true })
56
+ end
57
+
58
+ def test_rect_default_stroke
59
+ assert_equal %{<div id="elt-1" style="display:none">} +
60
+ %{<svg width="147" height="91"><rect x="12" y="9" width="147" height="91" transform="rotate( 73 45)" />} +
61
+ %{</svg></div>},
62
+ @calzini.render("rect", { "top" => "9", "left" => "12", "width" => "147", "height" => "91", "draw_context" => {}, "hidden" => true })
63
+ end
64
+
65
+ def test_rect_round_corners
66
+ assert_equal %{<div id="elt-1" style="display:none">} +
67
+ %{<svg width="177" height="121"><rect x="12" y="9" width="147" height="91" style="stroke:red" rx="15" transform="rotate( 88 60)" />} +
68
+ %{</svg></div>},
69
+ @calzini.render(
70
+ "rect",
71
+ {
72
+ "top" => "9",
73
+ "left" => "12",
74
+ "width" => "147",
75
+ "height" => "91",
76
+ "curve" => "15",
77
+ "draw_context" => { "stroke" => "red" },
78
+ "hidden" => true,
79
+ },
80
+ )
81
+ end
82
+
83
+ def test_rect_hidden
84
+ assert_equal %{<div id="elt-1" style="display:none">} +
85
+ %{<svg width="20" height="17"><rect x="7" y="4" width="20" height="17" transform="rotate( 10 8)" />} +
86
+ %{</svg></div>},
87
+ @calzini.render("rect", { "top" => "4", "left" => "7", "width" => "20", "height" => "17", "hidden" => true })
88
+ end
89
+
90
+ def test_star_simple
91
+ start = %{<div id="elt-1"><svg width="2.0" height="2.0" style="fill:black"><polygon points="2.0,1.0,1.4}
92
+ finish = %{" style="stroke:black;stroke-width:2" /></svg></div>}
93
+ assert_start_and_finish start,
94
+ finish,
95
+ @calzini.render("star", { "points" => 5, "outer" => 2.0, "inner" => 1.0 })
96
+ end
97
+
98
+ def test_star_colors
99
+ start = %{<div id="elt-1"><svg width="2.0" height="2.0" style="fill:red"><polygon points="2.0,1.0,1.4}
100
+ finish = %{" style="stroke:green;stroke-width:2" /></svg></div>}
101
+ assert_start_and_finish start,
102
+ finish,
103
+ @calzini.render("star", { "points" => 5, "outer" => 2.0, "inner" => 1.0, "draw_context" => { "fill" => "red", "stroke" => "green" } })
104
+ end
105
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniButton < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ end
9
+
10
+ def test_button_defaults
11
+ assert_equal %{<button id="elt-1" onclick="handle('click')" onmouseover="handle('hover')"></button>}, @calzini.render("button", {})
12
+ end
13
+
14
+ def test_button_all_properties_set
15
+ props = {
16
+ "color" => "red",
17
+ "padding_top" => "4",
18
+ "padding_bottom" => "5",
19
+ "text_color" => "blue",
20
+ "width" => 201,
21
+ "height" => 203,
22
+ "font_size" => "14",
23
+ "top" => "10",
24
+ "left" => "11",
25
+ "size" => "17",
26
+ "font" => "Lucida",
27
+ }
28
+ assert_equal %{<button id="elt-1" onclick="handle('click')" onmouseover="handle('hover')" } +
29
+ %{style="background-color:red;padding-top:4;padding-bottom:5;color:blue;} +
30
+ %{width:201px;height:203px;font-size:17px;top:10;left:11;position:absolute;} +
31
+ %{font-family:Lucida"></button>},
32
+ @calzini.render("button", props)
33
+ end
34
+
35
+ def test_button_all_properties_nil
36
+ props = {
37
+ "color" => nil,
38
+ "padding_top" => nil,
39
+ "padding_bottom" => nil,
40
+ "text_color" => nil,
41
+ "width" => nil,
42
+ "height" => nil,
43
+ "font_size" => nil,
44
+ "top" => nil,
45
+ "left" => nil,
46
+ "size" => nil,
47
+ "font" => nil,
48
+ "stroke" => nil,
49
+ }
50
+ assert_equal %{<button id="elt-1" onclick="handle('click')" onmouseover="handle('hover')"></button>}, @calzini.render("button", props)
51
+ end
52
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniMiscDrawables < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ end
9
+
10
+ def test_checkbox_checked
11
+ assert_equal %{<input type="checkbox" id="elt-1" onclick="handle('click')" value="done?" checked="true" />},
12
+ @calzini.render("check", { "text" => "done?", "checked" => true })
13
+ end
14
+
15
+ def test_checkbox_unchecked
16
+ assert_equal %{<input type="checkbox" id="elt-1" onclick="handle('click')" value="done?" checked="false" />},
17
+ @calzini.render("check", { "text" => "done?", "checked" => false })
18
+ end
19
+
20
+ def test_checkbox_hidden
21
+ assert_equal %{<input type="checkbox" id="elt-1" onclick="handle('click')" value="done?" checked="true" style="display:none" />},
22
+ @calzini.render("check", { "text" => "done?", "checked" => true, "hidden" => true })
23
+ end
24
+
25
+ def test_edit_box_default
26
+ assert_equal %{<textarea id="elt-1" oninput="handle('change', this.value)"></textarea>},
27
+ @calzini.render("edit_box", {})
28
+ end
29
+
30
+ def test_edit_box_hidden
31
+ assert_equal %{<textarea id="elt-1" oninput="handle('change', this.value)" style="display:none"></textarea>},
32
+ @calzini.render("edit_box", { "hidden" => true })
33
+ end
34
+
35
+ def test_edit_box_simple
36
+ assert_equal %{<textarea id="elt-1" oninput="handle('change', this.value)" style="height:50;width:75">default</textarea>},
37
+ @calzini.render("edit_box", { "height" => "50", "width" => "75", "text" => "default" })
38
+ end
39
+
40
+ def test_edit_line_default
41
+ assert_equal %{<input id="elt-1" oninput="handle('change', this.value)" />},
42
+ @calzini.render("edit_line", {})
43
+ end
44
+
45
+ def test_edit_line_hidden
46
+ assert_equal %{<input id="elt-1" oninput="handle('change', this.value)" style="display:none" />},
47
+ @calzini.render("edit_line", { "hidden" => true })
48
+ end
49
+
50
+ def test_edit_line_simple
51
+ assert_equal %{<input id="elt-1" oninput="handle('change', this.value)" value="(default)" style="width:200" />},
52
+ @calzini.render("edit_line", { "width" => "200", "text" => "(default)" })
53
+ end
54
+
55
+ def test_image_simple
56
+ assert_equal %{<img id="elt-1" src="https://example.com/example.png" />},
57
+ @calzini.render("image", { "url" => "https://example.com/example.png" })
58
+ end
59
+
60
+ def test_image_with_click
61
+ assert_equal %{<a id="elt-1" href="https://google.com"><img id="elt-1" src="https://example.com/example.png" style="width:150;height:200" /></a>},
62
+ @calzini.render("image", { "url" => "https://example.com/example.png", "height" => "200", "width" => "150", "click" => "https://google.com" })
63
+ end
64
+
65
+ def test_image_with_abs_positioning
66
+ assert_equal %{<img id="elt-1" src="https://example.com/example.png" style="width:150;height:200;top:15;left:20;position:absolute" />},
67
+ @calzini.render("image", { "url" => "https://example.com/example.png", "height" => "200", "width" => "150", "top" => "15", "left" => "20" })
68
+ end
69
+
70
+ def test_list_box_empty
71
+ assert_equal %{<select id="elt-1" onchange="handle('change', this.options[this.selectedIndex].value)"></select>},
72
+ @calzini.render("list_box", {})
73
+ end
74
+
75
+ def test_list_box_simple
76
+ assert_equal %{<select id="elt-1" onchange="handle('change', this.options[this.selectedIndex].value)"} +
77
+ %{ style="height:75;width:150"><option value="dog">dog</option>} +
78
+ %{<option value="cat" selected="true">cat</option><option value="bird">bird</option></select>},
79
+ @calzini.render("list_box", { "height" => "75", "width" => "150", "items" => ["dog", "cat", "bird"], "choose" => "cat" })
80
+ end
81
+
82
+ def test_list_box_none_selected
83
+ assert_equal %{<select id="elt-1" onchange="handle('change', this.options[this.selectedIndex].value)"} +
84
+ %{ style="height:75;width:150"><option value="dog">dog</option>} +
85
+ %{<option value="cat">cat</option><option value="bird">bird</option></select>},
86
+ @calzini.render("list_box", { "height" => "75", "width" => "150", "items" => ["dog", "cat", "bird"] })
87
+ end
88
+
89
+ def test_list_box_just_items
90
+ assert_equal %{<select id="elt-1" onchange="handle('change', this.options[this.selectedIndex].value)">} +
91
+ %{<option value="dog">dog</option>} +
92
+ %{<option value="cat">cat</option><option value="bird">bird</option></select>},
93
+ @calzini.render("list_box", { "items" => ["dog", "cat", "bird"] })
94
+ end
95
+
96
+ def test_radio_minimal
97
+ assert_equal %{<input type="radio" id="elt-1" onclick="handle('click')" name="no_group" />},
98
+ @calzini.render("radio", {})
99
+ end
100
+
101
+ def test_radio_group
102
+ assert_equal %{<input type="radio" id="elt-1" onclick="handle('click')" name="boba" />},
103
+ @calzini.render("radio", { "group" => "boba" })
104
+ end
105
+
106
+ def test_radio_checked
107
+ assert_equal %{<input type="radio" id="elt-1" onclick="handle('click')" name="boba" checked="true" />},
108
+ @calzini.render("radio", { "group" => "boba", "checked" => true })
109
+ end
110
+
111
+ def test_video_simple
112
+ assert_equal %{<video id="elt-1" controls="true"><source type="video/mp4" /></video>},
113
+ @calzini.render("video", { "url" => "http://techslides.com/demos/sample-videos/small.mp4", "format" => "video/mp4" })
114
+ end
115
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniPara < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ end
9
+
10
+ # Note that Calzini doesn't render the text items for itself.
11
+ def test_para_simple
12
+ assert_equal %{<p id="elt-1">OK</p>},
13
+ @calzini.render("para", {}) { "OK" }
14
+ end
15
+
16
+ def test_para_with_stroke_and_font
17
+ assert_equal %{<p id="elt-1" style="color:#FF0000;font-family:Lucida">OK</p>},
18
+ @calzini.render("para", { "stroke" => [1.0, 0.0, 0.0], "font" => "Lucida" }) { "OK" }
19
+ end
20
+
21
+ def test_para_with_string_banner
22
+ assert_equal %{<p id="elt-1" style="font-size:48px"></p>},
23
+ @calzini.render("para", { "size" => "banner" })
24
+ end
25
+
26
+ def test_para_with_symbol_banner
27
+ assert_equal %{<p id="elt-1" style="font-size:48px"></p>},
28
+ @calzini.render("para", { "size" => :banner })
29
+ end
30
+
31
+ # Eventually this should probably need to be marked as a Scarpe extension, here or
32
+ # elsewhere.
33
+ def test_para_with_html_attributes
34
+ assert_equal %{<p avocado="true" class="avocado_bearing" id="elt-1"></p>},
35
+ @calzini.render("para", { "html_attributes" => { "avocado" => true, "class" => "avocado_bearing" } })
36
+ end
37
+ end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniSlots < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ @stack_default_style = %{display:flex;flex-direction:column;align-content:flex-start;justify-content:flex-start;align-items:flex-start}
9
+ @flow_default_style = %{display:flex;flex-direction:row;flex-wrap:wrap;align-content:flex-start;justify-content:flex-start;align-items:flex-start}
10
+ end
11
+
12
+ def test_stack_simple
13
+ assert_equal %{<div id="elt-1" } +
14
+ %{style="#{@stack_default_style}">} +
15
+ %{contents</div>},
16
+ @calzini.render("stack", {}) { "contents" }
17
+ end
18
+
19
+ def test_flow_simple
20
+ assert_equal %{<div id="elt-1" } +
21
+ %{style="#{@flow_default_style}">} +
22
+ %{contents</div>},
23
+ @calzini.render("flow", {}) { "contents" }
24
+ end
25
+
26
+ def test_docroot_simple
27
+ assert_equal %{<div id="elt-1" } +
28
+ %{style="#{@flow_default_style}">} +
29
+ %{contents</div>},
30
+ @calzini.render("documentroot", {}) { "contents" }
31
+ end
32
+
33
+ def test_stack_border_plain_color
34
+ assert_equal %{<div id="elt-1" } +
35
+ %{style="#{@stack_default_style};border-style:solid;border-width:1px;border-radius:0px;border-color:red">} +
36
+ %{contents</div>},
37
+ @calzini.render("stack", { "border_color" => "red" }) { "contents" }
38
+ end
39
+
40
+ def test_stack_border_gradient
41
+ assert_equal %{<div id="elt-1" } +
42
+ %{style="#{@stack_default_style};border-style:solid;border-width:1px;border-radius:0px;border-image:linear-gradient(45deg, red, green)">} +
43
+ %{contents</div>},
44
+ @calzini.render("stack", { "border_color" => ("red".."green") }) { "contents" }
45
+ end
46
+
47
+ def test_stack_border_rgba
48
+ assert_equal %{<div id="elt-1" } +
49
+ %{style="#{@stack_default_style};border-style:solid;border-width:1px;border-radius:0px;border-color:rgba(1.0, 0.0, 0.0, 1.0)">} +
50
+ %{contents</div>},
51
+ @calzini.render("stack", { "border_color" => [1.0, 0.0, 0.0, 1.0] }) { "contents" }
52
+ end
53
+
54
+ def test_stack_border_attrs
55
+ assert_equal %{<div id="elt-1" } +
56
+ %{style="#{@stack_default_style};border-style:solid;border-width:3px;border-radius:2px;border-color:red">} +
57
+ %{contents</div>},
58
+ @calzini.render("stack", { "border_color" => "red", "options" => { "strokewidth" => 3, "curve" => 2 } }) { "contents" }
59
+ end
60
+
61
+ def test_stack_margin
62
+ assert_equal %{<div id="elt-1" } +
63
+ %{style="#{@stack_default_style};margin:25px">} +
64
+ %{contents</div>},
65
+ @calzini.render("stack", { "margin" => 25 }) { "contents" }
66
+ end
67
+
68
+ def test_stack_options_margin
69
+ assert_equal %{<div id="elt-1" } +
70
+ %{style="#{@stack_default_style};margin:15px">} +
71
+ %{contents</div>},
72
+ @calzini.render("stack", { "options" => { "margin" => 15 } }) { "contents" }
73
+ end
74
+
75
+ def test_stack_margin_overrides_options
76
+ assert_equal %{<div id="elt-1" } +
77
+ %{style="#{@stack_default_style};margin:25px">} +
78
+ %{contents</div>},
79
+ @calzini.render("stack", { "margin" => 25, "options" => { "margin" => 15 } }) { "contents" }
80
+ end
81
+
82
+ def test_stack_padding
83
+ assert_equal %{<div id="elt-1" } +
84
+ %{style="#{@stack_default_style};padding:25px">} +
85
+ %{contents</div>},
86
+ @calzini.render("stack", { "padding" => 25 }) { "contents" }
87
+ end
88
+
89
+ def test_stack_options_padding
90
+ assert_equal %{<div id="elt-1" } +
91
+ %{style="#{@stack_default_style};padding:15px">} +
92
+ %{contents</div>},
93
+ @calzini.render("stack", { "options" => { "padding" => 15 } }) { "contents" }
94
+ end
95
+
96
+ def test_stack_padding_overrides_options
97
+ assert_equal %{<div id="elt-1" } +
98
+ %{style="#{@stack_default_style};padding:25px">} +
99
+ %{contents</div>},
100
+ @calzini.render("stack", { "padding" => 25, "options" => { "padding" => 15 } }) { "contents" }
101
+ end
102
+
103
+ def test_stack_options_hash_margin
104
+ assert_equal %{<div id="elt-1" } +
105
+ %{style="#{@stack_default_style};margin-left:5px;margin-right:10px;margin-top:15px;margin-bottom:20px">} +
106
+ %{contents</div>},
107
+ @calzini.render("stack", { "margin" => { left: 5, right: 10, top: 15, bottom: 20 } }) { "contents" }
108
+ end
109
+
110
+ def test_stack_options_array_margin
111
+ assert_equal %{<div id="elt-1" } +
112
+ %{style="#{@stack_default_style};margin-left:5px;margin-right:10px;margin-top:15px;margin-bottom:20px">} +
113
+ %{contents</div>},
114
+ @calzini.render("stack", { "margin" => [5, 10, 15, 20] }) { "contents" }
115
+ end
116
+
117
+ def test_stack_options_margin_left_overrides_options
118
+ assert_equal %{<div id="elt-1" } +
119
+ %{style="#{@stack_default_style};margin-left:25px">} +
120
+ %{contents</div>},
121
+ @calzini.render("stack", { "margin_left" => 25, "options" => { "margin" => 15 } }) { "contents" }
122
+ end
123
+
124
+ def test_stack_margin_left_overrides_margin
125
+ assert_equal %{<div id="elt-1" } +
126
+ %{style="#{@stack_default_style};margin:25px;margin-left:15px">} +
127
+ %{contents</div>},
128
+ @calzini.render("stack", { "margin" => 25, "margin_left" => 15 }) { "contents" }
129
+ end
130
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../test_helper"
4
+
5
+ class TestCalziniTextDrawables < Minitest::Test
6
+ def setup
7
+ @calzini = CalziniRenderer.new
8
+ end
9
+
10
+ def test_link_simple
11
+ assert_equal %{<a id="elt-1" href="https://google.com">click here</a>},
12
+ @calzini.render("link", { "click" => "https://google.com", "text" => "click here" })
13
+ end
14
+
15
+ def test_link_block
16
+ assert_equal %{<a id="elt-1" onclick="handle('click')">click here</a>},
17
+ @calzini.render("link", { "has_block" => true, "text" => "click here" })
18
+ end
19
+
20
+ def test_span_simple
21
+ assert_equal %{<span id="elt-1" style="color:red;font-size:48px;font-family:Lucida">big red</span>},
22
+ @calzini.render("span", { "stroke" => "red", "size" => :banner, "font" => "Lucida" }) { "big red" }
23
+ end
24
+
25
+ def test_span_html_attributes
26
+ assert_equal %{<span class="biggreen" id="elt-1" style="color:green;font-size:48px">big green</span>},
27
+ @calzini.render("span", { "stroke" => "green", "size" => "banner", "html_attributes" => { "class" => "biggreen" } }) { "big green" }
28
+ end
29
+
30
+ def test_code_simple
31
+ assert_equal %{<code>Hello</code>}, @calzini.render("code", {}) { "Hello" }
32
+ end
33
+
34
+ def test_em_simple
35
+ assert_equal %{<em>Hello</em>}, @calzini.render("em", {}) { "Hello" }
36
+ end
37
+
38
+ def test_strong_simple
39
+ assert_equal %{<strong>Hello</strong>}, @calzini.render("strong", {}) { "Hello" }
40
+ end
41
+ end
@@ -0,0 +1 @@
1
+ [{"name":"test_sspec","klass":"TestListBoxShoesSpecIntegration","assertions":0,"failures":[["unexpected","{\"json_class\":\"Minitest::UnexpectedError\",\"m\":\"RuntimeError: This is an exception\\n (eval):1:in `block in run_shoes_spec_test_code'\\n /Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\\n /Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"b\":[\"(eval):1:in `block in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:102:in `block (3 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:199:in `capture_exceptions'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:97:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:296:in `time_it'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:96:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:247:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:95:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-reporters-1.6.0/lib/minitest/reporters.rb:48:in `run_with_hooks'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:1051:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:365:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:352:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `each'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:378:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:350:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `block in __run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `map'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `__run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:159:in `run'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:51:in `block (2 levels) in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `instance_eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `block in on_event'\"]}","{\"json_class\":\"RuntimeError\",\"m\":\"This is an exception\",\"b\":[\"(eval):1:in `block in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:102:in `block (3 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:199:in `capture_exceptions'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:97:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:296:in `time_it'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:96:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:247:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:95:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-reporters-1.6.0/lib/minitest/reporters.rb:48:in `run_with_hooks'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:1051:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:365:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:352:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `each'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:378:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:350:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `block in __run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `map'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `__run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:159:in `run'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:51:in `block (2 levels) in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `instance_eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `block in on_event'\"]}"]],"time":0.00011800043284893036,"metadata":{},"source_location":["/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb",61]}]
@@ -0,0 +1 @@
1
+ [{"name":"test_sspec","klass":"TestListBoxShoesSpecIntegration","assertions":1,"failures":[["exception","{\"json_class\":\"Minitest::Assertion\",\"m\":\"Fail with message\",\"b\":[\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/assertions.rb:183:in `assert'\",\"(eval):1:in `block in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:102:in `block (3 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:199:in `capture_exceptions'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:97:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:296:in `time_it'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:96:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:247:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:95:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-reporters-1.6.0/lib/minitest/reporters.rb:48:in `run_with_hooks'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:1051:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:365:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:352:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `each'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:378:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:350:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `block in __run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `map'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `__run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:159:in `run'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:51:in `block (2 levels) in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `instance_eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `block in on_event'\"]}"]],"time":6.899982690811157e-05,"metadata":{},"source_location":["/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb",61]}]
@@ -0,0 +1 @@
1
+ [{"name":"test_sspec","klass":"TestListBoxShoesSpecIntegration","assertions":0,"failures":[["exception","{\"json_class\":\"Minitest::Skip\",\"m\":\"Skipped, no message given\",\"b\":[\"(eval):1:in `block in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:102:in `block (3 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:199:in `capture_exceptions'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:97:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:296:in `time_it'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:96:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:247:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:95:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-reporters-1.6.0/lib/minitest/reporters.rb:48:in `run_with_hooks'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:1051:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:365:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:352:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `each'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:378:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:350:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `block in __run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `map'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `__run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:159:in `run'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:51:in `block (2 levels) in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `instance_eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `block in on_event'\"]}"]],"time":7.00000673532486e-05,"metadata":{},"source_location":["/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb",61]}]
@@ -0,0 +1 @@
1
+ [{"name":"test_sspec","klass":"TestListBoxShoesSpecIntegration","assertions":0,"failures":[["exception","{\"json_class\":\"Minitest::Skip\",\"m\":\"Just skipping\",\"b\":[\"(eval):1:in `block in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:62:in `block in run_shoes_spec_test_code'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:102:in `block (3 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:199:in `capture_exceptions'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:97:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:296:in `time_it'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:96:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:247:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest/test.rb:95:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-reporters-1.6.0/lib/minitest/reporters.rb:48:in `run_with_hooks'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:1051:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:365:in `run_one_method'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:352:in `block (2 levels) in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `each'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:351:in `block in run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:391:in `on_signal'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:378:in `with_info_handler'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:350:in `run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `block in __run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `map'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:182:in `__run'\",\"/Users/noah/.gem/ruby/3.2.2/gems/minitest-5.18.0/lib/minitest.rb:159:in `run'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb:51:in `block (2 levels) in run_shoes_spec_test_code'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `instance_eval'\",\"/Users/noah/src/shoes/scarpe/lib/scarpe/cats_cradle.rb:164:in `block in on_event'\"]}"]],"time":7.899943739175797e-05,"metadata":{},"source_location":["/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb",61]}]
@@ -0,0 +1 @@
1
+ [{"name":"test_sspec","klass":"TestListBoxShoesSpecIntegration","assertions":2,"failures":[],"time":4.399940371513367e-05,"metadata":{},"source_location":["/Users/noah/src/shoes/scarpe/lib/scarpe/shoes_spec.rb",61]}]
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+ require "scarpe/components/calzini"
5
+
6
+ class TestDimensions < Minitest::Test
7
+ def test_no_value_returns_nil
8
+ assert_nil ::Scarpe::Components::Calzini.dimensions_length(nil)
9
+ end
10
+
11
+ def test_integer_value_returns_px
12
+ assert_equal "100px", ::Scarpe::Components::Calzini.dimensions_length(100)
13
+ end
14
+
15
+ def test_negative_integer_value_returns_calc
16
+ assert_equal "calc(100% - 100px)", ::Scarpe::Components::Calzini.dimensions_length(-100)
17
+ end
18
+
19
+ def test_float_value_returns_percent
20
+ assert_equal "100.0%", ::Scarpe::Components::Calzini.dimensions_length(1.0)
21
+ end
22
+
23
+ def test_otherwise_you_get_what_you_give
24
+ assert_equal "banana", ::Scarpe::Components::Calzini.dimensions_length("banana")
25
+ end
26
+ end
@@ -2,6 +2,9 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
4
 
5
+ # Prevent Calzini or Tiranti from registering itself with Scarpe::Webview, which isn't present here
6
+ ENV["SCARPE_HTML_RENDERER"] = "NONE"
7
+
5
8
  require "shoes"
6
9
 
7
10
  require "minitest/autorun"
@@ -18,6 +21,23 @@ Shoes::Log.configure_logger(Shoes::Log::DEFAULT_LOG_CONFIG)
18
21
 
19
22
  require "scarpe/components/unit_test_helpers"
20
23
 
24
+ require "scarpe/components/calzini"
25
+
26
+ class CalziniRenderer
27
+ include Scarpe::Components::Calzini
28
+
29
+ attr_accessor :html_id
30
+
31
+ def initialize
32
+ @html_id = "elt-1"
33
+ end
34
+
35
+ def handler_js_code(event, *args)
36
+ js_args = ["'#{event}'", *args].join(", ")
37
+ "handle(#{js_args})"
38
+ end
39
+ end
40
+
21
41
  class Minitest::Test
22
42
  include Scarpe::Test::Helpers
23
43
  end