scarpe 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -1
- data/CHANGELOG.md +36 -4
- data/Gemfile +2 -1
- data/Gemfile.lock +13 -3
- data/LICENSE.txt +7 -1
- data/README.md +77 -14
- data/Rakefile +67 -0
- data/examples/Edit_box_Styles.rb +8 -0
- data/examples/Kerning.rb +7 -0
- data/examples/border.rb +11 -0
- data/examples/check.rb +2 -0
- data/examples/download_and_show_image.rb +3 -0
- data/examples/flags/finland.rb +15 -0
- data/examples/flags/italy.rb +11 -0
- data/examples/flags/mauritius.rb +14 -0
- data/examples/font_family.rb +17 -0
- data/examples/font_shorthand.rb +9 -0
- data/examples/gen.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
- data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
- data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
- data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
- data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
- data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
- data/examples/legacy/working/shoes_manual/animate.rb +7 -0
- data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
- data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
- data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
- data/examples/legacy/working/shoes_manual/download.rb +12 -0
- data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
- data/examples/legacy/working/shoes_manual/editline.rb +7 -0
- data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
- data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
- data/examples/legacy/working/shoes_manual/image.rb +5 -0
- data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/message.rb +18 -0
- data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
- data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
- data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/stack.rb +7 -0
- data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
- data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
- data/examples/legacy/working/shoes_manual/width.rb +4 -0
- data/examples/local_assets/multi_image.rb +5 -0
- data/examples/local_assets/small.png +0 -0
- data/examples/local_fonts.rb +3 -0
- data/examples/margin.rb +13 -0
- data/examples/margin_check.rb +27 -0
- data/examples/oval-with-kwargs.rb +3 -0
- data/examples/oval.rb +26 -0
- data/examples/para_font_styles.rb +17 -0
- data/examples/para_font_variant.rb +6 -0
- data/examples/para_fontweight.rb +13 -0
- data/examples/parse_xl_funnies.rb +3 -0
- data/examples/rect.rb +1 -1
- data/examples/scarpe_ext.rb +3 -0
- data/examples/shapes/star.rb +1 -3
- data/examples/spacing.rb +1 -1
- data/examples/span.rb +4 -2
- data/lacci/lacci.gemspec +2 -2
- data/lacci/lib/lacci/scarpe_cli.rb +0 -1
- data/lacci/lib/lacci/version.rb +1 -1
- data/lacci/lib/scarpe/niente/display_service.rb +5 -1
- data/lacci/lib/scarpe/niente/drawable.rb +2 -0
- data/lacci/lib/scarpe/niente/shoes_spec.rb +7 -1
- data/lacci/lib/scarpe/niente.rb +14 -2
- data/lacci/lib/shoes/app.rb +44 -50
- data/lacci/lib/shoes/constants.rb +23 -2
- data/lacci/lib/shoes/display_service.rb +43 -4
- data/lacci/lib/shoes/drawable.rb +309 -35
- data/lacci/lib/shoes/drawables/arc.rb +2 -24
- data/lacci/lib/shoes/drawables/arrow.rb +2 -22
- data/lacci/lib/shoes/drawables/border.rb +28 -0
- data/lacci/lib/shoes/drawables/button.rb +4 -20
- data/lacci/lib/shoes/drawables/check.rb +7 -3
- data/lacci/lib/shoes/drawables/document_root.rb +4 -4
- data/lacci/lib/shoes/drawables/edit_box.rb +6 -5
- data/lacci/lib/shoes/drawables/edit_line.rb +5 -4
- data/lacci/lib/shoes/drawables/flow.rb +3 -5
- data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
- data/lacci/lib/shoes/drawables/image.rb +2 -2
- data/lacci/lib/shoes/drawables/line.rb +4 -7
- data/lacci/lib/shoes/drawables/link.rb +5 -8
- data/lacci/lib/shoes/drawables/list_box.rb +8 -5
- data/lacci/lib/shoes/drawables/oval.rb +48 -0
- data/lacci/lib/shoes/drawables/para.rb +106 -18
- data/lacci/lib/shoes/drawables/progress.rb +2 -1
- data/lacci/lib/shoes/drawables/radio.rb +5 -3
- data/lacci/lib/shoes/drawables/rect.rb +5 -4
- data/lacci/lib/shoes/drawables/shape.rb +2 -1
- data/lacci/lib/shoes/drawables/slot.rb +99 -8
- data/lacci/lib/shoes/drawables/stack.rb +6 -11
- data/lacci/lib/shoes/drawables/star.rb +8 -30
- data/lacci/lib/shoes/drawables/text_drawable.rb +93 -34
- data/lacci/lib/shoes/drawables/video.rb +3 -2
- data/lacci/lib/shoes/drawables/widget.rb +8 -3
- data/lacci/lib/shoes/drawables.rb +2 -1
- data/lacci/lib/shoes/errors.rb +13 -3
- data/lacci/lib/shoes/margin_helper.rb +79 -0
- data/lacci/lib/shoes.rb +4 -3
- data/lacci/test/.gitignore +1 -0
- data/lacci/test/test_draw_context.rb +167 -0
- data/lacci/test/test_font_helper.rb +57 -0
- data/lacci/test/test_helper.rb +31 -4
- data/lacci/test/test_lacci.rb +93 -6
- data/lacci/test/test_margin_helper.rb +82 -0
- data/lacci/test/test_niente_test_infra.rb +26 -0
- data/lacci/test/test_oval.rb +82 -0
- data/lacci/test/test_parenting.rb +140 -0
- data/lacci/test/test_text_drawables.rb +23 -0
- data/lib/scarpe/assets.rb +18 -0
- data/lib/scarpe/cats_cradle.rb +57 -98
- data/lib/scarpe/shoes_spec.rb +22 -43
- data/lib/scarpe/version.rb +1 -1
- data/lib/scarpe/wv/app.rb +1 -0
- data/lib/scarpe/wv/arc.rb +0 -4
- data/lib/scarpe/wv/border.rb +15 -0
- data/lib/scarpe/wv/control_interface.rb +2 -10
- data/lib/scarpe/wv/document_root.rb +2 -2
- data/lib/scarpe/wv/drawable.rb +6 -40
- data/lib/scarpe/wv/edit_box.rb +4 -1
- data/lib/scarpe/wv/edit_line.rb +5 -2
- data/lib/scarpe/wv/image.rb +2 -5
- data/lib/scarpe/wv/link.rb +4 -2
- data/lib/scarpe/wv/oval.rb +13 -0
- data/lib/scarpe/wv/para.rb +1 -0
- data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
- data/lib/scarpe/wv/shape.rb +10 -5
- data/lib/scarpe/wv/text_drawable.rb +72 -14
- data/lib/scarpe/wv/web_wrangler.rb +33 -11
- data/lib/scarpe/wv/webview_local_display.rb +6 -2
- data/lib/scarpe/wv.rb +8 -1
- data/scarpe-components/Gemfile +4 -1
- data/scarpe-components/Gemfile.lock +2 -3
- data/scarpe-components/README.md +2 -2
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
- data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +22 -0
- data/scarpe-components/lib/scarpe/components/calzini/{art_widgets.rb → art_drawables.rb} +42 -18
- data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
- data/scarpe-components/lib/scarpe/components/calzini/button.rb +6 -8
- data/scarpe-components/lib/scarpe/components/calzini/misc.rb +7 -17
- data/scarpe-components/lib/scarpe/components/calzini/para.rb +213 -11
- data/scarpe-components/lib/scarpe/components/calzini/slots.rb +14 -60
- data/scarpe-components/lib/scarpe/components/calzini.rb +88 -1
- data/scarpe-components/lib/scarpe/components/errors.rb +4 -0
- data/scarpe-components/lib/scarpe/components/html.rb +4 -1
- data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +11 -3
- data/scarpe-components/lib/scarpe/components/minitest_result.rb +41 -0
- data/scarpe-components/lib/scarpe/components/print_logger.rb +17 -2
- data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +1 -1
- data/scarpe-components/lib/scarpe/components/tiranti.rb +42 -100
- data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +3 -1
- data/scarpe-components/lib/scarpe/components/version.rb +1 -1
- data/scarpe-components/test/assets/big-image.png +0 -0
- data/scarpe-components/test/assets/big-stylesheet.css +497 -0
- data/scarpe-components/test/assets/little-image.png +0 -0
- data/scarpe-components/test/assets/little-stylesheet.css +1 -0
- data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +7 -7
- data/scarpe-components/test/calzini/test_calzini_button.rb +7 -5
- data/scarpe-components/test/calzini/test_calzini_misc.rb +9 -9
- data/scarpe-components/test/calzini/test_calzini_para.rb +6 -9
- data/scarpe-components/test/calzini/test_calzini_slots.rb +12 -57
- data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +83 -18
- data/scarpe-components/test/calzini/test_various.rb +133 -0
- data/scarpe-components/test/test_asset_server.rb +72 -0
- data/scarpe-components/test/test_components.rb +31 -2
- data/scarpe-components/test/test_helper.rb +0 -1
- data/scarpe-components/test/test_minitest_result.rb +7 -0
- data/scarpe-components/test/test_segmented_app_files.rb +2 -0
- data/tasks/check_html_fixtures.rb +140 -0
- data/tasks/regenerate_html_fixtures.rb +104 -0
- data/templates/class_template_with_shapes.erb +0 -11
- metadata +180 -32
- data/lacci/lib/scarpe/niente/logger.rb +0 -29
- data/lacci/lib/shoes/drawables/span.rb +0 -27
- data/lacci/lib/shoes/spacing.rb +0 -9
- data/lib/scarpe/evented_assertions.rb +0 -121
- data/lib/scarpe/wv/span.rb +0 -44
- data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +0 -65
- /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
@@ -7,15 +7,19 @@ class TestCalziniPara < Minitest::Test
|
|
7
7
|
@calzini = CalziniRenderer.new
|
8
8
|
end
|
9
9
|
|
10
|
-
# Note that Calzini doesn't render the text items for itself.
|
11
10
|
def test_para_simple
|
12
11
|
assert_equal %{<p id="elt-1">OK</p>},
|
13
12
|
@calzini.render("para", {}) { "OK" }
|
14
13
|
end
|
15
14
|
|
15
|
+
def test_para_with_align
|
16
|
+
assert_equal %{<div id=\"elt-1\" style=\"text-align:right;width:100%\"><p>OK</p></div>},
|
17
|
+
@calzini.render("para", { "align" => "right" }) { "OK" }
|
18
|
+
end
|
19
|
+
|
16
20
|
def test_para_with_stroke_and_font
|
17
21
|
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], "
|
22
|
+
@calzini.render("para", { "stroke" => [1.0, 0.0, 0.0], "family" => "Lucida" }) { "OK" }
|
19
23
|
end
|
20
24
|
|
21
25
|
def test_para_with_string_banner
|
@@ -27,11 +31,4 @@ class TestCalziniPara < Minitest::Test
|
|
27
31
|
assert_equal %{<p id="elt-1" style="font-size:48px"></p>},
|
28
32
|
@calzini.render("para", { "size" => :banner })
|
29
33
|
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
34
|
end
|
@@ -7,124 +7,79 @@ class TestCalziniSlots < Minitest::Test
|
|
7
7
|
@calzini = CalziniRenderer.new
|
8
8
|
@stack_default_style = %{display:flex;flex-direction:column;align-content:flex-start;justify-content:flex-start;align-items:flex-start}
|
9
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
|
+
@inner_div_tag = %{<div style="height:100%;width:100%;position:relative">}
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_stack_simple
|
13
14
|
assert_equal %{<div id="elt-1" } +
|
14
15
|
%{style="#{@stack_default_style}">} +
|
15
|
-
%{contents</div>},
|
16
|
+
%{#{@inner_div_tag}contents</div></div>},
|
16
17
|
@calzini.render("stack", {}) { "contents" }
|
17
18
|
end
|
18
19
|
|
19
20
|
def test_flow_simple
|
20
21
|
assert_equal %{<div id="elt-1" } +
|
21
22
|
%{style="#{@flow_default_style}">} +
|
22
|
-
%{contents</div>},
|
23
|
+
%{#{@inner_div_tag}contents</div></div>},
|
23
24
|
@calzini.render("flow", {}) { "contents" }
|
24
25
|
end
|
25
26
|
|
26
27
|
def test_docroot_simple
|
27
28
|
assert_equal %{<div id="elt-1" } +
|
28
29
|
%{style="#{@flow_default_style}">} +
|
29
|
-
%{contents</div>},
|
30
|
+
%{#{@inner_div_tag}contents</div></div>},
|
30
31
|
@calzini.render("documentroot", {}) { "contents" }
|
31
32
|
end
|
32
33
|
|
33
34
|
def test_stack_border_plain_color
|
34
35
|
assert_equal %{<div id="elt-1" } +
|
35
36
|
%{style="#{@stack_default_style};border-style:solid;border-width:1px;border-radius:0px;border-color:red">} +
|
36
|
-
%{contents</div>},
|
37
|
+
%{#{@inner_div_tag}contents</div></div>},
|
37
38
|
@calzini.render("stack", { "border_color" => "red" }) { "contents" }
|
38
39
|
end
|
39
40
|
|
40
41
|
def test_stack_border_gradient
|
41
42
|
assert_equal %{<div id="elt-1" } +
|
42
43
|
%{style="#{@stack_default_style};border-style:solid;border-width:1px;border-radius:0px;border-image:linear-gradient(45deg, red, green)">} +
|
43
|
-
%{contents</div>},
|
44
|
+
%{#{@inner_div_tag}contents</div></div>},
|
44
45
|
@calzini.render("stack", { "border_color" => ("red".."green") }) { "contents" }
|
45
46
|
end
|
46
47
|
|
47
48
|
def test_stack_border_rgba
|
48
49
|
assert_equal %{<div id="elt-1" } +
|
49
50
|
%{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
|
+
%{#{@inner_div_tag}contents</div></div>},
|
51
52
|
@calzini.render("stack", { "border_color" => [1.0, 0.0, 0.0, 1.0] }) { "contents" }
|
52
53
|
end
|
53
54
|
|
54
55
|
def test_stack_border_attrs
|
55
56
|
assert_equal %{<div id="elt-1" } +
|
56
57
|
%{style="#{@stack_default_style};border-style:solid;border-width:3px;border-radius:2px;border-color:red">} +
|
57
|
-
%{contents</div>},
|
58
|
+
%{#{@inner_div_tag}contents</div></div>},
|
58
59
|
@calzini.render("stack", { "border_color" => "red", "options" => { "strokewidth" => 3, "curve" => 2 } }) { "contents" }
|
59
60
|
end
|
60
61
|
|
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
62
|
|
82
63
|
def test_stack_padding
|
83
64
|
assert_equal %{<div id="elt-1" } +
|
84
65
|
%{style="#{@stack_default_style};padding:25px">} +
|
85
|
-
%{contents</div>},
|
66
|
+
%{#{@inner_div_tag}contents</div></div>},
|
86
67
|
@calzini.render("stack", { "padding" => 25 }) { "contents" }
|
87
68
|
end
|
88
69
|
|
89
70
|
def test_stack_options_padding
|
90
71
|
assert_equal %{<div id="elt-1" } +
|
91
72
|
%{style="#{@stack_default_style};padding:15px">} +
|
92
|
-
%{contents</div>},
|
73
|
+
%{#{@inner_div_tag}contents</div></div>},
|
93
74
|
@calzini.render("stack", { "options" => { "padding" => 15 } }) { "contents" }
|
94
75
|
end
|
95
76
|
|
96
77
|
def test_stack_padding_overrides_options
|
97
78
|
assert_equal %{<div id="elt-1" } +
|
98
79
|
%{style="#{@stack_default_style};padding:25px">} +
|
99
|
-
%{contents</div>},
|
80
|
+
%{#{@inner_div_tag}contents</div></div>},
|
100
81
|
@calzini.render("stack", { "padding" => 25, "options" => { "padding" => 15 } }) { "contents" }
|
101
82
|
end
|
102
83
|
|
103
|
-
|
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
|
84
|
+
|
130
85
|
end
|
@@ -7,35 +7,100 @@ class TestCalziniTextDrawables < Minitest::Test
|
|
7
7
|
@calzini = CalziniRenderer.new
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
@calzini.render("link", { "click" => "https://google.com", "text" => "click here" })
|
10
|
+
def trim_html_ids(s)
|
11
|
+
s.gsub(/ class="id_\d+"/, "")
|
13
12
|
end
|
14
13
|
|
15
|
-
def
|
16
|
-
assert_equal %{
|
17
|
-
@calzini.render("
|
14
|
+
def test_text_only_drawable
|
15
|
+
assert_equal %{this is text},
|
16
|
+
@calzini.render("text_drawable", ["this ", "is", " text"])
|
18
17
|
end
|
19
18
|
|
20
|
-
def
|
21
|
-
assert_equal %{<
|
22
|
-
@calzini.render("
|
19
|
+
def test_simple_text_drawable_with_em
|
20
|
+
assert_equal %{this <em class="id_1">is</em> text},
|
21
|
+
@calzini.render("text_drawable",
|
22
|
+
["this ", { tag: "em", html_id: "1", items: ["is"], props: {}}, " text"])
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
# Span doesn't have default properties, so it's good for testing how a property is rendered
|
26
|
+
def test_simple_text_drawable_with_span_styles
|
27
|
+
assert_equal %{this <span style="color:#FF00FF;background-color:#0000FF;font-size:13px;font-family:Lucida">is</span> text},
|
28
|
+
trim_html_ids(@calzini.render("text_drawable",
|
29
|
+
["this ", {
|
30
|
+
tag: "span",
|
31
|
+
html_id: "1",
|
32
|
+
items: ["is"],
|
33
|
+
props: {
|
34
|
+
"family" => "Lucida",
|
35
|
+
"size" => 13,
|
36
|
+
"stroke" => "#FF00FF",
|
37
|
+
"fill" => "#0000FF"
|
38
|
+
}
|
39
|
+
}, " text"]))
|
28
40
|
end
|
29
41
|
|
30
|
-
def
|
31
|
-
assert_equal %{<
|
42
|
+
def test_link_with_has_block
|
43
|
+
assert_equal %{this <a onclick="handle('click')">is</a> text},
|
44
|
+
trim_html_ids(@calzini.render("text_drawable",
|
45
|
+
["this ", {
|
46
|
+
tag: "a",
|
47
|
+
html_id: "1",
|
48
|
+
items: ["is"],
|
49
|
+
props: {
|
50
|
+
"has_block" => true,
|
51
|
+
}
|
52
|
+
}, " text"]))
|
32
53
|
end
|
33
54
|
|
34
|
-
def
|
35
|
-
assert_equal %{<
|
55
|
+
def test_link_with_click
|
56
|
+
assert_equal %{this <a href="#" onclick="handle('click')">is</a> text},
|
57
|
+
trim_html_ids(@calzini.render("text_drawable",
|
58
|
+
["this ", {
|
59
|
+
tag: "a",
|
60
|
+
html_id: "1",
|
61
|
+
items: ["is"],
|
62
|
+
props: {
|
63
|
+
"has_block" => true,
|
64
|
+
"click" => "#",
|
65
|
+
}
|
66
|
+
}, " text"]))
|
36
67
|
end
|
37
68
|
|
38
|
-
def
|
39
|
-
assert_equal %{<
|
69
|
+
def test_del_tag
|
70
|
+
assert_equal %{this <del>is</del> text},
|
71
|
+
trim_html_ids(@calzini.render("text_drawable",
|
72
|
+
["this ", {
|
73
|
+
tag: "del",
|
74
|
+
html_id: "1",
|
75
|
+
items: ["is"],
|
76
|
+
props: {
|
77
|
+
}
|
78
|
+
}, " text"]))
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_single_strikethrough
|
82
|
+
assert_equal %{this <span style="text-decoration-line:line-through">is</span> text},
|
83
|
+
trim_html_ids(@calzini.render("text_drawable",
|
84
|
+
["this ", {
|
85
|
+
tag: "span",
|
86
|
+
html_id: "1",
|
87
|
+
items: ["is"],
|
88
|
+
props: {
|
89
|
+
"strikethrough" => "single",
|
90
|
+
}
|
91
|
+
}, " text"]))
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_single_strikethrough_none
|
95
|
+
assert_equal %{this <span>is</span> text},
|
96
|
+
trim_html_ids(@calzini.render("text_drawable",
|
97
|
+
["this ", {
|
98
|
+
tag: "span",
|
99
|
+
html_id: "1",
|
100
|
+
items: ["is"],
|
101
|
+
props: {
|
102
|
+
"strikethrough" => "none",
|
103
|
+
}
|
104
|
+
}, " text"]))
|
40
105
|
end
|
41
106
|
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../test_helper"
|
4
|
+
|
5
|
+
# Some tests don't cover just a single drawable.
|
6
|
+
class TestVariousCalzini < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@calzini = CalziniRenderer.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# Test data. For each drawable, include
|
12
|
+
# a minimal set of properties to create something
|
13
|
+
# basic and default. Then we can add to it and
|
14
|
+
# test the resulting HTML.
|
15
|
+
#
|
16
|
+
# In Shoes3, the vast majority of drawables support
|
17
|
+
# both stroke and fill. Here's the list from the
|
18
|
+
# Shoes manual minus the ones we already test here:
|
19
|
+
#
|
20
|
+
# background, banner, caption,
|
21
|
+
# code, del, em, flow, image, ins, inscription,
|
22
|
+
# link, mask, para, shape, span, stack,
|
23
|
+
# strong, sub, sup, subtitle, tagline, title
|
24
|
+
#
|
25
|
+
# Scarpe doesn't yet support the property on everything.
|
26
|
+
# but as we support it, we should add the drawables
|
27
|
+
# here.
|
28
|
+
#
|
29
|
+
CALZINI_ART_DRAWABLES = {
|
30
|
+
arc: {
|
31
|
+
has_stroke: false,
|
32
|
+
has_fill: false,
|
33
|
+
props: {
|
34
|
+
"width" => 200,
|
35
|
+
"height" => 150,
|
36
|
+
"left" => 17,
|
37
|
+
"top" => 42,
|
38
|
+
"angle1" => 3.14 / 2,
|
39
|
+
"angle2" => 3.14 / 4,
|
40
|
+
},
|
41
|
+
},
|
42
|
+
arrow: {
|
43
|
+
has_stroke: true,
|
44
|
+
has_fill: true,
|
45
|
+
props: {
|
46
|
+
"left" => 10,
|
47
|
+
"top" => 20,
|
48
|
+
"width" => 5,
|
49
|
+
},
|
50
|
+
},
|
51
|
+
line: {
|
52
|
+
has_stroke: true,
|
53
|
+
has_fill: false,
|
54
|
+
props: {
|
55
|
+
"top" => "4",
|
56
|
+
"left" => "7",
|
57
|
+
"x1" => "20",
|
58
|
+
"y1" => "17",
|
59
|
+
"x2" => "100",
|
60
|
+
"y2" => "104",
|
61
|
+
},
|
62
|
+
},
|
63
|
+
rect: {
|
64
|
+
has_stroke: true,
|
65
|
+
has_fill: true,
|
66
|
+
props: {
|
67
|
+
"top" => "9",
|
68
|
+
"left" => "12",
|
69
|
+
"width" => "147",
|
70
|
+
"height" => "91",
|
71
|
+
"draw_context" => {},
|
72
|
+
},
|
73
|
+
},
|
74
|
+
star: {
|
75
|
+
has_stroke: true,
|
76
|
+
has_fill: true,
|
77
|
+
props: {
|
78
|
+
"points" => 5,
|
79
|
+
"outer" => 2.0,
|
80
|
+
"inner" => 1.0,
|
81
|
+
},
|
82
|
+
},
|
83
|
+
oval: {
|
84
|
+
has_stroke: true,
|
85
|
+
has_fill: true,
|
86
|
+
props: {
|
87
|
+
"left" => 10,
|
88
|
+
"top" => 7,
|
89
|
+
"radius" => 5,
|
90
|
+
},
|
91
|
+
},
|
92
|
+
}
|
93
|
+
|
94
|
+
# This method tests some basic ways of setting strokes and fills and makes sure they
|
95
|
+
# work for different drawables. TODO: add more drawables. TODO: either add testing for
|
96
|
+
# setting stroke and fill directly vs. draw-context, or remove draw-context.
|
97
|
+
def test_color_conversion
|
98
|
+
CALZINI_ART_DRAWABLES.each do |name, h|
|
99
|
+
basic = @calzini.render(name.to_s, h[:props])
|
100
|
+
assert !basic.include?("#FF0000"), "Un-colored #{name} shouldn't already have red or we'll get a false positive!"
|
101
|
+
|
102
|
+
if h[:has_stroke]
|
103
|
+
red_stroke = @calzini.render(name.to_s, h[:props].merge("stroke" => [255, 0, 0, 255]))
|
104
|
+
assert_includes red_stroke, "#FF0000", "With integer-array red stroke, #{name} should contain red color!"
|
105
|
+
|
106
|
+
red_stroke = @calzini.render(name.to_s, h[:props].merge("draw_context" => { "stroke" => [255, 0, 0, 255] }))
|
107
|
+
assert_includes red_stroke, "#FF0000", "With integer-array red stroke, #{name} should contain red color!"
|
108
|
+
|
109
|
+
red_stroke = @calzini.render(name.to_s, h[:props].merge("stroke" => [255, 0, 0, 255], "draw_context" => { "stroke" => [0, 255, 0, 255] }))
|
110
|
+
assert_includes red_stroke, "#FF0000", "Red stroke should take precedence over green, #{name} should contain red color!"
|
111
|
+
|
112
|
+
# TODO: later, after issue #504 is fixed, colors should turn into their hex equivalent
|
113
|
+
red_stroke = @calzini.render(name.to_s, h[:props].merge("stroke" => "red"))
|
114
|
+
assert_includes red_stroke, "red", "With integer-array red stroke, #{name} should contain red color!"
|
115
|
+
end
|
116
|
+
|
117
|
+
if h[:has_fill]
|
118
|
+
red_fill = @calzini.render(name.to_s, h[:props].merge("fill" => [255, 0, 0, 255]))
|
119
|
+
assert_includes red_fill, "#FF0000", "With integer-array red fill, #{name} should contain red color!"
|
120
|
+
|
121
|
+
red_fill = @calzini.render(name.to_s, h[:props].merge("draw_context" => { "fill" => [255, 0, 0, 255] }))
|
122
|
+
assert_includes red_fill, "#FF0000", "With integer-array red fill, #{name} should contain red color!"
|
123
|
+
|
124
|
+
red_fill = @calzini.render(name.to_s, h[:props].merge("fill" => [255, 0, 0, 255], "draw_context" => { "fill" => [0, 255, 0, 255] }))
|
125
|
+
assert_includes red_fill, "#FF0000", "Red fill should take precedence over green, #{name} should contain red color!"
|
126
|
+
|
127
|
+
# TODO: later, after issue #504 is fixed, colors should turn into their hex equivalent
|
128
|
+
red_fill = @calzini.render(name.to_s, h[:props].merge("fill" => "red"))
|
129
|
+
assert_includes red_fill, "red", "With integer-array red fill, #{name} should contain red color!"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "test_helper"
|
4
|
+
|
5
|
+
require "scarpe/components/asset_server"
|
6
|
+
|
7
|
+
class TestAssetServer < Minitest::Test
|
8
|
+
def teardown
|
9
|
+
@server = nil # Don't keep the same server object from run to run, just in case
|
10
|
+
end
|
11
|
+
|
12
|
+
def fake_server
|
13
|
+
# We don't need to check HTTP connections, we just want to generate URLs
|
14
|
+
@server ||= Scarpe::Components::AssetServer.new port: 4444, app_dir: __dir__, never_start_server: true
|
15
|
+
end
|
16
|
+
|
17
|
+
def weird_dir_server
|
18
|
+
# Use a deeper app root to test files outside the app's directory
|
19
|
+
@server ||= Scarpe::Components::AssetServer.new port: 4444, app_dir: "#{__dir__}/subdir", never_start_server: true
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_small_image_explicit_data_url
|
23
|
+
url = fake_server.asset_url("#{__dir__}/assets/little-image.png", url_type: :data)
|
24
|
+
assert url.start_with?("data:image/png;base64,"), "Data URL for image should start with image/png! #{url.inspect}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_small_css_explicit_data_url
|
28
|
+
url = fake_server.asset_url("#{__dir__}/assets/little-stylesheet.css", url_type: :data)
|
29
|
+
assert url.start_with?("data:text/css;base64,"), "Data URL for CSS should start with text/css! #{url.inspect}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_small_css_auto_data_url
|
33
|
+
url = fake_server.asset_url("#{__dir__}/assets/little-stylesheet.css")
|
34
|
+
assert url.start_with?("data:text/css;base64,"), "Small CSS files should get a data URL by default! #{url.inspect}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_small_css_explicit_app_dir_asset_url
|
38
|
+
url = fake_server.asset_url("#{__dir__}/assets/little-stylesheet.css", url_type: :asset)
|
39
|
+
assert_equal "http://127.0.0.1:4444/app/assets/little-stylesheet.css", url, "Small CSS files should get an asset URL by request!"
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_small_css_explicit_component_asset_url
|
43
|
+
url = weird_dir_server.asset_url("#{__dir__}/assets/little-stylesheet.css", url_type: :asset)
|
44
|
+
assert_equal "http://127.0.0.1:4444/comp/test/assets/little-stylesheet.css", url, "Small CSS files should get an asset URL by request!"
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_large_app_file_auto_asset_url
|
48
|
+
url = fake_server.asset_url("#{__dir__}/assets/big-image.png")
|
49
|
+
assert_equal "http://127.0.0.1:4444/app/assets/big-image.png", url, "Big image files should get an asset URL by default!"
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_large_app_file_explicit_asset_url
|
53
|
+
url = fake_server.asset_url("#{__dir__}/assets/big-image.png", url_type: :asset)
|
54
|
+
assert_equal "http://127.0.0.1:4444/app/assets/big-image.png", url, "Big image files should get an asset URL by default!"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_large_app_file_explicit_data_url
|
58
|
+
url = fake_server.asset_url("#{__dir__}/assets/big-image.png", url_type: :data)
|
59
|
+
assert url.start_with?("data:image/png;base64,"), "Big image files should get a data URL by request! #{url.inspect}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_large_file_outside_dirs
|
63
|
+
url = fake_server.asset_url("#{__dir__}/../../docs/static/man-builds.png")
|
64
|
+
assert url.start_with?("data:image/png;base64,"), "Large files outside dirs should still use data URLs"
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_large_file_outside_dirs_with_exception
|
68
|
+
assert_raises Scarpe::OperationNotAllowedError do
|
69
|
+
url = fake_server.asset_url("#{__dir__}/../../docs/static/man-builds.png", url_type: :asset)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -3,7 +3,36 @@
|
|
3
3
|
require_relative "test_helper"
|
4
4
|
|
5
5
|
class TestScarpeComponents < Minitest::Test
|
6
|
-
|
7
|
-
|
6
|
+
# Top-level tests go here?
|
7
|
+
end
|
8
|
+
|
9
|
+
require "scarpe/components/process_helpers"
|
10
|
+
class TestComponentHelpers < Minitest::Test
|
11
|
+
include Scarpe::Components::ProcessHelpers
|
12
|
+
|
13
|
+
def test_process_runner_stdout
|
14
|
+
out, err, success = run_out_err_result("echo ok")
|
15
|
+
assert success, "Echoing okay should succeed!"
|
16
|
+
assert_equal "", err
|
17
|
+
assert_includes out, "ok"
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_process_runner_stderr
|
21
|
+
out, err, success = run_out_err_result("echo ok 1>&2")
|
22
|
+
assert success, "Echoing okay to stderr should succeed!"
|
23
|
+
assert_equal "", out
|
24
|
+
assert_includes err, "ok"
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_process_runner_fail
|
28
|
+
out, err, success = run_out_err_result("ls no_such_file_exists")
|
29
|
+
assert !success, "ls on nonexistent file should return failure!"
|
30
|
+
assert_equal "", out
|
31
|
+
assert err != "", "ls on nonexistent file should give non-empty error output"
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_process_runner_command_array
|
35
|
+
out, err, success = run_out_err_result(["echo", "ok"])
|
36
|
+
assert success, "Echoing okay via command array should succeed!"
|
8
37
|
end
|
9
38
|
end
|
@@ -58,4 +58,11 @@ class TestMinitestResult < Minitest::Test
|
|
58
58
|
refute res.passed?
|
59
59
|
assert_equal "Just skipping", res.skip_message
|
60
60
|
end
|
61
|
+
|
62
|
+
def test_mtr_console_summary
|
63
|
+
path = File.join __dir__, "mtr_data/skipped_w_msg.json"
|
64
|
+
res = Scarpe::Components::MinitestResult.new(path)
|
65
|
+
|
66
|
+
assert res.console_summary.include?("Skip:")
|
67
|
+
end
|
61
68
|
end
|
@@ -7,6 +7,8 @@ require "scarpe/components/segmented_file_loader"
|
|
7
7
|
SEG_TEST_DATA = {}
|
8
8
|
|
9
9
|
class TestSegmentedAppFiles < Minitest::Test
|
10
|
+
include Scarpe::Test::Helpers
|
11
|
+
|
10
12
|
def setup
|
11
13
|
@orig_file_loaders = Shoes.file_loaders
|
12
14
|
Shoes.reset_file_loaders # create new loaders array with no overlap with @orig_file_loaders
|