Skip to content

Commit

Permalink
tests for new ReplacePoint widget and fix found issues
Browse files Browse the repository at this point in the history
  • Loading branch information
jreidinger committed Jan 19, 2017
1 parent 5379411 commit b4b4887
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 3 deletions.
10 changes: 7 additions & 3 deletions library/cwm/src/lib/cwm/widget.rb
Original file line number Diff line number Diff line change
Expand Up @@ -831,12 +831,16 @@ class ReplacePoint < CustomWidget
# @param widget [CWM::AbstractWidget] initial widget in placeholder
def initialize(id: :_placeholder, widget: Empty.new(:_initial_placeholder))
self.handle_all_events = true
@id = id
self.widget_id = id
@widget = widget
end

def contents
ReplacePoint(Id(@id), widget_content(@widget))
ReplacePoint(Id(widget_id), widget_content(@widget))
end

def init
@widget.init if @widget.respond_to?(:init)
end

# Replaces content with different widget. All its events are properly
Expand All @@ -846,7 +850,7 @@ def replace(widget)
log.info "replacing with new widget #{widget.inspect}"
Yast::UI.ReplaceWidget(@id, widget_content(widget))
@widget = widget
@widget.init if @widget.respond_to?(:init)
init
end

def help
Expand Down
128 changes: 128 additions & 0 deletions library/cwm/test/widgets_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -213,3 +213,131 @@ def contents
end
end
end

describe CWM::ReplacePoint do

class ReplacePointTestWidget < CWM::InputField
def label
"test"
end

def init
end

def handle
end

def help
"help"
end

def validate
false
end

def store
end

def cleanup
end
end

describe ".new" do
it "has widget_id as passed" do
subject = described_class.new(id: "test")
expect(subject.widget_id).to eq "test"
end

it "uses passed widget as initial content" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(widget).to receive(:init)
subject.init
end
end

describe "#contents" do
it "generates contents including current widget UI definition" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)

expect(subject.contents).to eq(
ReplacePoint(
Id(subject.widget_id),
InputField(Id(widget.widget_id), Opt(:hstretch), "test")
)
)
end
end

describe "#init" do
it "passes init to enclosed widget" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(widget).to receive(:init)
subject.init
end
end

describe "#replace" do
it "changes enclosed widget" do
subject = described_class.new(widget: CWM::Empty.new(:initial))
widget = ReplacePointTestWidget.new
expect(widget).to receive(:store)
subject.replace(widget)
subject.store
end
end

describe "#help" do
it "returns help of enclosed widget" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(subject.help).to eq "help"
end
end

class ComplexHandleTest < CWM::Empty
def handle(_event)
nil
end
end

describe "#handle" do
# Cannot test arity based dispatcher, because if we mock expect call of widget.handle, it is
# replaced by rspec method with -1 arity, causing wrong dispatcher functionality

it "do nothing if passed event is not widget_id and enclosed widget do not handle all events" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(widget).to_not receive(:handle)
subject.handle("ID" => "Not mine")
end
end

describe "#validate" do
it "passes validate to enclosed widget" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(subject.validate).to eq false
end
end

describe "#store" do
it "passes store to enclosed widget" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(widget).to receive(:store)
subject.store
end
end

describe "#cleanup" do
it "passes cleanup to enclosed widget" do
widget = ReplacePointTestWidget.new
subject = described_class.new(widget: widget)
expect(widget).to receive(:cleanup)
subject.cleanup
end
end
end

0 comments on commit b4b4887

Please sign in to comment.