Skip to content

Commit

Permalink
More CWM test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
mvidner committed Oct 17, 2018
1 parent 8073cc0 commit 7e09f1b
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 19 deletions.
17 changes: 12 additions & 5 deletions library/cwm/src/modules/CWM.rb
Expand Up @@ -326,7 +326,7 @@ def initWidgets(widgets)
)
end
# set initial values
@processed_widget = deep_copy(w)
self.processed_widget = deep_copy(w)
toEval = Convert.convert(
Ops.get(w, "init"),
from: "any",
Expand All @@ -348,7 +348,7 @@ def handleWidgets(widgets, event_descr)
ret = nil
Builtins.foreach(widgets) do |w|
if ret.nil?
@processed_widget = deep_copy(w)
self.processed_widget = deep_copy(w)
events = Ops.get_list(w, "handle_events", [])
toEval = Convert.convert(
Ops.get(w, "handle"),
Expand All @@ -374,7 +374,7 @@ def saveWidgets(widgets, event)
widgets = deep_copy(widgets)
event = deep_copy(event)
Builtins.foreach(widgets) do |w|
@processed_widget = deep_copy(w)
self.processed_widget = deep_copy(w)
toEval = Convert.convert(
Ops.get(w, "store"),
from: "any",
Expand All @@ -392,7 +392,7 @@ def saveWidgets(widgets, event)
def cleanupWidgets(widgets)
widgets = deep_copy(widgets)
Builtins.foreach(widgets) do |w|
@processed_widget = deep_copy(w)
self.processed_widget = deep_copy(w)
toEval = Convert.convert(
Ops.get(w, "cleanup"),
from: "any",
Expand Down Expand Up @@ -630,7 +630,7 @@ def prepareWidget(widget_descr)
def validateWidget(widget, event, key)
widget = deep_copy(widget)
event = deep_copy(event)
@processed_widget = deep_copy(widget)
self.processed_widget = deep_copy(widget)
failed = false
val_type = Ops.get_symbol(widget, "validate_type")
if val_type == :function || val_type == :function_no_popup
Expand Down Expand Up @@ -1107,6 +1107,13 @@ def widgets_contents(contents)

res
end

private

# such an accessor enables testing
def processed_widget=(w)
@processed_widget = w
end
end

CWM = CWMClass.new
Expand Down
93 changes: 79 additions & 14 deletions library/cwm/test/cwm_test.rb
Expand Up @@ -81,6 +81,10 @@ def generic_save(_key, _event)
method(:w2_validate),
"boolean (string, map)"
)
},
"w3" => {
"widget" => :custom,
"custom_widget" => HBox("w2", "w2")
}
}
end
Expand Down Expand Up @@ -134,10 +138,20 @@ def generic_save(_key, _event)
end

# used via GetProcessedWidget by yast2-slp-server and yast2
xit "sets @processed_widget" do
it "sets @processed_widget" do
allow(self).to receive(:w1_init)
allow(self).to receive(:generic_init)
expect(subject).to receive(:processed_widget=).twice
subject.initWidgets(run_widgets)
end

xit "sets ValidChars" do
it "sets ValidChars" do
allow(self).to receive(:w1_init)
allow(self).to receive(:generic_init)
widgets = deep_copy(run_widgets)
widgets[0]["valid_chars"] = "ABC"
expect(Yast::UI).to receive(:ChangeWidget).with(Id("w1"), :ValidChars, "ABC")
subject.initWidgets(widgets)
end
end

Expand All @@ -150,7 +164,11 @@ def generic_save(_key, _event)
end

# used via GetProcessedWidget by yast2-slp-server and yast2
xit "sets @processed_widget" do
it "sets @processed_widget" do
allow(self).to receive(:generic_save)
allow(self).to receive(:w2_store)
expect(subject).to receive(:processed_widget=).twice
subject.saveWidgets(run_widgets, "ID" => :event)
end
end

Expand All @@ -168,10 +186,19 @@ def generic_save(_key, _event)
expect(subject.handleWidgets(run_widgets, "ID" => :event)).to eq(:foo)
end

xit "sets @processed_widget" do
it "sets @processed_widget" do
allow(self).to receive(:w1_handle).and_return(nil)
allow(self).to receive(:w2_handle).and_return(nil)
expect(subject).to receive(:processed_widget=).twice
subject.handleWidgets(run_widgets, "ID" => :event)
end

xit "filters the events if 'handle_events' is specified" do
it "filters the events if 'handle_events' is specified" do
expect(self).to_not receive(:w1_handle)
allow(self).to receive(:w2_handle)
widgets = deep_copy(run_widgets)
widgets[0]["handle_events"] = [:special_event]
subject.handleWidgets(widgets, "ID" => :event)
end
end

Expand All @@ -182,14 +209,26 @@ def generic_save(_key, _event)
expect(subject.validateWidgets(run_widgets, "ID" => :event)).to eq(true)
end

it "breaks the loop if a handler returns false" do
expect(self).to receive(:w1_validate).with("w1", "ID" => :event).and_return(false)
expect(self).to_not receive(:w2_validate)
expect(subject.validateWidgets(run_widgets, "ID" => :event)).to eq(false)
end

# SetValidationFailedHandler
xit "calls validation_failed_handler if..." do
context "if a handler returns false" do
before do
expect(self).to receive(:w1_validate).with("w1", "ID" => :event).and_return(false)
end

it "breaks the loop if a handler returns false" do
expect(self).to_not receive(:w2_validate)
expect(subject.validateWidgets(run_widgets, "ID" => :event)).to eq(false)
end

# SetValidationFailedHandler
it "calls validation_failed_handler if it has been set" do
called = false
handler = -> { called = true }
subject.SetValidationFailedHandler(handler)

subject.validateWidgets(run_widgets, "ID" => :event)
# we cannot set an expectation on `handler` because a copy is made
expect(called).to eq(true)
end
end
end

Expand All @@ -205,6 +244,24 @@ def generic_save(_key, _event)
expect(subject).to receive(:ProcessTerm).with(test_stringterm, Hash)
subject.PrepareDialog(test_stringterm, created_widgets)
end

# Test that *block* does not modify its argument,
# by storing a deep_copy of it and expecting equality afterwards
# @param value [Object]
# @yieldparam a copy of *value*
def expect_not_modified(value, &block)
copy = deep_copy(value)
block.call(copy)
expect(copy).to eq(value)
end

it "does not modify its arguments" do
expect_not_modified(test_stringterm) do |contents|
expect_not_modified(created_widgets) do |widgets|
subject.PrepareDialog(contents, widgets)
end
end
end
end

# tested via its adapter PrepareDialog
Expand All @@ -216,7 +273,15 @@ def generic_save(_key, _event)
expect(w1).to eq(CheckBox(Id("w1"), Opt(:notify, :immediate), "Check&Box"))
end

xit "recurses into container widgets" do
it "recurses into container widgets" do
created_widgets = subject.CreateWidgets(["w2", "w3"], test_widgets)
ret = subject.PrepareDialog(VBox("w2", "w3"), created_widgets)
w3 = ret.params[1]
expected = HBox(
InputField(Id("w2"), Opt(:hstretch), "Text&Entry"),
InputField(Id("w2"), Opt(:hstretch), "Text&Entry")
)
expect(w3).to eq(expected)
end

it "leaves Frame titles alone" do
Expand Down

0 comments on commit 7e09f1b

Please sign in to comment.