spec/shoes/swt/text_block/painter_spec.rb in shoes-swt-4.0.0.pre3 vs spec/shoes/swt/text_block/painter_spec.rb in shoes-swt-4.0.0.pre4
- old
+ new
@@ -1,212 +1,38 @@
require 'shoes/swt/spec_helper'
describe Shoes::Swt::TextBlock::Painter do
include_context "swt app"
- let(:dsl_style) { {justify: true, leading: 10, underline: "single"} }
- let(:gui) { double("gui", dispose: nil) }
- let(:dsl) { double("dsl", app: shoes_app, gui: gui,
- text: text, cursor: nil, style: dsl_style,
- element_width: 200, element_height: 180,
- element_left: 0, element_top: 10, font: "font",
- size: 16, margin_left: 0, margin_top: 0,
- text_styles: text_styles, :hidden? => false).as_null_object
- }
-
- let(:segment) do
- allow(::Swt::Font).to receive(:new) { font }
- allow(::Swt::TextLayout).to receive(:new) { text_layout }
- allow(::Swt::TextStyle).to receive(:new) { style }
-
- Shoes::Swt::TextBlock::TextSegment.new(dsl, text, 200).position_at(0, 10)
- end
-
- let(:text_layout) { double("text layout", text: text).as_null_object }
-
+ let(:dsl) { double("dsl", app: shoes_app, gui: gui, hidden?: false) }
+ let(:gui) { double("gui", dispose: nil, segments: segment_collection) }
let(:event) { double("event").as_null_object }
- let(:style) { double(:style).as_null_object }
- let(:font) { double(:font, font_data: [font_data]).as_null_object }
- let(:font_data) { double(name: "font", height: 16.0, style: ::Swt::SWT::NORMAL) }
+ let(:segment_collection) { double("segment collection", empty?: false) }
- let(:blue) { Shoes::Color.new(0, 0, 255) }
- let(:swt_blue) { Shoes::Swt::Color.new(blue).real}
- let(:text_styles) {{}}
- let(:text) {'hello world'}
-
subject { Shoes::Swt::TextBlock::Painter.new(dsl) }
- before :each do
- allow(::Swt::TextStyle).to receive(:new) { style.as_null_object }
+ it "doesn't draw if hidden" do
+ allow(dsl).to receive(:hidden?) { true }
+ expect(segment_collection).to_not receive(:paint_control)
- # Can't stub this in during initial let because of circular reference
- # segments -> dsl -> gui -> segments...
- allow(gui).to receive_messages(segments: [segment])
- end
-
- it "draws" do
- expect(segment).to receive(:draw)
subject.paintControl(event)
end
- it "sets justify" do
- expect(text_layout).to receive(:justify=).with(dsl_style[:justify])
- subject.paintControl(event)
- end
+ it "doesn't draw no segment collection" do
+ allow(gui).to receive(:segments) { nil }
+ expect(segment_collection).to_not receive(:paint_control)
- it "sets spacing" do
- expect(text_layout).to receive(:spacing=).with(dsl_style[:leading])
subject.paintControl(event)
end
- it "sets alignment" do
- expect(text_layout).to receive(:alignment=).with(anything)
- subject.paintControl(event)
- end
+ it "doesn't draw segment collection is empty" do
+ allow(segment_collection).to receive(:empty?) { true }
+ expect(segment_collection).to_not receive(:paint_control)
- it "sets text styles" do
- expect(text_layout).to receive(:set_style).with(anything, anything, anything).at_least(1).times
subject.paintControl(event)
end
- context "rise option" do
- it "sets default rise value to nil" do
- expect(style).to receive(:rise=).with(nil)
- subject.paintControl(event)
- end
-
- it "sets correct rise value" do
- dsl_style[:rise] = 10
- expect(style).to receive(:rise=).with(10)
-
- subject.paintControl(event)
- end
- end
-
- context "underline option" do
- it "sets default underline style to none" do
- dsl_style.delete(:underline)
-
- expect(style).to receive(:underline=).with(false)
- expect(style).to receive(:underlineStyle=).with(nil)
-
- subject.paintControl(event)
- end
-
- it "sets correct underline style" do
-
- expect(style).to receive(:underline=).with(true)
- expect(style).to receive(:underlineStyle=).with(Shoes::Swt::TextStyleFactory::UNDERLINE_STYLES["single"])
-
- subject.paintControl(event)
- end
-
- it "sets underline color" do
- dsl_style[:undercolor] = blue
-
- expect(style).to receive(:underlineColor=).with(swt_blue)
-
- subject.paintControl(event)
- end
-
- it "sets default underline color to nil" do
- expect(style).to receive(:underlineColor=).with(nil)
-
- subject.paintControl(event)
- end
- end
-
- context "strikethrough option" do
- it "sets default strikethrough to none" do
- expect(style).to receive(:strikeout=).with(false)
-
- subject.paintControl(event)
- end
-
- it "sets strikethrough" do
- dsl_style[:strikethrough] = "single"
-
- expect(style).to receive(:strikeout=).with(true)
-
- subject.paintControl(event)
- end
-
- it "sets strikethrough color" do
- dsl_style[:strikecolor] = blue
-
- expect(style).to receive(:strikeoutColor=).with(swt_blue)
-
- subject.paintControl(event)
- end
-
- it "sets default strikethrough color to nil" do
- expect(style).to receive(:strikeoutColor=).with(nil)
-
- subject.paintControl(event)
- end
- end
-
- context "font styles" do
- it "sets font style to bold" do
- dsl_style[:weight] = true
- expect(::Swt::Font).to receive(:new).with(anything, anything, anything, ::Swt::SWT::BOLD)
- subject.paintControl(event)
- end
-
- it "sets font style to italic" do
- dsl_style[:emphasis] = true
- expect(::Swt::Font).to receive(:new).with(anything, anything, anything, ::Swt::SWT::ITALIC)
- subject.paintControl(event)
- end
-
- it "sets font style to both bold and italic" do
- dsl_style[:weight] = true
- dsl_style[:emphasis] = true
- expect(::Swt::Font).to receive(:new).with(anything, anything, anything, ::Swt::SWT::BOLD | ::Swt::SWT::ITALIC)
-
- subject.paintControl(event)
- end
- end
-
- context "colors" do
- let(:black) { Shoes::Swt::Color.new(Shoes::COLORS[:black]).real }
- let(:salmon) { Shoes::Swt::Color.new(Shoes::COLORS[:salmon]).real }
-
- describe "stroke" do
- it "is black by default" do
- expect(::Swt::TextStyle).to receive(:new).with(anything, black, anything)
- subject.paintControl(event)
- end
-
- it "is set with dsl_style[:stroke]" do
- dsl_style[:stroke] = Shoes::COLORS[:salmon]
- expect(::Swt::TextStyle).to receive(:new).with(anything, salmon, anything)
- subject.paintControl(event)
- end
- end
-
- describe "fill" do
- it "is nil by default" do
- expect(::Swt::TextStyle).to receive(:new).with(anything, anything, nil)
- subject.paintControl(event)
- end
-
- it "is set with dsl_style[:fill]" do
- dsl_style[:fill] = Shoes::COLORS[:salmon]
- expect(::Swt::TextStyle).to receive(:new).with(anything, anything, salmon)
- subject.paintControl(event)
- end
- end
- end
-
- describe 'text_styles' do
- # this text_styles relies a lot on the internal structure of TextBlock/Painter
- # right now, which I'm not too fond of... :)
- let(:text_styles) {[[0...text.length, [Shoes::Span.new([text], size: 50)]]]}
- it 'sets the font size to 50' do
- expect(::Swt::Font).to receive(:new).
- with(anything, anything, 50, anything)
-
- subject.paintControl event
- end
+ it "paints" do
+ expect(segment_collection).to receive(:paint_control)
+ subject.paintControl(event)
end
end