shoes-core 4.0.0.pre3
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.
- checksums.yaml +7 -0
- data/LICENSE +31 -0
- data/README.md +8 -0
- data/Rakefile +1 -0
- data/bin/shoes +62 -0
- data/bin/shoes-guard +8 -0
- data/bin/shoes-picker +6 -0
- data/bin/shoes-stub +62 -0
- data/ext/install/Rakefile +29 -0
- data/ext/install/shoes.bat +15 -0
- data/fonts/Coolvetica.ttf +0 -0
- data/fonts/Lacuna.ttf +0 -0
- data/lib/rubygems_plugin.rb +24 -0
- data/lib/shoes.rb +1 -0
- data/lib/shoes/animation.rb +56 -0
- data/lib/shoes/app.rb +130 -0
- data/lib/shoes/arc.rb +25 -0
- data/lib/shoes/background.rb +20 -0
- data/lib/shoes/border.rb +20 -0
- data/lib/shoes/builtin_methods.rb +76 -0
- data/lib/shoes/button.rb +29 -0
- data/lib/shoes/check_button.rb +41 -0
- data/lib/shoes/color.rb +387 -0
- data/lib/shoes/common/background_element.rb +9 -0
- data/lib/shoes/common/changeable.rb +34 -0
- data/lib/shoes/common/clickable.rb +24 -0
- data/lib/shoes/common/inspect.rb +14 -0
- data/lib/shoes/common/positioning.rb +30 -0
- data/lib/shoes/common/registration.rb +31 -0
- data/lib/shoes/common/remove.rb +10 -0
- data/lib/shoes/common/state.rb +16 -0
- data/lib/shoes/common/style.rb +160 -0
- data/lib/shoes/common/style_normalizer.rb +16 -0
- data/lib/shoes/common/ui_element.rb +11 -0
- data/lib/shoes/common/visibility.rb +41 -0
- data/lib/shoes/configuration.rb +96 -0
- data/lib/shoes/core.rb +1 -0
- data/lib/shoes/core/version.rb +5 -0
- data/lib/shoes/dialog.rb +56 -0
- data/lib/shoes/dimension.rb +269 -0
- data/lib/shoes/dimensions.rb +203 -0
- data/lib/shoes/download.rb +130 -0
- data/lib/shoes/dsl.rb +656 -0
- data/lib/shoes/file_not_found_error.rb +4 -0
- data/lib/shoes/font.rb +50 -0
- data/lib/shoes/gradient.rb +31 -0
- data/lib/shoes/image.rb +53 -0
- data/lib/shoes/image_pattern.rb +12 -0
- data/lib/shoes/input_box.rb +59 -0
- data/lib/shoes/internal_app.rb +230 -0
- data/lib/shoes/key_event.rb +17 -0
- data/lib/shoes/line.rb +84 -0
- data/lib/shoes/link.rb +57 -0
- data/lib/shoes/link_hover.rb +5 -0
- data/lib/shoes/list_box.rb +50 -0
- data/lib/shoes/logger.rb +65 -0
- data/lib/shoes/logger/ruby.rb +16 -0
- data/lib/shoes/mock.rb +33 -0
- data/lib/shoes/mock/animation.rb +8 -0
- data/lib/shoes/mock/app.rb +49 -0
- data/lib/shoes/mock/arc.rb +9 -0
- data/lib/shoes/mock/background.rb +10 -0
- data/lib/shoes/mock/border.rb +7 -0
- data/lib/shoes/mock/button.rb +22 -0
- data/lib/shoes/mock/check.rb +24 -0
- data/lib/shoes/mock/clickable.rb +8 -0
- data/lib/shoes/mock/common_methods.rb +12 -0
- data/lib/shoes/mock/dialog.rb +13 -0
- data/lib/shoes/mock/download.rb +16 -0
- data/lib/shoes/mock/font.rb +15 -0
- data/lib/shoes/mock/image.rb +13 -0
- data/lib/shoes/mock/image_pattern.rb +8 -0
- data/lib/shoes/mock/input_box.rb +30 -0
- data/lib/shoes/mock/keypress.rb +11 -0
- data/lib/shoes/mock/keyrelease.rb +11 -0
- data/lib/shoes/mock/line.rb +14 -0
- data/lib/shoes/mock/link.rb +11 -0
- data/lib/shoes/mock/list_box.rb +19 -0
- data/lib/shoes/mock/oval.rb +11 -0
- data/lib/shoes/mock/packager.rb +13 -0
- data/lib/shoes/mock/progress.rb +10 -0
- data/lib/shoes/mock/radio.rb +27 -0
- data/lib/shoes/mock/rect.rb +14 -0
- data/lib/shoes/mock/shape.rb +20 -0
- data/lib/shoes/mock/slot.rb +16 -0
- data/lib/shoes/mock/sound.rb +8 -0
- data/lib/shoes/mock/star.rb +14 -0
- data/lib/shoes/mock/text_block.rb +36 -0
- data/lib/shoes/mock/timer.rb +8 -0
- data/lib/shoes/not_implemented_error.rb +4 -0
- data/lib/shoes/oval.rb +20 -0
- data/lib/shoes/packager.rb +26 -0
- data/lib/shoes/point.rb +54 -0
- data/lib/shoes/progress.rb +25 -0
- data/lib/shoes/radio.rb +15 -0
- data/lib/shoes/rect.rb +21 -0
- data/lib/shoes/renamed_delegate.rb +15 -0
- data/lib/shoes/shape.rb +159 -0
- data/lib/shoes/slot.rb +276 -0
- data/lib/shoes/slot_contents.rb +51 -0
- data/lib/shoes/sound.rb +18 -0
- data/lib/shoes/span.rb +16 -0
- data/lib/shoes/star.rb +50 -0
- data/lib/shoes/text.rb +24 -0
- data/lib/shoes/text_block.rb +142 -0
- data/lib/shoes/text_block_dimensions.rb +51 -0
- data/lib/shoes/timer.rb +14 -0
- data/lib/shoes/ui/cli.rb +67 -0
- data/lib/shoes/ui/picker.rb +47 -0
- data/lib/shoes/url.rb +44 -0
- data/lib/shoes/version.rb +3 -0
- data/lib/shoes/widget.rb +67 -0
- data/shoes-core.gemspec +22 -0
- data/spec/shoes/animation_spec.rb +71 -0
- data/spec/shoes/app_spec.rb +484 -0
- data/spec/shoes/arc_spec.rb +51 -0
- data/spec/shoes/background_spec.rb +47 -0
- data/spec/shoes/border_spec.rb +46 -0
- data/spec/shoes/builtin_methods_spec.rb +110 -0
- data/spec/shoes/button_spec.rb +44 -0
- data/spec/shoes/check_spec.rb +35 -0
- data/spec/shoes/color_spec.rb +408 -0
- data/spec/shoes/common/inspect_spec.rb +26 -0
- data/spec/shoes/common/remove_spec.rb +38 -0
- data/spec/shoes/common/style_normalizer_spec.rb +28 -0
- data/spec/shoes/common/style_spec.rb +147 -0
- data/spec/shoes/configuration_spec.rb +36 -0
- data/spec/shoes/constants_spec.rb +38 -0
- data/spec/shoes/dialog_spec.rb +171 -0
- data/spec/shoes/dimension_spec.rb +433 -0
- data/spec/shoes/dimensions_spec.rb +837 -0
- data/spec/shoes/download_spec.rb +146 -0
- data/spec/shoes/flow_spec.rb +133 -0
- data/spec/shoes/font_spec.rb +37 -0
- data/spec/shoes/framework_learning_spec.rb +30 -0
- data/spec/shoes/gradient_spec.rb +32 -0
- data/spec/shoes/helpers/fake_element.rb +17 -0
- data/spec/shoes/helpers/inspect_helpers.rb +5 -0
- data/spec/shoes/helpers/sample17_helper.rb +66 -0
- data/spec/shoes/image_spec.rb +68 -0
- data/spec/shoes/images/shoe.jpg +0 -0
- data/spec/shoes/input_box_spec.rb +80 -0
- data/spec/shoes/integration_spec.rb +20 -0
- data/spec/shoes/internal_app_spec.rb +141 -0
- data/spec/shoes/keypress_spec.rb +11 -0
- data/spec/shoes/keyrelease_spec.rb +12 -0
- data/spec/shoes/line_spec.rb +87 -0
- data/spec/shoes/link_spec.rb +118 -0
- data/spec/shoes/list_box_spec.rb +74 -0
- data/spec/shoes/logger/ruby_spec.rb +8 -0
- data/spec/shoes/logger_spec.rb +45 -0
- data/spec/shoes/oval_spec.rb +24 -0
- data/spec/shoes/packager_spec.rb +25 -0
- data/spec/shoes/point_spec.rb +71 -0
- data/spec/shoes/progress_spec.rb +54 -0
- data/spec/shoes/radio_spec.rb +32 -0
- data/spec/shoes/rect_spec.rb +39 -0
- data/spec/shoes/renamed_delegate_spec.rb +70 -0
- data/spec/shoes/shape_spec.rb +106 -0
- data/spec/shoes/shared_examples/button.rb +6 -0
- data/spec/shoes/shared_examples/changeable.rb +26 -0
- data/spec/shoes/shared_examples/clickable.rb +5 -0
- data/spec/shoes/shared_examples/common_methods.rb +35 -0
- data/spec/shoes/shared_examples/dimensions.rb +32 -0
- data/spec/shoes/shared_examples/dsl.rb +44 -0
- data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
- data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
- data/spec/shoes/shared_examples/dsl/background.rb +26 -0
- data/spec/shoes/shared_examples/dsl/border.rb +10 -0
- data/spec/shoes/shared_examples/dsl/button.rb +5 -0
- data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
- data/spec/shoes/shared_examples/dsl/check.rb +11 -0
- data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
- data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
- data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
- data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
- data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
- data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
- data/spec/shoes/shared_examples/dsl/image.rb +21 -0
- data/spec/shoes/shared_examples/dsl/line.rb +9 -0
- data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
- data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
- data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
- data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
- data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
- data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
- data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
- data/spec/shoes/shared_examples/dsl/shape.rb +57 -0
- data/spec/shoes/shared_examples/dsl/star.rb +111 -0
- data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
- data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
- data/spec/shoes/shared_examples/dsl/style.rb +32 -0
- data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
- data/spec/shoes/shared_examples/dsl/video.rb +5 -0
- data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
- data/spec/shoes/shared_examples/hover_leave.rb +11 -0
- data/spec/shoes/shared_examples/parent.rb +6 -0
- data/spec/shoes/shared_examples/scroll.rb +41 -0
- data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
- data/spec/shoes/shared_examples/slot.rb +394 -0
- data/spec/shoes/shared_examples/state.rb +19 -0
- data/spec/shoes/shared_examples/style.rb +82 -0
- data/spec/shoes/slot_spec.rb +186 -0
- data/spec/shoes/sound_spec.rb +15 -0
- data/spec/shoes/span_spec.rb +112 -0
- data/spec/shoes/spec_helper.rb +24 -0
- data/spec/shoes/stack_spec.rb +79 -0
- data/spec/shoes/star_spec.rb +48 -0
- data/spec/shoes/text_block_dimensions_spec.rb +75 -0
- data/spec/shoes/text_block_spec.rb +270 -0
- data/spec/shoes/url_spec.rb +68 -0
- data/spec/shoes/widget_spec.rb +70 -0
- data/spec/shoes_spec.rb +44 -0
- data/spec/spec_helper.rb +19 -0
- data/static/downloading.png +0 -0
- data/static/shoes-icon-blue.png +0 -0
- data/static/shoes-icon-brown.png +0 -0
- data/static/shoes-icon.png +0 -0
- metadata +366 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require 'shoes/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Shoes::Shape do
|
|
4
|
+
include_context "dsl app"
|
|
5
|
+
|
|
6
|
+
let(:left) { 0 }
|
|
7
|
+
let(:top) { 0 }
|
|
8
|
+
let(:style) { {left: left, top: top} }
|
|
9
|
+
let(:draw) { Proc.new { } }
|
|
10
|
+
|
|
11
|
+
subject { Shoes::Shape.new app, parent, style, draw }
|
|
12
|
+
|
|
13
|
+
it_behaves_like "object with style" do
|
|
14
|
+
let(:subject_without_style) { Shoes::Shape.new(app, parent) }
|
|
15
|
+
let(:subject_with_style) { Shoes::Shape.new(app, parent, arg_styles) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_behaves_like "movable object"
|
|
19
|
+
|
|
20
|
+
describe "octagon" do
|
|
21
|
+
let(:draw) {
|
|
22
|
+
Proc.new {
|
|
23
|
+
xs = [200, 300, 370, 370, 300, 200, 130, 130]
|
|
24
|
+
ys = [100, 100, 170, 270, 340, 340, 270, 170]
|
|
25
|
+
move_to xs.first, ys.first
|
|
26
|
+
xs.zip(ys).each do |x, y|
|
|
27
|
+
line_to(x, y)
|
|
28
|
+
end
|
|
29
|
+
line_to xs.first, ys.first
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
its(:left) { should eq(0) }
|
|
34
|
+
its(:top) { should eq(0) }
|
|
35
|
+
its(:left_bound) { should eq(130) }
|
|
36
|
+
its(:top_bound) { should eq(100) }
|
|
37
|
+
its(:right_bound) { should eq(370) }
|
|
38
|
+
its(:bottom_bound) { should eq(340) }
|
|
39
|
+
its(:width) { should eq(app.width) }
|
|
40
|
+
its(:height) { should eq app.height }
|
|
41
|
+
|
|
42
|
+
it_behaves_like "movable object"
|
|
43
|
+
|
|
44
|
+
describe "when created without left and top values" do
|
|
45
|
+
let(:left) { nil }
|
|
46
|
+
let(:top) { nil }
|
|
47
|
+
|
|
48
|
+
its(:left) { should eq(nil) }
|
|
49
|
+
its(:top) { should eq(nil) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "when created with left and top values" do
|
|
53
|
+
let(:left) { 10 }
|
|
54
|
+
let(:top) { 100 }
|
|
55
|
+
|
|
56
|
+
its(:left) { should eq(10) }
|
|
57
|
+
its(:top) { should eq(100) }
|
|
58
|
+
its(:left_bound) { should eq(130) }
|
|
59
|
+
its(:top_bound) { should eq(100) }
|
|
60
|
+
its(:right_bound) { should eq(370) }
|
|
61
|
+
its(:bottom_bound) { should eq(340) }
|
|
62
|
+
its(:width) { should eq(app.width) }
|
|
63
|
+
its(:height) { should eq app.height }
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "curve" do
|
|
68
|
+
let(:draw) {
|
|
69
|
+
Proc.new {
|
|
70
|
+
move_to 10, 10
|
|
71
|
+
curve_to 20, 30, 100, 200, 50, 50
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
its(:left_bound) { should eq(10) }
|
|
76
|
+
its(:top_bound) { should eq(10) }
|
|
77
|
+
its(:right_bound) { should eq(100) }
|
|
78
|
+
its(:bottom_bound) { should eq(200) }
|
|
79
|
+
its(:width) { should eq(app.width) }
|
|
80
|
+
its(:height) { should eq app.height }
|
|
81
|
+
|
|
82
|
+
it_behaves_like "movable object"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe "arc" do
|
|
86
|
+
let(:draw) {
|
|
87
|
+
Proc.new {
|
|
88
|
+
arc 10, 10, 100, 100, Shoes::PI, Shoes::TWO_PI
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
it_behaves_like "movable object"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe "accesses app" do
|
|
96
|
+
let(:draw) {
|
|
97
|
+
Proc.new {
|
|
98
|
+
background Shoes::COLORS[:red]
|
|
99
|
+
stroke Shoes::COLORS[:blue]
|
|
100
|
+
rect 10, 10, 100, 100
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
it_behaves_like "movable object"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
shared_examples "an element that can respond to change" do
|
|
2
|
+
describe "when passing a block to the constructor" do
|
|
3
|
+
it "should notify the block of change events" do
|
|
4
|
+
expect(input_block).to receive(:call).with(subject)
|
|
5
|
+
subject.call_change_listeners
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "when setting up a callback with #change" do
|
|
10
|
+
it "should notify the callback of change events" do
|
|
11
|
+
called = false
|
|
12
|
+
subject.change do |element|
|
|
13
|
+
called = true
|
|
14
|
+
end
|
|
15
|
+
subject.call_change_listeners
|
|
16
|
+
expect(called).to be_truthy
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should pass the element itself to the callback" do
|
|
20
|
+
subject.change do |element|
|
|
21
|
+
expect(element).to eq(subject)
|
|
22
|
+
end
|
|
23
|
+
subject.call_change_listeners
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
shared_examples_for "movable object" do
|
|
2
|
+
it "moves" do
|
|
3
|
+
subject.instance_variable_set(:@app, app)
|
|
4
|
+
expect(subject.move(300, 200)).to eq(subject)
|
|
5
|
+
expect(subject.left).to eq(300)
|
|
6
|
+
expect(subject.top).to eq(200)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "displacing" do
|
|
10
|
+
it "displaces backend object" do
|
|
11
|
+
expect(subject.gui).to receive(:update_position)
|
|
12
|
+
subject.displace(300, 200)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "does not change reported values of #left and #top" do
|
|
16
|
+
# no error from calling set location with nil values due to unset values
|
|
17
|
+
allow(subject.gui).to receive :update_position
|
|
18
|
+
original_left = subject.left
|
|
19
|
+
original_top = subject.top
|
|
20
|
+
subject.displace(300, 200)
|
|
21
|
+
expect(subject.left).to eq(original_left)
|
|
22
|
+
expect(subject.top).to eq(original_top)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
shared_examples_for "left, top as center" do | *params |
|
|
28
|
+
let(:centered_object) { described_class.new(app, parent, left, top, width, height, *params, :center => true) }
|
|
29
|
+
it "should now be located somewhere" do
|
|
30
|
+
expect(centered_object.left).to eq(left-(width/2))
|
|
31
|
+
expect(centered_object.top).to eq(top-(height/2))
|
|
32
|
+
expect(centered_object.width).to eq(width)
|
|
33
|
+
expect(centered_object.height).to eq(height)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
shared_examples_for "object with dimensions" do
|
|
2
|
+
it "should initialize" do
|
|
3
|
+
expect(subject.left).to eq(left)
|
|
4
|
+
expect(subject.top).to eq(top)
|
|
5
|
+
expect(subject.width).to eq(width)
|
|
6
|
+
expect(subject.height).to eq(height)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
shared_examples_for "object with relative dimensions" do
|
|
11
|
+
let(:relative_width) { 0.5 }
|
|
12
|
+
let(:relative_height) { 0.5 }
|
|
13
|
+
let(:relative_opts) { {left: left, top: top, width: relative_width, height: relative_height} }
|
|
14
|
+
|
|
15
|
+
it "should initialize based on parent dimensions" do
|
|
16
|
+
expect(subject.left).to eq left
|
|
17
|
+
expect(subject.top).to eq top
|
|
18
|
+
expect(subject.width).to be_within(1).of(parent.element_width / 2)
|
|
19
|
+
expect(subject.height).to be_within(1).of(parent.element_height / 2)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
shared_examples_for "object with negative dimensions" do
|
|
24
|
+
let(:negative_opts) { {left: left, top: top, width: -width, height: -height} }
|
|
25
|
+
|
|
26
|
+
it "should initialize based on parent dimensions" do
|
|
27
|
+
expect(subject.left).to eq(left)
|
|
28
|
+
expect(subject.top).to eq(top)
|
|
29
|
+
expect(subject.width).to eq(parent.element_width - width)
|
|
30
|
+
expect(subject.height).to eq(parent.element_height - height)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Shared examples for Shoes::App and Shoes::Slot (flow and stack).
|
|
2
|
+
# If DSL methods can be called with multiple number of arguments,
|
|
3
|
+
# and if they set certain defaults, then that what needs to be tested
|
|
4
|
+
# here.
|
|
5
|
+
# There are individual specs for the different Shoes elements, so
|
|
6
|
+
# we don't need to test how they work in details. Here we just test that
|
|
7
|
+
# the DSL methods construct elements correctly.
|
|
8
|
+
shared_examples "DSL container" do
|
|
9
|
+
let(:dsl) { app }
|
|
10
|
+
|
|
11
|
+
%w[
|
|
12
|
+
animate
|
|
13
|
+
arc
|
|
14
|
+
background
|
|
15
|
+
button
|
|
16
|
+
border
|
|
17
|
+
cap
|
|
18
|
+
check
|
|
19
|
+
edit_box
|
|
20
|
+
edit_line
|
|
21
|
+
fill
|
|
22
|
+
flow
|
|
23
|
+
gradient
|
|
24
|
+
image
|
|
25
|
+
line
|
|
26
|
+
nofill
|
|
27
|
+
nostroke
|
|
28
|
+
oval
|
|
29
|
+
pattern
|
|
30
|
+
progress
|
|
31
|
+
rect
|
|
32
|
+
rgb
|
|
33
|
+
shape
|
|
34
|
+
star
|
|
35
|
+
stroke
|
|
36
|
+
strokewidth
|
|
37
|
+
style
|
|
38
|
+
video
|
|
39
|
+
].each do |method|
|
|
40
|
+
include_examples "#{method} DSL method"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
include_examples "text element DSL methods"
|
|
44
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
shared_examples_for "animate DSL method" do
|
|
2
|
+
context "defaults" do
|
|
3
|
+
let(:animation) { dsl.animate {} }
|
|
4
|
+
|
|
5
|
+
it "is a Shoes::Animation" do
|
|
6
|
+
expect(animation).to be_an_instance_of(Shoes::Animation)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "framerate is 10" do
|
|
10
|
+
expect(animation.framerate).to eq 10
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "with numeric argument" do
|
|
15
|
+
let(:animation) { dsl.animate(13) {} }
|
|
16
|
+
|
|
17
|
+
it "sets framerate" do
|
|
18
|
+
expect(animation.framerate).to eq(13)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "with hash argument" do
|
|
23
|
+
let(:animation) { dsl.animate(:framerate => 17) {} }
|
|
24
|
+
|
|
25
|
+
it "sets framerate" do
|
|
26
|
+
expect(animation.framerate).to eq(17)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
shared_context "style context" do
|
|
2
|
+
let(:fill_color) { Shoes::COLORS.fetch(:tomato) }
|
|
3
|
+
let(:stroke_color) { Shoes::COLORS.fetch(:chartreuse) }
|
|
4
|
+
|
|
5
|
+
before :each do
|
|
6
|
+
subject.fill fill_color
|
|
7
|
+
subject.stroke stroke_color
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
shared_examples_for "persistent stroke" do
|
|
12
|
+
include_context "style context"
|
|
13
|
+
|
|
14
|
+
it "passes to element" do
|
|
15
|
+
expect(element.stroke).to eq(stroke_color)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
shared_examples_for "persistent fill" do
|
|
20
|
+
include_context "style context"
|
|
21
|
+
|
|
22
|
+
it "passes to element" do
|
|
23
|
+
expect(element.fill).to eq(fill_color)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
shared_examples_for "arc DSL method" do
|
|
28
|
+
let(:arc) { dsl.arc(13, 44, 200, 300, 0, Shoes::TWO_PI) }
|
|
29
|
+
|
|
30
|
+
it "creates a Shoes::Arc" do
|
|
31
|
+
expect(arc).to be_an_instance_of(Shoes::Arc)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "raises an ArgumentError" do
|
|
35
|
+
expect { dsl.arc(30) }.to raise_exception(ArgumentError)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it_behaves_like "persistent fill" do
|
|
39
|
+
let(:element) { arc }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it_behaves_like "persistent stroke" do
|
|
43
|
+
let(:element) { arc }
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
shared_examples_for "background DSL method" do
|
|
2
|
+
context "with a valid hex string" do
|
|
3
|
+
it "sets color" do
|
|
4
|
+
background = subject.background("#fff")
|
|
5
|
+
expect(background.fill).to eq(Shoes::COLORS[:white])
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context "with an invalid hex string" do
|
|
10
|
+
it 'raises an argument error' do
|
|
11
|
+
expect{ subject.background('#ffq') }.to raise_error('Bad hex color: #ffq')
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'with no valid image' do
|
|
16
|
+
it 'ignores the background' do
|
|
17
|
+
expect{ subject.background('fake-shoes.jpg') }.not_to raise_error
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'with a valid image' do
|
|
22
|
+
it 'creates a Shoes::Background' do
|
|
23
|
+
expect(subject.background('static/shoes-icon.png')).to be_an_instance_of(Shoes::Background)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
shared_examples_for 'check DSL method' do
|
|
2
|
+
let(:checkbox) { dsl.check }
|
|
3
|
+
|
|
4
|
+
it 'should be a checkbox' do
|
|
5
|
+
expect(checkbox).to be_instance_of Shoes::Check
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'should be unchecked by default' do
|
|
9
|
+
expect(checkbox.checked?).to be_falsey
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
shared_examples_for "editable element" do
|
|
2
|
+
subject { super.public_send(dsl_method, *args) }
|
|
3
|
+
|
|
4
|
+
describe "with no arguments" do
|
|
5
|
+
let(:args) { [] }
|
|
6
|
+
its(:text) { should == '' }
|
|
7
|
+
its(:width) { should == klazz::STYLES[:width] }
|
|
8
|
+
its(:height) { should == klazz::STYLES[:height] }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "with a single text argument" do
|
|
12
|
+
let(:args) { ['Hello text here'] }
|
|
13
|
+
|
|
14
|
+
its(:text) { should == 'Hello text here' }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "with a style hash" do
|
|
18
|
+
let(:args) { [{width: 100, height: 50}] }
|
|
19
|
+
|
|
20
|
+
its(:text) { should == '' }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "with a text argument and a style hash" do
|
|
24
|
+
let(:args) { ['Hello text here', {width: 100, height: 50}] }
|
|
25
|
+
its(:text) { should == 'Hello text here' }
|
|
26
|
+
its(:width) { should == 100 }
|
|
27
|
+
its(:height) { should == 50 }
|
|
28
|
+
end
|
|
29
|
+
end
|