shoes-core 4.0.0.pre7 → 4.0.0.pre8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shoes/arc.rb +10 -13
  3. data/lib/shoes/arrow.rb +1 -11
  4. data/lib/shoes/background.rb +0 -3
  5. data/lib/shoes/border.rb +0 -3
  6. data/lib/shoes/button.rb +4 -1
  7. data/lib/shoes/check_button.rb +0 -1
  8. data/lib/shoes/common/art_element.rb +21 -0
  9. data/lib/shoes/common/background_element.rb +10 -0
  10. data/lib/shoes/common/clickable.rb +2 -0
  11. data/lib/shoes/common/rotate.rb +1 -2
  12. data/lib/shoes/common/ui_element.rb +10 -1
  13. data/lib/shoes/core/version.rb +1 -1
  14. data/lib/shoes/download.rb +47 -29
  15. data/lib/shoes/dsl.rb +99 -40
  16. data/lib/shoes/font.rb +0 -4
  17. data/lib/shoes/http_request.rb +91 -0
  18. data/lib/shoes/image.rb +0 -1
  19. data/lib/shoes/input_box.rb +0 -1
  20. data/lib/shoes/internal_app.rb +1 -1
  21. data/lib/shoes/line.rb +25 -11
  22. data/lib/shoes/link.rb +10 -4
  23. data/lib/shoes/list_box.rb +0 -1
  24. data/lib/shoes/mock/app.rb +6 -0
  25. data/lib/shoes/mock/clickable.rb +3 -0
  26. data/lib/shoes/mock/font.rb +0 -4
  27. data/lib/shoes/oval.rb +3 -13
  28. data/lib/shoes/progress.rb +0 -1
  29. data/lib/shoes/rect.rb +1 -11
  30. data/lib/shoes/shape.rb +16 -8
  31. data/lib/shoes/slot.rb +2 -1
  32. data/lib/shoes/star.rb +8 -11
  33. data/lib/shoes/text_block.rb +0 -1
  34. data/lib/shoes/ui/picker.rb +29 -8
  35. data/lib/shoes/version.rb +1 -1
  36. metadata +8 -231
  37. data/Guardfile +0 -5
  38. data/Rakefile +0 -1
  39. data/bin/shoes-stub +0 -62
  40. data/ext/install/Rakefile +0 -39
  41. data/ext/install/shoes.bat +0 -17
  42. data/lib/rubygems_plugin.rb +0 -24
  43. data/shoes-core.gemspec +0 -22
  44. data/spec/shoes/animation_spec.rb +0 -71
  45. data/spec/shoes/app_spec.rb +0 -454
  46. data/spec/shoes/arc_spec.rb +0 -52
  47. data/spec/shoes/arrow_spec.rb +0 -28
  48. data/spec/shoes/background_spec.rb +0 -47
  49. data/spec/shoes/border_spec.rb +0 -46
  50. data/spec/shoes/builtin_methods_spec.rb +0 -122
  51. data/spec/shoes/button_spec.rb +0 -55
  52. data/spec/shoes/check_spec.rb +0 -36
  53. data/spec/shoes/color_spec.rb +0 -429
  54. data/spec/shoes/common/attachable_spec.rb +0 -32
  55. data/spec/shoes/common/inspect_spec.rb +0 -26
  56. data/spec/shoes/common/remove_spec.rb +0 -37
  57. data/spec/shoes/common/rotate_spec.rb +0 -13
  58. data/spec/shoes/common/style_normalizer_spec.rb +0 -28
  59. data/spec/shoes/common/style_spec.rb +0 -197
  60. data/spec/shoes/common/translate_spec.rb +0 -27
  61. data/spec/shoes/configuration_spec.rb +0 -51
  62. data/spec/shoes/constants_spec.rb +0 -39
  63. data/spec/shoes/dialog_spec.rb +0 -169
  64. data/spec/shoes/dimension_spec.rb +0 -451
  65. data/spec/shoes/dimensions_spec.rb +0 -868
  66. data/spec/shoes/download_spec.rb +0 -198
  67. data/spec/shoes/flow_spec.rb +0 -132
  68. data/spec/shoes/font_spec.rb +0 -36
  69. data/spec/shoes/framework_learning_spec.rb +0 -31
  70. data/spec/shoes/gradient_spec.rb +0 -31
  71. data/spec/shoes/helpers/fake_absolute_element.rb +0 -31
  72. data/spec/shoes/helpers/fake_element.rb +0 -25
  73. data/spec/shoes/helpers/inspect_helpers.rb +0 -5
  74. data/spec/shoes/helpers/sample17_helper.rb +0 -65
  75. data/spec/shoes/image_spec.rb +0 -69
  76. data/spec/shoes/images/shoe.jpg +0 -0
  77. data/spec/shoes/input_box_spec.rb +0 -80
  78. data/spec/shoes/integration_spec.rb +0 -19
  79. data/spec/shoes/internal_app_spec.rb +0 -148
  80. data/spec/shoes/keypress_spec.rb +0 -11
  81. data/spec/shoes/keyrelease_spec.rb +0 -11
  82. data/spec/shoes/line_spec.rb +0 -120
  83. data/spec/shoes/link_spec.rb +0 -149
  84. data/spec/shoes/list_box_spec.rb +0 -87
  85. data/spec/shoes/logger/ruby_spec.rb +0 -8
  86. data/spec/shoes/logger_spec.rb +0 -45
  87. data/spec/shoes/oval_spec.rb +0 -25
  88. data/spec/shoes/packager_spec.rb +0 -25
  89. data/spec/shoes/point_spec.rb +0 -99
  90. data/spec/shoes/progress_spec.rb +0 -54
  91. data/spec/shoes/radio_spec.rb +0 -32
  92. data/spec/shoes/rect_spec.rb +0 -40
  93. data/spec/shoes/renamed_delegate_spec.rb +0 -69
  94. data/spec/shoes/shape_spec.rb +0 -119
  95. data/spec/shoes/shared_examples/button.rb +0 -6
  96. data/spec/shoes/shared_examples/changeable.rb +0 -26
  97. data/spec/shoes/shared_examples/clickable.rb +0 -5
  98. data/spec/shoes/shared_examples/common_methods.rb +0 -35
  99. data/spec/shoes/shared_examples/dimensions.rb +0 -32
  100. data/spec/shoes/shared_examples/dsl.rb +0 -44
  101. data/spec/shoes/shared_examples/dsl/animate.rb +0 -29
  102. data/spec/shoes/shared_examples/dsl/arc.rb +0 -45
  103. data/spec/shoes/shared_examples/dsl/background.rb +0 -26
  104. data/spec/shoes/shared_examples/dsl/border.rb +0 -10
  105. data/spec/shoes/shared_examples/dsl/button.rb +0 -5
  106. data/spec/shoes/shared_examples/dsl/cap.rb +0 -6
  107. data/spec/shoes/shared_examples/dsl/check.rb +0 -11
  108. data/spec/shoes/shared_examples/dsl/edit_box.rb +0 -8
  109. data/spec/shoes/shared_examples/dsl/edit_line.rb +0 -8
  110. data/spec/shoes/shared_examples/dsl/editable_element.rb +0 -29
  111. data/spec/shoes/shared_examples/dsl/fill.rb +0 -27
  112. data/spec/shoes/shared_examples/dsl/flow.rb +0 -15
  113. data/spec/shoes/shared_examples/dsl/gradient.rb +0 -62
  114. data/spec/shoes/shared_examples/dsl/image.rb +0 -21
  115. data/spec/shoes/shared_examples/dsl/line.rb +0 -9
  116. data/spec/shoes/shared_examples/dsl/nofill.rb +0 -6
  117. data/spec/shoes/shared_examples/dsl/nostroke.rb +0 -6
  118. data/spec/shoes/shared_examples/dsl/oval.rb +0 -88
  119. data/spec/shoes/shared_examples/dsl/pattern.rb +0 -34
  120. data/spec/shoes/shared_examples/dsl/progress.rb +0 -7
  121. data/spec/shoes/shared_examples/dsl/rect.rb +0 -92
  122. data/spec/shoes/shared_examples/dsl/rgb.rb +0 -28
  123. data/spec/shoes/shared_examples/dsl/shape.rb +0 -61
  124. data/spec/shoes/shared_examples/dsl/star.rb +0 -110
  125. data/spec/shoes/shared_examples/dsl/stroke.rb +0 -30
  126. data/spec/shoes/shared_examples/dsl/strokewidth.rb +0 -19
  127. data/spec/shoes/shared_examples/dsl/style.rb +0 -32
  128. data/spec/shoes/shared_examples/dsl/text_elements.rb +0 -84
  129. data/spec/shoes/shared_examples/dsl/video.rb +0 -5
  130. data/spec/shoes/shared_examples/dsl_app_context.rb +0 -11
  131. data/spec/shoes/shared_examples/hover.rb +0 -78
  132. data/spec/shoes/shared_examples/parent.rb +0 -6
  133. data/spec/shoes/shared_examples/scroll.rb +0 -41
  134. data/spec/shoes/shared_examples/shared_element_method.rb +0 -60
  135. data/spec/shoes/shared_examples/slot.rb +0 -441
  136. data/spec/shoes/shared_examples/state.rb +0 -26
  137. data/spec/shoes/shared_examples/style.rb +0 -77
  138. data/spec/shoes/slot_spec.rb +0 -176
  139. data/spec/shoes/sound_spec.rb +0 -16
  140. data/spec/shoes/span_spec.rb +0 -112
  141. data/spec/shoes/spec_helper.rb +0 -24
  142. data/spec/shoes/stack_spec.rb +0 -79
  143. data/spec/shoes/star_spec.rb +0 -49
  144. data/spec/shoes/text_block_dimensions_spec.rb +0 -77
  145. data/spec/shoes/text_block_spec.rb +0 -314
  146. data/spec/shoes/text_spec.rb +0 -22
  147. data/spec/shoes/ui/picker_spec.rb +0 -69
  148. data/spec/shoes/url_spec.rb +0 -67
  149. data/spec/shoes/widget_spec.rb +0 -78
  150. data/spec/shoes_spec.rb +0 -41
  151. data/spec/spec_helper.rb +0 -27
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples_for "basic star" do
4
- it "retains app" do
5
- expect(subject.app).to eq(app)
6
- end
7
-
8
- it "creates gui object" do
9
- expect(subject.gui).not_to be_nil
10
- end
11
- end
12
-
13
- describe Shoes::Star do
14
- include_context "dsl app"
15
-
16
- let(:left) { 44 }
17
- let(:top) { 66 }
18
- let(:width) { 100 }
19
- let(:height) { 100 }
20
-
21
- subject { Shoes::Star.new(app, parent, left, top, 5, 50, 30) }
22
-
23
- it_behaves_like "basic star"
24
- it_behaves_like "object with style" do
25
- let(:subject_without_style) { Shoes::Star.new(app, parent, left, top, 5, 50, 30) }
26
- let(:subject_with_style) { Shoes::Star.new(app, parent, left, top, 5, 50, 30, arg_styles) }
27
- end
28
-
29
- it_behaves_like "object with dimensions"
30
- it_behaves_like "movable object"
31
- it_behaves_like 'object with parent'
32
- it_behaves_like "object with hover"
33
-
34
- describe "in_bounds?" do
35
- before do
36
- # Gotta pretend like we've been positioned
37
- subject.x_dimension.absolute_start = subject.left
38
- subject.y_dimension.absolute_start = subject.top
39
- end
40
-
41
- it "in bounds" do
42
- expect(subject.in_bounds?(50, 50)).to eq(true)
43
- end
44
-
45
- it "out of bounds" do
46
- expect(subject.in_bounds?(200, 200)).to eq(false)
47
- end
48
- end
49
- end
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoes::TextBlockDimensions do
4
- let(:left) { 0 }
5
- let(:top) { 10 }
6
- let(:width) { 5 }
7
- let(:height) { 10 }
8
-
9
- let(:old_dimension) { Shoes::Dimensions.new(nil, left, top, width, height) }
10
- subject { Shoes::TextBlockDimensions.new(nil, left, top, width, height) }
11
-
12
- before(:each) do
13
- old_dimension.absolute_left = subject.absolute_left = 0
14
- old_dimension.absolute_top = subject.absolute_top = 0
15
- end
16
-
17
- describe "positions" do
18
- it "inherits from base" do
19
- expect(subject.absolute_right).to eq(old_dimension.absolute_right)
20
- expect(subject.absolute_bottom).to eq(old_dimension.absolute_bottom)
21
- end
22
-
23
- it "overrides absolute right" do
24
- subject.absolute_right = 200
25
- expect(subject.absolute_right).to eq(200)
26
- end
27
-
28
- it "overrides absolute bottom" do
29
- subject.absolute_bottom = 200
30
- expect(subject.absolute_bottom).to eq(200)
31
- end
32
- end
33
-
34
- describe "calculated sizes" do
35
- it "inherits from base" do
36
- expect(subject.width).to eq(5)
37
- expect(subject.height).to eq(10)
38
- end
39
-
40
- it "override with calculated width" do
41
- subject.width = nil
42
- subject.calculated_width = 200
43
- expect(subject.width).to eq(200)
44
- end
45
-
46
- it "override with calculated height" do
47
- subject.height = nil
48
- subject.calculated_height = 200
49
- expect(subject.height).to eq(200)
50
- end
51
- end
52
-
53
- describe "containing width" do
54
- it "uses immediate width if it can" do
55
- expect(subject.containing_width).to eq(5)
56
- end
57
-
58
- it "applies margins" do
59
- subject.margin = 1
60
- expect(subject.containing_width).to eq(3)
61
- end
62
-
63
- describe "with parent" do
64
- let(:parent) do
65
- double('parent', element_width: 100,
66
- x_dimension: double("x"),
67
- y_dimension: double("y"))
68
- end
69
-
70
- subject { Shoes::TextBlockDimensions.new(parent, left, top, nil, height) }
71
-
72
- it "delegates to parent if no width of its own" do
73
- expect(subject.containing_width).to eq(100)
74
- end
75
- end
76
- end
77
- end
@@ -1,314 +0,0 @@
1
- require 'spec_helper'
2
- require 'shoes/helpers/sample17_helper'
3
-
4
- describe Shoes::TextBlock do
5
- include_context "dsl app"
6
-
7
- let(:text_link) { Shoes::Link.new(app, ['Hello']) }
8
- let(:text) { [text_link, ", world!"] }
9
- subject(:text_block) { Shoes::Para.new(app, parent, text, app: app) }
10
-
11
- it_behaves_like "object with style" do
12
- let(:subject_without_style) { Shoes::Para.new(app, parent, text) }
13
- let(:subject_with_style) { Shoes::Para.new(app, parent, text, arg_styles) }
14
- end
15
-
16
- it_behaves_like "object with hover"
17
-
18
- describe "initialize" do
19
- it "creates gui object" do
20
- expect(text_block.gui).not_to be_nil
21
- end
22
- end
23
-
24
- describe "text" do
25
- context "with an array of [Shoes::Link, String]" do
26
- it "sets text" do
27
- expect(text_block.text).to eq "Hello, world!"
28
- end
29
-
30
- it "changes the text" do
31
- text_block.text = "Goodbye Cruel World"
32
- expect(text_block.text).to eq "Goodbye Cruel World"
33
- end
34
- end
35
-
36
- context "with a single string" do
37
- let(:text) { "Hello, world!" }
38
-
39
- it "sets text" do
40
- expect(text_block.text).to eq "Hello, world!"
41
- end
42
-
43
- it "changes the text" do
44
- text_block.text = "Goodbye Cruel World"
45
- expect(text_block.text).to eq "Goodbye Cruel World"
46
- end
47
- end
48
- end
49
-
50
- describe "#takes_up_space?" do
51
- it "does with default alignment" do
52
- expect(text_block.takes_up_space?).to eq(true)
53
- end
54
-
55
- it "does when left aligned" do
56
- text_block.align = "left"
57
- expect(text_block.takes_up_space?).to eq(true)
58
- end
59
-
60
- it "doesn't when right aligned" do
61
- text_block.align = "right"
62
- expect(text_block.takes_up_space?).to eq(false)
63
- end
64
- end
65
-
66
- describe "#to_s" do
67
- it "is the same as #text" do
68
- text = text_block.text
69
- expect(text_block.to_s).to eq(text)
70
- end
71
- end
72
-
73
- describe "#replace" do
74
- it "replaces text" do
75
- text_block.replace "Goodbye Cruel World"
76
- expect(text_block.text).to eq("Goodbye Cruel World")
77
- end
78
-
79
- it "allows two arguments" do
80
- text_block.replace "Goodbye Cruel World, ", text_link
81
- expect(text_block.text).to eq("Goodbye Cruel World, Hello")
82
- end
83
-
84
- it "updates contents" do
85
- text_block.replace("Later Gator")
86
- expect(text_block.contents).to eq(["Later Gator"])
87
- end
88
-
89
- it "updates text styles" do
90
- text_block.replace "Later Gator"
91
- expect(text_block.text_styles).to be_empty
92
- end
93
-
94
- it "updates styles from options hash" do
95
- text_block.replace "Later Gator", stroke: Shoes::COLORS[:aquamarine]
96
- expect(text_block.stroke).to eq(Shoes::COLORS[:aquamarine])
97
- end
98
-
99
- it "updates font from options hash" do
100
- text_block.replace "Later Gator", font: 'Monospace 18px'
101
- expect(text_block.font).to eq('Monospace')
102
- expect(text_block.size).to eq(18)
103
- end
104
- end
105
-
106
- describe "#contents" do
107
- it "returns text elements" do
108
- expect(text_block.contents).to eql([text_link, ", world!"])
109
- end
110
- end
111
-
112
- describe "font" do
113
- let(:text_block) { Shoes::Para.new(app, parent, ["Hello, world!"], style) }
114
-
115
- context "with defaults" do
116
- let(:style) { Hash.new }
117
-
118
- it "sets the default font to Arial" do
119
- expect(text_block.font).to eq "Arial"
120
- end
121
- end
122
-
123
- context "with a font family string" do
124
- let(:style) { { font: "Helvetica" } }
125
-
126
- it "sets the font family" do
127
- expect(text_block.font).to eq "Helvetica"
128
- end
129
- end
130
-
131
- context "with a font family string and size with 'px'" do
132
- let(:style) { { font: "Helvetica 33px" } }
133
-
134
- it "sets the font family" do
135
- expect(text_block.font).to eq "Helvetica"
136
- end
137
-
138
- it "sets the font size" do
139
- expect(text_block.size).to eq 33
140
- end
141
- end
142
-
143
- context "with a font family string and size with ' px'" do
144
- let(:style) { { font: "Helvetica 33 px" } }
145
-
146
- it "sets the font family" do
147
- expect(text_block.font).to eq "Helvetica"
148
- end
149
-
150
- it "sets the font size" do
151
- expect(text_block.size).to eq 33
152
- end
153
- end
154
-
155
- context "with a quoted font family string and size with 'px'" do
156
- let(:style) { { font: '"Comic Sans" 13px' } }
157
-
158
- it "sets the font family" do
159
- expect(text_block.font).to eq "Comic Sans"
160
- end
161
-
162
- it "sets the size" do
163
- expect(text_block.size).to eq 13
164
- end
165
- end
166
- end
167
-
168
- describe "stroke" do
169
- it "should accept a hex code" do
170
- s = Shoes::Para.new(app, parent, ["Hello, world!"], stroke: "#fda", app: app)
171
- color = s.style[:stroke]
172
- expect(color.red).to eql 255
173
- expect(color.green).to eql 221
174
- expect(color.blue).to eql 170
175
- end
176
- end
177
-
178
- describe "width" do
179
- before(:each) do
180
- allow(parent).to receive(:element_width) { 300 }
181
- allow(parent).to receive(:absolute_left) { 0 }
182
- end
183
-
184
- context "when not explicitly set" do
185
- subject(:text_block) { Shoes::Para.new(app, parent, ["text"]) }
186
-
187
- it "delegates to calculated width" do
188
- subject.calculated_width = 240
189
- expect(subject.width).to eql 240
190
- end
191
-
192
- it "delegates to calculated height" do
193
- subject.calculated_height = 240
194
- expect(subject.height).to eql 240
195
- end
196
-
197
- it "bases desired width off parent" do
198
- subject.absolute_left = 20
199
- expect(subject.desired_width).to eql 280
200
- end
201
-
202
- it "can base desired off explicit containing width" do
203
- subject.absolute_left = 20
204
- expect(subject.desired_width(1000)).to eql(980)
205
- end
206
-
207
- it "factors margins into desired width" do
208
- subject.absolute_left = 0
209
- subject.margin = 10
210
- expect(subject.desired_width(1000)).to eql(980)
211
- end
212
- end
213
-
214
- context "when explicitly set" do
215
- subject(:text_block) { Shoes::Para.new(app, parent, ["text"], width: 120) }
216
-
217
- it "gets returned" do
218
- expect(subject.width).to eql 120
219
- end
220
-
221
- it "is used for desired width" do
222
- expect(subject.desired_width).to eql 120
223
- end
224
-
225
- it "factors in if parent space is too small" do
226
- subject.absolute_left = parent.element_width - 100
227
- expect(subject.desired_width).to eql(100)
228
- end
229
- end
230
- end
231
-
232
- context "cursor management" do
233
- let(:textcursor) { double("textcursor") }
234
-
235
- before(:each) do
236
- allow(app).to receive(:textcursor) { textcursor }
237
- end
238
-
239
- it "creates a textcursor" do
240
- expect(subject.textcursor).to eq(textcursor)
241
- expect(app).to have_received(:textcursor)
242
- end
243
-
244
- it "only creates textcursor" do
245
- original = subject.textcursor
246
- allow(app).to receive(:textcursor) { double("new cursor") }
247
-
248
- expect(subject.textcursor).to eq(original)
249
- expect(app).to have_received(:textcursor).once
250
- end
251
- end
252
-
253
- context "with empty subelements" do
254
- let!(:link) { actual_app.link('') }
255
- let!(:span) { actual_app.span('') }
256
- let!(:para) { actual_app.para(link, span) }
257
- let(:actual_app) { app.app }
258
-
259
- it "properly ignores empty element lengths in text_styles" do
260
- text_styles = { 0...0 => [link, span] }
261
-
262
- expect(para.text_styles).to eq(text_styles)
263
- end
264
- end
265
-
266
- # Emulates samples/sample17.rb
267
- #
268
- # Shoes.app width: 240, height: 95 do
269
- # para 'Testing, test, test. ',
270
- # strong('Breadsticks. '),
271
- # em('Breadsticks. '),
272
- # code('Breadsticks. '),
273
- # bg(fg(strong(ins('EVEN BETTER.')), white), rgb(255, 0, 192)),
274
- # sub('fine!')
275
- # end
276
- #
277
- context "with nested text fragments" do
278
- let(:helper) { Sample17Helper.new(app) }
279
- let!(:para) { helper.create_para }
280
-
281
- it "has full text of fragments" do
282
- expect(para.text).to eq("Testing, test, test. Breadsticks. Breadsticks. Breadsticks. EVEN BETTER.fine!")
283
- end
284
-
285
- it "has fragment styles" do
286
- text_styles = {
287
- 21..33 => [helper.strong_breadsticks],
288
- 34..46 => [helper.em],
289
- 47..59 => [helper.code],
290
- 60..71 => [helper.bg, helper.fg, helper.strong, helper.ins],
291
- 72..76 => [helper.sub]
292
- }
293
- expect(para.text_styles).to eq(text_styles)
294
- end
295
-
296
- it 'sets the parent_text of the non nested texts to the para' do
297
- expect(helper.strong_breadsticks.parent).to eq para
298
- end
299
-
300
- it 'sets the parent_text of nested fragments correctly' do
301
- expect(helper.ins.parent).to eq helper.strong
302
- end
303
-
304
- it 'lets the nested text fragements know what their text block is' do
305
- expect(helper.ins.text_block).to eq para
306
- end
307
- end
308
-
309
- describe "links" do
310
- it "finds em" do
311
- expect(text_block.links).to eq([text_link])
312
- end
313
- end
314
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shoes::Text do
4
- include_context "dsl app"
5
-
6
- let(:link) { Shoes::Link.new(app, ['link']) }
7
-
8
- it "finds no links" do
9
- text = Shoes::Text.new(['text'])
10
- expect(text.links).to be_empty
11
- end
12
-
13
- it "finds a link" do
14
- text = Shoes::Text.new(['text', link])
15
- expect(text.links).to eq([link])
16
- end
17
-
18
- it "finds multiple" do
19
- text = Shoes::Text.new([Shoes::Text.new(['yo', link]), link])
20
- expect(text.links).to eq([link, link])
21
- end
22
- end