shoes-core 4.0.0.pre4 → 4.0.0.pre5

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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +5 -0
  3. data/bin/shoes +1 -1
  4. data/bin/shoes-stub +1 -1
  5. data/ext/install/Rakefile +15 -5
  6. data/ext/install/shoes.bat +1 -1
  7. data/lib/shoes/animation.rb +2 -2
  8. data/lib/shoes/arc.rb +1 -0
  9. data/lib/shoes/builtin_methods.rb +5 -18
  10. data/lib/shoes/button.rb +1 -5
  11. data/lib/shoes/check_button.rb +1 -5
  12. data/lib/shoes/color.rb +5 -274
  13. data/lib/shoes/color/dsl.rb +166 -0
  14. data/lib/shoes/color/dsl_helpers.rb +84 -0
  15. data/lib/shoes/color/hex_converter.rb +32 -0
  16. data/lib/shoes/common/background_element.rb +5 -0
  17. data/lib/shoes/common/hover.rb +87 -0
  18. data/lib/shoes/common/initialization.rb +21 -8
  19. data/lib/shoes/common/remove.rb +2 -0
  20. data/lib/shoes/common/state.rb +17 -3
  21. data/lib/shoes/common/style.rb +8 -0
  22. data/lib/shoes/configuration.rb +18 -15
  23. data/lib/shoes/core/version.rb +1 -1
  24. data/lib/shoes/dimension.rb +6 -19
  25. data/lib/shoes/dimensions.rb +8 -0
  26. data/lib/shoes/download.rb +5 -3
  27. data/lib/shoes/dsl.rb +3 -3
  28. data/lib/shoes/image.rb +1 -0
  29. data/lib/shoes/image_pattern.rb +1 -1
  30. data/lib/shoes/input_box.rb +2 -5
  31. data/lib/shoes/internal_app.rb +13 -2
  32. data/lib/shoes/line.rb +1 -0
  33. data/lib/shoes/link.rb +8 -0
  34. data/lib/shoes/list_box.rb +2 -5
  35. data/lib/shoes/mock/check.rb +3 -0
  36. data/lib/shoes/mock/image.rb +6 -0
  37. data/lib/shoes/mock/progress.rb +6 -0
  38. data/lib/shoes/mock/radio.rb +3 -0
  39. data/lib/shoes/mock/sound.rb +1 -1
  40. data/lib/shoes/oval.rb +1 -0
  41. data/lib/shoes/packager.rb +1 -1
  42. data/lib/shoes/rect.rb +1 -0
  43. data/lib/shoes/shape.rb +4 -0
  44. data/lib/shoes/slot.rb +75 -38
  45. data/lib/shoes/slot_contents.rb +4 -0
  46. data/lib/shoes/sound.rb +3 -2
  47. data/lib/shoes/star.rb +1 -0
  48. data/lib/shoes/text_block.rb +18 -2
  49. data/lib/shoes/text_block_dimensions.rb +19 -3
  50. data/lib/shoes/timer.rb +2 -2
  51. data/lib/shoes/ui/picker.rb +4 -4
  52. data/lib/shoes/version.rb +1 -1
  53. data/shoes-core.gemspec +1 -1
  54. data/spec/shoes/animation_spec.rb +2 -2
  55. data/spec/shoes/app_spec.rb +6 -17
  56. data/spec/shoes/arc_spec.rb +2 -1
  57. data/spec/shoes/background_spec.rb +2 -2
  58. data/spec/shoes/border_spec.rb +2 -2
  59. data/spec/shoes/builtin_methods_spec.rb +68 -56
  60. data/spec/shoes/button_spec.rb +3 -3
  61. data/spec/shoes/check_spec.rb +3 -2
  62. data/spec/shoes/color_spec.rb +9 -3
  63. data/spec/shoes/common/remove_spec.rb +0 -1
  64. data/spec/shoes/common/rotate_spec.rb +13 -0
  65. data/spec/shoes/common/style_spec.rb +12 -3
  66. data/spec/shoes/configuration_spec.rb +18 -3
  67. data/spec/shoes/constants_spec.rb +1 -0
  68. data/spec/shoes/dialog_spec.rb +1 -3
  69. data/spec/shoes/dimension_spec.rb +33 -24
  70. data/spec/shoes/dimensions_spec.rb +21 -31
  71. data/spec/shoes/download_spec.rb +14 -3
  72. data/spec/shoes/flow_spec.rb +6 -7
  73. data/spec/shoes/font_spec.rb +2 -3
  74. data/spec/shoes/framework_learning_spec.rb +1 -2
  75. data/spec/shoes/gradient_spec.rb +1 -2
  76. data/spec/shoes/helpers/fake_absolute_element.rb +30 -0
  77. data/spec/shoes/helpers/sample17_helper.rb +0 -1
  78. data/spec/shoes/image_spec.rb +2 -1
  79. data/spec/shoes/input_box_spec.rb +2 -2
  80. data/spec/shoes/integration_spec.rb +0 -1
  81. data/spec/shoes/internal_app_spec.rb +4 -5
  82. data/spec/shoes/keypress_spec.rb +1 -1
  83. data/spec/shoes/keyrelease_spec.rb +1 -2
  84. data/spec/shoes/line_spec.rb +3 -2
  85. data/spec/shoes/link_spec.rb +26 -6
  86. data/spec/shoes/list_box_spec.rb +2 -2
  87. data/spec/shoes/oval_spec.rb +2 -1
  88. data/spec/shoes/packager_spec.rb +1 -1
  89. data/spec/shoes/point_spec.rb +1 -1
  90. data/spec/shoes/progress_spec.rb +1 -1
  91. data/spec/shoes/radio_spec.rb +1 -1
  92. data/spec/shoes/rect_spec.rb +2 -1
  93. data/spec/shoes/renamed_delegate_spec.rb +0 -1
  94. data/spec/shoes/shape_spec.rb +1 -1
  95. data/spec/shoes/shared_examples/common_methods.rb +1 -1
  96. data/spec/shoes/shared_examples/dsl/animate.rb +1 -1
  97. data/spec/shoes/shared_examples/dsl/background.rb +2 -2
  98. data/spec/shoes/shared_examples/dsl/rgb.rb +4 -2
  99. data/spec/shoes/shared_examples/dsl/star.rb +0 -1
  100. data/spec/shoes/shared_examples/dsl/style.rb +1 -1
  101. data/spec/shoes/shared_examples/dsl/text_elements.rb +2 -2
  102. data/spec/shoes/shared_examples/dsl/video.rb +1 -1
  103. data/spec/shoes/shared_examples/dsl_app_context.rb +4 -1
  104. data/spec/shoes/shared_examples/hover.rb +78 -0
  105. data/spec/shoes/shared_examples/slot.rb +34 -4
  106. data/spec/shoes/shared_examples/state.rb +9 -2
  107. data/spec/shoes/shared_examples/style.rb +0 -5
  108. data/spec/shoes/slot_spec.rb +11 -38
  109. data/spec/shoes/sound_spec.rb +3 -2
  110. data/spec/shoes/span_spec.rb +2 -2
  111. data/spec/shoes/spec_helper.rb +1 -1
  112. data/spec/shoes/stack_spec.rb +6 -6
  113. data/spec/shoes/star_spec.rb +2 -1
  114. data/spec/shoes/text_block_dimensions_spec.rb +3 -4
  115. data/spec/shoes/text_block_spec.rb +16 -11
  116. data/spec/shoes/ui/picker_spec.rb +5 -6
  117. data/spec/shoes/url_spec.rb +1 -2
  118. data/spec/shoes/widget_spec.rb +11 -3
  119. data/spec/shoes_spec.rb +1 -4
  120. data/spec/spec_helper.rb +2 -1
  121. metadata +16 -9
  122. data/bin/shoes-guard +0 -8
  123. data/lib/shoes/link_hover.rb +0 -5
  124. data/spec/shoes/shared_examples/hover_leave.rb +0 -11
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Line do
4
4
  include_context "dsl app"
@@ -16,7 +16,8 @@ describe Shoes::Line do
16
16
  let(:subject_with_style) { Shoes::Line.new(app, parent, Shoes::Point.new(left, top), Shoes::Point.new(300, 430), arg_styles) }
17
17
  end
18
18
  it_behaves_like "object with dimensions"
19
- it_behaves_like 'object with parent'
19
+ it_behaves_like "object with parent"
20
+ it_behaves_like "object with hover"
20
21
  end
21
22
 
22
23
  describe "line with point a at leftmost, topmost" do
@@ -1,12 +1,32 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Link do
4
4
  let(:gui) { double("gui").as_null_object }
5
- let(:app) { double("app", gui: gui, style: {}, element_styles: {}, warn: true) }
5
+ let(:user_facing_app) { double("user facing app") }
6
+ let(:element_styles) { Hash.new }
7
+ let(:app) { double("app", gui: gui, style: {}, element_styles: element_styles,
8
+ warn: true, add_mouse_hover_control: nil) }
9
+ let(:parent) { double("parent") }
6
10
  let(:internal_app) { double("internal app", app: app, gui: gui, style: {}, element_styles: {}) }
7
11
  let(:texts) { ["text", "goes", "first"] }
8
12
 
9
- subject { Shoes::Link.new(app, texts, color: :blue) }
13
+ subject {
14
+ link = Shoes::Link.new(app, texts, color: :blue)
15
+ link.parent = parent
16
+ link
17
+ }
18
+
19
+ before do
20
+ allow(user_facing_app).to receive(:style) do |clazz, styles|
21
+ element_styles[clazz] = styles
22
+ end
23
+
24
+ allow(parent).to receive(:eval_hover_block) do |blk|
25
+ blk.call(subject) if blk
26
+ end
27
+ end
28
+
29
+ it_behaves_like "object with hover"
10
30
 
11
31
  context "initialize" do
12
32
  it "should set up text" do
@@ -29,15 +49,15 @@ describe Shoes::Link do
29
49
  underline: false, bg: Shoes::COLORS[:green]) }
30
50
 
31
51
  it "should include defaults" do
32
- expect(subject.style).to include(:stroke => Shoes::COLORS[:blue])
52
+ expect(subject.style).to include(stroke: Shoes::COLORS[:blue])
33
53
  end
34
54
 
35
55
  it "should override defaults" do
36
- expect(subject.style).to include(:underline => false)
56
+ expect(subject.style).to include(underline: false)
37
57
  end
38
58
 
39
59
  it "should include other options" do
40
- expect(subject.style).to include(:bg => Shoes::COLORS[:green])
60
+ expect(subject.style).to include(bg: Shoes::COLORS[:green])
41
61
  end
42
62
  end
43
63
 
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::ListBox do
4
4
  include_context "dsl app"
@@ -49,7 +49,7 @@ describe Shoes::ListBox do
49
49
 
50
50
  it "updates the gui when self-modifying array methods like map! are called" do
51
51
  expect(list_box.gui).to receive(:update_items)
52
- list_box.items.map!{"replaced!"}
52
+ list_box.items.map! {"replaced!"}
53
53
  end
54
54
  end
55
55
 
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Oval do
4
4
  include_context "dsl app"
@@ -18,6 +18,7 @@ describe Shoes::Oval do
18
18
  it_behaves_like "movable object"
19
19
  it_behaves_like "left, top as center"
20
20
  it_behaves_like "object with parent"
21
+ it_behaves_like "object with hover"
21
22
 
22
23
  #it_styles_with :art_styles, :center, :dimensions, :radius
23
24
  end
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Packager do
4
4
  subject { Shoes::Packager.new }
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Point do
4
4
  subject { Shoes::Point.new(40, 50) }
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Progress do
4
4
  include_context "dsl app"
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Radio do
4
4
  include_context "dsl app"
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  shared_examples_for "basic rect" do
4
4
  it "retains app" do
@@ -36,4 +36,5 @@ describe Shoes::Rect do
36
36
  it_behaves_like "movable object"
37
37
  it_behaves_like "left, top as center"
38
38
  it_behaves_like 'object with parent'
39
+ it_behaves_like "object with hover"
39
40
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RenamedDelegate do
4
-
5
4
  class ToDelegate
6
5
  def method_key
7
6
  end
@@ -1,4 +1,4 @@
1
- require 'shoes/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Shoes::Shape do
4
4
  include_context "dsl app"
@@ -25,7 +25,7 @@ shared_examples_for "movable object" do
25
25
  end
26
26
 
27
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) }
28
+ let(:centered_object) { described_class.new(app, parent, left, top, width, height, *params, center: true) }
29
29
  it "should now be located somewhere" do
30
30
  expect(centered_object.left).to eq(left-(width/2))
31
31
  expect(centered_object.top).to eq(top-(height/2))
@@ -20,7 +20,7 @@ shared_examples_for "animate DSL method" do
20
20
  end
21
21
 
22
22
  context "with hash argument" do
23
- let(:animation) { dsl.animate(:framerate => 17) {} }
23
+ let(:animation) { dsl.animate(framerate: 17) {} }
24
24
 
25
25
  it "sets framerate" do
26
26
  expect(animation.framerate).to eq(17)
@@ -8,13 +8,13 @@ shared_examples_for "background DSL method" do
8
8
 
9
9
  context "with an invalid hex string" do
10
10
  it 'raises an argument error' do
11
- expect{ subject.background('#ffq') }.to raise_error('Bad hex color: #ffq')
11
+ expect { subject.background('#ffq') }.to raise_error('Bad hex color: #ffq')
12
12
  end
13
13
  end
14
14
 
15
15
  context 'with no valid image' do
16
16
  it 'ignores the background' do
17
- expect{ subject.background('fake-shoes.jpg') }.not_to raise_error
17
+ expect { subject.background('fake-shoes.jpg') }.not_to raise_error
18
18
  end
19
19
  end
20
20
 
@@ -5,13 +5,15 @@ shared_examples_for "rgb DSL method" do
5
5
  let(:alpha) { 133 } # cornflowerblue
6
6
 
7
7
  it "sends args to Shoes::Color" do
8
- expect(Shoes::Color).to receive(:new).with(red, green, blue, alpha)
8
+ allow(Shoes::Color).to receive(:new)
9
9
  dsl.rgb(red, green, blue, alpha)
10
+ expect(Shoes::Color).to have_received(:new).with(red, green, blue, alpha)
10
11
  end
11
12
 
12
13
  it "defaults to opaque" do
13
- expect(Shoes::Color).to receive(:new).with(red, green, blue, Shoes::Color::OPAQUE)
14
+ allow(Shoes::Color).to receive(:new)
14
15
  dsl.rgb(red, green, blue)
16
+ expect(Shoes::Color).to have_received(:new).with(red, green, blue, Shoes::Color::OPAQUE)
15
17
  end
16
18
 
17
19
  describe "named color method" do
@@ -106,6 +106,5 @@ shared_examples_for "star DSL method" do
106
106
  expect { subject }.to raise_error(ArgumentError)
107
107
  end
108
108
  end
109
-
110
109
  end
111
110
  end
@@ -4,7 +4,7 @@ shared_examples_for "style DSL method" do
4
4
  let(:size) { 42 }
5
5
  let(:fill) { Shoes::COLORS[:peru] }
6
6
  let(:font) { "SOME FONT" }
7
- let(:style) { {:stroke => stroke, :size => size, :fill => fill, :font => font} }
7
+ let(:style) { {stroke: stroke, size: size, fill: fill, font: font} }
8
8
 
9
9
  %w(Banner Title Subtitle Tagline Caption Para Inscription).each do |text_block|
10
10
  describe text_block do
@@ -41,7 +41,7 @@ shared_examples_for "text element DSL methods" do
41
41
  end
42
42
 
43
43
  it 'should handle a splatted array of links' do
44
- expect{dsl.span(*[dsl.link('foo'), dsl.link('foo')])}.not_to raise_error
44
+ expect {dsl.span(*[dsl.link('foo'), dsl.link('foo')])}.not_to raise_error
45
45
  end
46
46
 
47
47
  it 'should handle a splatted array of links and parse the color' do
@@ -51,7 +51,7 @@ shared_examples_for "text element DSL methods" do
51
51
 
52
52
  it 'should handle a splatted array of links with a block' do
53
53
  link = dsl.link('foo') { "Bar" }
54
- expect{dsl.span(*[link, link])}.not_to raise_error
54
+ expect {dsl.span(*[link, link])}.not_to raise_error
55
55
  end
56
56
  end
57
57
 
@@ -1,5 +1,5 @@
1
1
  shared_examples_for 'video DSL method' do
2
2
  it 'throws a Shoes::NotImplementedError' do
3
- expect{dsl.video}.to raise_error Shoes::NotImplementedError
3
+ expect {dsl.video}.to raise_error Shoes::NotImplementedError
4
4
  end
5
5
  end
@@ -3,5 +3,8 @@ shared_context "dsl app" do
3
3
  let(:input_opts) { Hash.new }
4
4
  let(:user_facing_app) { Shoes::App.new input_opts, &input_block }
5
5
  let(:app) { user_facing_app.instance_variable_get(:@__app__) }
6
- let(:parent) { Shoes::Flow.new app, app }
6
+ let(:parent) { Shoes::Flow.new app, app,
7
+ width: Shoes::InternalApp::DEFAULT_OPTIONS[:width],
8
+ height: Shoes::InternalApp::DEFAULT_OPTIONS[:height]
9
+ }
7
10
  end
@@ -0,0 +1,78 @@
1
+ shared_examples "object with hover" do
2
+ let(:teal) { Shoes::COLORS[:teal] }
3
+ let(:gold) { Shoes::COLORS[:gold] }
4
+
5
+ let(:hover_class) { subject.hover_class }
6
+
7
+ it "registers hover" do
8
+ expect(subject).to receive(:add_mouse_hover_control)
9
+ subject.hover { }
10
+ end
11
+
12
+ it "registers with leave" do
13
+ expect(subject).to receive(:add_mouse_hover_control)
14
+ subject.leave { }
15
+ end
16
+
17
+ it "marks itself as hovered" do
18
+ subject.mouse_hovered
19
+ expect(subject.hovered?).to eq(true)
20
+ end
21
+
22
+ it "marks itself not hovered after leaving" do
23
+ subject.mouse_hovered
24
+ expect(subject.hovered?).to eq(true)
25
+
26
+ subject.mouse_left
27
+ expect(subject.hovered?).to eq(false)
28
+ end
29
+
30
+ it "only calls hover block once" do
31
+ count = 0
32
+ subject.hover do
33
+ count += 1
34
+ end
35
+
36
+ subject.mouse_hovered
37
+ subject.mouse_hovered
38
+
39
+ expect(count).to eq(1)
40
+ end
41
+
42
+ it "only calls leave block once after we're hovering" do
43
+ count = 0
44
+ subject.leave do
45
+ count += 1
46
+ end
47
+
48
+ subject.mouse_hovered
49
+ subject.mouse_left
50
+ subject.mouse_left
51
+
52
+ expect(count).to eq(1)
53
+ end
54
+
55
+ it "doesn't update styles on hover by default" do
56
+ original_style = subject.style.dup
57
+ subject.mouse_hovered
58
+
59
+ expect(subject.style).to eq(original_style)
60
+ end
61
+
62
+ it "updates styles on hover" do
63
+ user_facing_app.style(hover_class, stroke: teal)
64
+
65
+ subject.mouse_hovered
66
+ expect(subject.style[:stroke]).to eq(teal)
67
+ end
68
+
69
+ it "restores style after hover's done" do
70
+ user_facing_app.style(hover_class, stroke: teal)
71
+
72
+ subject.style[:stroke] = gold
73
+ subject.mouse_hovered
74
+ subject.mouse_left
75
+
76
+ expect(subject.style[:stroke]).to eq(gold)
77
+ end
78
+ end
@@ -90,7 +90,6 @@ shared_context 'element one with bottom and right' do
90
90
  end
91
91
 
92
92
  shared_examples_for 'positioning through :_position' do
93
-
94
93
  let(:element) {Shoes::FakeElement.new nil, height: 100, width: 50}
95
94
 
96
95
  def add_child_and_align
@@ -109,11 +108,34 @@ shared_examples_for 'positioning through :_position' do
109
108
  subject.contents_alignment
110
109
  end
111
110
 
111
+ it 'does not send _position if element does not need positioning' do
112
+ allow(element).to receive(:takes_up_space?) { false }
113
+ allow(element).to receive(:needs_positioning?) { false }
114
+ expect(element).not_to receive(:_position)
115
+ add_child_and_align
116
+ end
117
+
118
+ it 'sends _position even when element does not take up space' do
119
+ allow(element).to receive(:takes_up_space?) { false }
120
+ allow(element).to receive(:needs_positioning?) { true }
121
+ expect(element).to receive(:_position).and_call_original
122
+ add_child_and_align
123
+ end
124
+
112
125
  it 'is resilient to exceptions during positioning' do
113
126
  allow(element).to receive(:contents_alignment).and_raise("O_o")
114
127
  allow(subject).to receive(:puts) # Quiet, you
115
128
  add_child_and_align
116
129
  end
130
+
131
+ describe 'absolute dimensions' do
132
+ let(:element) { Shoes::FakeAbsoluteElement.new }
133
+
134
+ it 'positions element via _position' do
135
+ expect(element).to receive(:_position).and_call_original
136
+ add_child_and_align
137
+ end
138
+ end
117
139
  end
118
140
 
119
141
  shared_examples_for 'element one positioned with top and left' do
@@ -261,8 +283,8 @@ end
261
283
 
262
284
  shared_examples_for 'prepending' do
263
285
  include_context 'two slot children'
264
- let(:prepend1) {double 'prepend1'}
265
- let(:prepend2) {double 'prepend2'}
286
+ let(:prepend1) { Shoes::FakeElement.new(nil, width: 100) }
287
+ let(:prepend2) { Shoes::FakeElement.new(nil, width: 100) }
266
288
 
267
289
  describe 'one element' do
268
290
  before :each do
@@ -304,7 +326,7 @@ shared_examples_for 'prepending' do
304
326
  describe 'two times' do
305
327
  before :each do
306
328
  subject.prepend { subject.add_child prepend1 }
307
- subject.prepend {subject.add_child prepend2 }
329
+ subject.prepend { subject.add_child prepend2 }
308
330
  end
309
331
 
310
332
  it 'has the last prepended element as the first' do
@@ -384,6 +406,14 @@ shared_examples_for 'margin and positioning' do
384
406
  it 'leaves the left value as zero' do
385
407
  expect(element.absolute_left).to eq 0
386
408
  end
409
+
410
+ it 'sets the slot element_height to the height of the child + adjustment' do
411
+ expect(subject.element_height).to eq element.height
412
+ end
413
+
414
+ it 'sets the slot total height to element height + margin' do
415
+ expect(subject.height).to eq element.height + margin_top
416
+ end
387
417
  end
388
418
 
389
419
  describe 'margin left' do
@@ -1,7 +1,8 @@
1
1
  shared_examples_for "object with state" do
2
- let(:input_opts) { {:state => "disabled"} }
2
+ let(:input_opts) { {state: "disabled"} }
3
3
 
4
- it "should initialize" do
4
+ it "should initialize in the right state" do
5
+ expect_any_instance_of(Shoes.configuration.backend_class(described_class)).to receive(:enabled).with(false)
5
6
  expect(subject.state).to eq("disabled")
6
7
  end
7
8
 
@@ -16,4 +17,10 @@ shared_examples_for "object with state" do
16
17
  subject.state = "disabled"
17
18
  expect(subject.state).to eq("disabled")
18
19
  end
20
+
21
+ it "does not disable when a string other than disabled is passed" do
22
+ expect(subject.gui).to receive(:enabled).with(true)
23
+ subject.state = "enabled"
24
+ expect(subject.state).to eq("enabled")
25
+ end
19
26
  end