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,27 @@
|
|
|
1
|
+
shared_examples_for "fill DSL method" do
|
|
2
|
+
let(:color) { Shoes::COLORS.fetch :tomato }
|
|
3
|
+
|
|
4
|
+
it "returns a color" do
|
|
5
|
+
expect(dsl.fill(color).class).to eq(Shoes::Color)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# This works differently on a container than on a normal element
|
|
9
|
+
it "sets on receiver" do
|
|
10
|
+
dsl.fill color
|
|
11
|
+
expect(dsl.style[:fill]).to eq(color)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "applies to subsequently created objects" do
|
|
15
|
+
dsl.fill color
|
|
16
|
+
oval = dsl.oval(10, 10, 100, 100)
|
|
17
|
+
expect(oval.fill).to eq(color)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "with hex string" do
|
|
21
|
+
let(:color) { "#fff" }
|
|
22
|
+
|
|
23
|
+
it "sets the color" do
|
|
24
|
+
expect(dsl.fill(color)).to eq(Shoes::COLORS[:white])
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
shared_examples_for "flow DSL method" do
|
|
2
|
+
let(:flow) {dsl.flow}
|
|
3
|
+
|
|
4
|
+
it "creates a Shoes::Flow" do
|
|
5
|
+
expect(flow).to be_an_instance_of(Shoes::Flow)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it 'reports an instance of Shoes::App when asked for its app' do
|
|
9
|
+
expect(flow.app.class).to eq Shoes::App
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'reports an object that responds to stack when asked for its app' do
|
|
13
|
+
expect(flow.app).to respond_to :stack
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
shared_examples_for "creating gradient" do
|
|
2
|
+
it "returns correct gradient according to #to_s" do
|
|
3
|
+
expect(gradient.to_s).to eq("(Shoes::Gradient)")
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "returns correct gradient according to #inspect" do
|
|
7
|
+
expect(gradient.inspect).to match("[(]Shoes::Gradient:#{shoes_object_id_pattern} rgb[(]255, 0, 0[)]->rgb[(]0, 0, 255[)][)]")
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
shared_examples_for "gradient DSL method" do
|
|
12
|
+
context "with colors" do
|
|
13
|
+
include InspectHelpers
|
|
14
|
+
|
|
15
|
+
let(:red) { Shoes::Color.new(255, 0, 0) }
|
|
16
|
+
let(:blue) { Shoes::Color.new(0, 0, 255) }
|
|
17
|
+
|
|
18
|
+
context "two separate" do
|
|
19
|
+
it_behaves_like "creating gradient" do
|
|
20
|
+
let(:gradient) { dsl.gradient(red, blue) }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "as range" do
|
|
25
|
+
it_behaves_like "creating gradient" do
|
|
26
|
+
let(:gradient) { dsl.gradient(red..blue) }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "with strings" do
|
|
32
|
+
include InspectHelpers
|
|
33
|
+
|
|
34
|
+
let(:red) { "#f00" }
|
|
35
|
+
let(:blue) { "#00f" }
|
|
36
|
+
|
|
37
|
+
context "two separate" do
|
|
38
|
+
it_behaves_like "creating gradient" do
|
|
39
|
+
let(:gradient) { dsl.gradient(red, blue) }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "as range" do
|
|
44
|
+
it_behaves_like "creating gradient" do
|
|
45
|
+
let(:gradient) { dsl.gradient(red..blue) }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context "with gradient" do
|
|
51
|
+
include InspectHelpers
|
|
52
|
+
|
|
53
|
+
it_behaves_like "creating gradient" do
|
|
54
|
+
let(:gradient_arg) { dsl.gradient("#f00", "#00f") }
|
|
55
|
+
let(:gradient) { dsl.gradient(gradient_arg) }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "fails on bad input" do
|
|
60
|
+
expect { dsl.gradient(100) }.to raise_error(ArgumentError)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
shared_examples_for "image DSL method" do
|
|
2
|
+
let(:path) { Shoes::DIR + '/static/shoes-icon.png' }
|
|
3
|
+
let(:opts) { {} }
|
|
4
|
+
let(:image) { dsl.image path, opts }
|
|
5
|
+
|
|
6
|
+
it 'should set the path' do
|
|
7
|
+
expect(image.file_path).to eq(path)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context 'with :top and :left style attributes' do
|
|
11
|
+
let(:opts) { {left: 55, top: 66} }
|
|
12
|
+
|
|
13
|
+
it 'should set the left' do
|
|
14
|
+
expect(image.left).to eq(55)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should set the top' do
|
|
18
|
+
expect(image.top).to eq(66)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
shared_examples_for "an oval/circle element" do
|
|
2
|
+
it "makes a Shoes::Oval" do
|
|
3
|
+
expect(oval).to be_instance_of(Shoes::Oval)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "sets the proper dimensions" do
|
|
7
|
+
expect(oval.top).to eq(top)
|
|
8
|
+
expect(oval.left).to eq(left)
|
|
9
|
+
expect(oval.width).to eq(width)
|
|
10
|
+
expect(oval.height).to eq(height)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "sets stroke" do
|
|
14
|
+
expect(oval.style[:stroke]).to eq(stroke)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "sets fill" do
|
|
18
|
+
expect(oval.style[:fill]).to eq(fill)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
shared_examples_for "oval DSL method" do
|
|
23
|
+
let(:left) { 20 }
|
|
24
|
+
let(:top) { 30 }
|
|
25
|
+
let(:width) { 100 }
|
|
26
|
+
let(:height) { 200 }
|
|
27
|
+
let(:stroke) { Shoes::COLORS[:black] }
|
|
28
|
+
let(:fill) { Shoes::COLORS[:black] }
|
|
29
|
+
|
|
30
|
+
describe "creating an oval" do
|
|
31
|
+
describe "with explicit arguments" do
|
|
32
|
+
let(:oval) { dsl.oval(left, top, width, height) }
|
|
33
|
+
it_behaves_like "an oval/circle element"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "with stroke and fill styles" do
|
|
37
|
+
let(:stroke) { Shoes::COLORS.fetch :orchid }
|
|
38
|
+
let(:fill) { Shoes::COLORS.fetch :lemonchiffon }
|
|
39
|
+
|
|
40
|
+
describe "as colors" do
|
|
41
|
+
let(:oval) { dsl.oval(left, top, width, height, stroke: stroke, fill: fill) }
|
|
42
|
+
it_behaves_like "an oval/circle element"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "as hex strings" do
|
|
46
|
+
let(:oval) { dsl.oval(left, top, width, height, stroke: stroke.hex, fill: fill.hex) }
|
|
47
|
+
it_behaves_like "an oval/circle element"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "with too few arguments" do
|
|
52
|
+
it "raises an ArgumentError" do
|
|
53
|
+
expect { dsl.oval(10) }.to raise_error(ArgumentError)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "creating a circle" do
|
|
59
|
+
let(:width) { height }
|
|
60
|
+
|
|
61
|
+
describe "with explicit arguments" do
|
|
62
|
+
let(:oval) { dsl.oval(left, top, width, height) }
|
|
63
|
+
it_behaves_like "an oval/circle element"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "with top, left, diameter" do
|
|
67
|
+
let(:oval) { dsl.oval(left, top, width) }
|
|
68
|
+
it_behaves_like "an oval/circle element"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "with a style hash" do
|
|
72
|
+
describe "containing left, top, height, width" do
|
|
73
|
+
let(:oval) { dsl.oval(left: left, top: top, width: width, height: height) }
|
|
74
|
+
it_behaves_like "an oval/circle element"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "containing left, top, height, width, center: false" do
|
|
78
|
+
let(:oval) { dsl.oval(left: left, top: top, width: width, height: height, center: false) }
|
|
79
|
+
it_behaves_like "an oval/circle element"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe "containing left, top, diameter" do
|
|
83
|
+
let(:oval) { dsl.oval(left: left, top: top, diameter: width) }
|
|
84
|
+
it_behaves_like "an oval/circle element"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
shared_examples_for "pattern DSL method" do
|
|
2
|
+
let(:honeydew) { Shoes::COLORS[:honeydew] }
|
|
3
|
+
let(:salmon) { Shoes::COLORS[:salmon] }
|
|
4
|
+
|
|
5
|
+
context "with single color" do
|
|
6
|
+
let(:pattern) { dsl.pattern honeydew }
|
|
7
|
+
it "returns the color" do
|
|
8
|
+
expect(pattern).to eq(honeydew)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context "with color range" do
|
|
13
|
+
let(:pattern) { dsl.pattern honeydew..salmon }
|
|
14
|
+
|
|
15
|
+
it "returns a gradient" do
|
|
16
|
+
expect(pattern).to eq(dsl.gradient honeydew..salmon)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
context "with single string" do
|
|
21
|
+
let(:pattern) { dsl.pattern honeydew.hex }
|
|
22
|
+
it "returns the color" do
|
|
23
|
+
expect(pattern).to eq(honeydew)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context "with string range" do
|
|
28
|
+
let(:pattern) { dsl.pattern honeydew.hex..salmon.hex }
|
|
29
|
+
|
|
30
|
+
it "returns a gradient" do
|
|
31
|
+
expect(pattern).to eq(dsl.gradient honeydew..salmon)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
shared_examples_for "rectangle dimensions" do
|
|
2
|
+
it "makes a Shoes::Rect" do
|
|
3
|
+
expect(rect).to be_an_instance_of(Shoes::Rect)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
it "sets proper dimensions" do
|
|
7
|
+
expect(rect.left).to eq(left)
|
|
8
|
+
expect(rect.top).to eq(top)
|
|
9
|
+
expect(rect.width).to eq(width)
|
|
10
|
+
expect(rect.height).to eq(height)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
shared_examples_for "rect DSL method" do
|
|
15
|
+
let(:left) { 40 }
|
|
16
|
+
let(:top) { 30 }
|
|
17
|
+
let(:curve) { 12 }
|
|
18
|
+
|
|
19
|
+
it "raises an ArgumentError" do
|
|
20
|
+
expect { dsl.rect(30) }.to raise_exception(ArgumentError)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context 'unequal sides' do
|
|
24
|
+
let(:width) { 200 }
|
|
25
|
+
let(:height) { 100 }
|
|
26
|
+
|
|
27
|
+
context "from explicit arguments" do
|
|
28
|
+
let(:rect) { dsl.rect left, top, width, height }
|
|
29
|
+
|
|
30
|
+
include_examples "rectangle dimensions"
|
|
31
|
+
|
|
32
|
+
it "defaults to corner radius of 0" do
|
|
33
|
+
expect(rect.curve).to eq(0)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "round corners, from explicit arguments" do
|
|
38
|
+
let(:rect) { dsl.rect left, top, width, height, curve }
|
|
39
|
+
|
|
40
|
+
include_examples "rectangle dimensions"
|
|
41
|
+
|
|
42
|
+
it "sets corner radius" do
|
|
43
|
+
expect(rect.curve).to eq(curve)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "from style hash" do
|
|
48
|
+
let(:rect) { dsl.rect left: left, top: top, width: width, height: height }
|
|
49
|
+
|
|
50
|
+
include_examples "rectangle dimensions"
|
|
51
|
+
|
|
52
|
+
it "defaults to corner radius of 0" do
|
|
53
|
+
expect(rect.curve).to eq(0)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "rounded corners, from style hash" do
|
|
58
|
+
let(:rect) { dsl.rect left: left, top: top, width: width, height: height, curve: curve }
|
|
59
|
+
|
|
60
|
+
include_examples "rectangle dimensions"
|
|
61
|
+
|
|
62
|
+
it "sets corner radius" do
|
|
63
|
+
expect(rect.curve).to eq(curve)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "square" do
|
|
69
|
+
let(:width) { 200 }
|
|
70
|
+
let(:height) { 200 }
|
|
71
|
+
|
|
72
|
+
context "from explicit arguments" do
|
|
73
|
+
let(:rect) { dsl.rect left, top, width }
|
|
74
|
+
|
|
75
|
+
include_examples "rectangle dimensions"
|
|
76
|
+
|
|
77
|
+
it "defaults to corner radius of 0" do
|
|
78
|
+
expect(rect.curve).to eq(0)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context "square, from style hash" do
|
|
83
|
+
let(:rect) { dsl.rect left: left, top: top, width: width }
|
|
84
|
+
|
|
85
|
+
include_examples "rectangle dimensions"
|
|
86
|
+
|
|
87
|
+
it "defaults to corner radius of 0" do
|
|
88
|
+
expect(rect.curve).to eq(0)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
shared_examples_for "rgb DSL method" do
|
|
2
|
+
let(:red) { 100 }
|
|
3
|
+
let(:green) { 149 }
|
|
4
|
+
let(:blue) { 237 }
|
|
5
|
+
let(:alpha) { 133 } # cornflowerblue
|
|
6
|
+
|
|
7
|
+
it "sends args to Shoes::Color" do
|
|
8
|
+
expect(Shoes::Color).to receive(:new).with(red, green, blue, alpha)
|
|
9
|
+
dsl.rgb(red, green, blue, alpha)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "defaults to opaque" do
|
|
13
|
+
expect(Shoes::Color).to receive(:new).with(red, green, blue, Shoes::Color::OPAQUE)
|
|
14
|
+
dsl.rgb(red, green, blue)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "named color method" do
|
|
18
|
+
it "produces correct color" do
|
|
19
|
+
expect(dsl.cornflowerblue).to eq(Shoes::Color.new red, green, blue)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "accepts alpha arg" do
|
|
23
|
+
expect(dsl.cornflowerblue(alpha)).to eq(Shoes::Color.new red, green, blue, alpha)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
shared_examples_for "shape DSL method" do
|
|
2
|
+
let(:shape) {
|
|
3
|
+
dsl.shape {
|
|
4
|
+
move_to 400, 300
|
|
5
|
+
line_to 400, 200
|
|
6
|
+
line_to 100, 100
|
|
7
|
+
line_to 400, 300
|
|
8
|
+
curve_to 100, 100, 20, 200, 120, 240
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
it "creates a Shoes::Shape" do
|
|
13
|
+
expect(shape).to be_an_instance_of(Shoes::Shape)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "receives style from app" do
|
|
17
|
+
green = Shoes::COLORS.fetch :green
|
|
18
|
+
dsl.style[:stroke] = green
|
|
19
|
+
expect(shape.stroke).to eq(green)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "constructing" do
|
|
23
|
+
it "doesn't need any arguments" do
|
|
24
|
+
shape = dsl.shape
|
|
25
|
+
expect(shape.left).to eq(nil)
|
|
26
|
+
expect(shape.top).to eq(nil)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "can accept some styles" do
|
|
30
|
+
white = Shoes::COLORS.fetch :white
|
|
31
|
+
shape = dsl.shape stroke: white
|
|
32
|
+
expect(shape.stroke).to eq(white)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "can accept a left and top" do
|
|
36
|
+
left, top = 10, 20
|
|
37
|
+
shape = dsl.shape left, top
|
|
38
|
+
expect(shape.left).to eq(left)
|
|
39
|
+
expect(shape.top).to eq(top)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "accepts left and top in styles" do
|
|
43
|
+
left, top = 10, 20
|
|
44
|
+
shape = dsl.shape left: left, top: top
|
|
45
|
+
expect(shape.left).to eq(left)
|
|
46
|
+
expect(shape.top).to eq(top)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "can accept a left, top, and some styles" do
|
|
50
|
+
left, top, white = 10, 20, Shoes::COLORS.fetch(:white)
|
|
51
|
+
shape = dsl.shape left, top, stroke: white
|
|
52
|
+
expect(shape.left).to eq(left)
|
|
53
|
+
expect(shape.top).to eq(top)
|
|
54
|
+
expect(shape.stroke).to eq(white)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|