From 70582bb1bad39a5a2bac8189e32278e1b9e3c92a Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Mon, 20 Mar 2017 13:53:19 +0100 Subject: [PATCH 1/4] Shared RSpec examples for CWM widgets to enable stupid but easy test coverage --- library/cwm/src/lib/cwm/rspec.rb | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 library/cwm/src/lib/cwm/rspec.rb diff --git a/library/cwm/src/lib/cwm/rspec.rb b/library/cwm/src/lib/cwm/rspec.rb new file mode 100644 index 000000000..5d205934a --- /dev/null +++ b/library/cwm/src/lib/cwm/rspec.rb @@ -0,0 +1,76 @@ +# in your specs: +# require "cwm/rspec" + +RSpec.shared_examples "CWM::AbstractWidget" do + context "these methods are only tested if they exist" do + describe "#label" do + it "produces a String" do + next unless subject.respond_to?(:label) + expect(subject.label).to be_a String + end + end + + describe "#help" do + it "produces a String" do + next unless subject.respond_to?(:help) + expect(subject.help).to be_a String + end + end + + describe "#opt" do + it "produces Symbols" do + next unless subject.respond_to?(:opt) + expect(subject.opt).to be_an Enumerable + subject.opt.each do |o| + expect(o).to be_a Symbol + end + end + end + + describe "#handle" do + it "produces a Symbol or nil" do + next unless subject.respond_to?(:handle) + m = subject.method(:handle) + args = m.arity == 0 ? [] : [:dummy_event] + expect(subject.handle(* args)).to be_a(Symbol).or be_nil + end + end + + describe "#validate" do + it "produces a Boolean (or nil)" do + next unless subject.respond_to?(:validate) + expect(subject.validate).to be(true).or be(false).or be_nil + end + end + end +end + +RSpec.shared_examples "CWM::CustomWidget" do + include_examples "CWM::AbstractWidget" + describe "#contents" do + it "produces a Term" do + expect(subject.contents).to be_a Yast::Term + end + end +end + +RSpec.shared_examples "CWM::Tab" do + include_examples "CWM::CustomWidget" +end + +RSpec.shared_examples "CWM::ItemsSelection" do + describe "#items" do + it "produces an array of pairs of strings" do + expect(subject.items).to be_an Enumerable + subject.items.each do |i| + expect(i[0]).to be_a String + expect(i[1]).to be_a String + end + end + end +end + +RSpec.shared_examples "CWM::ComboBox" do + include_examples "CWM::AbstractWidget" + include_examples "CWM::ItemsSelection" +end From 754feb7ca15f05d0376fa23841d8afd0b80b3068 Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Tue, 16 May 2017 13:49:37 +0200 Subject: [PATCH 2/4] Doc: returning widget objects, not widget terms --- library/cwm/src/lib/cwm/custom_widget.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/library/cwm/src/lib/cwm/custom_widget.rb b/library/cwm/src/lib/cwm/custom_widget.rb index 71539ba16..090aca2ac 100644 --- a/library/cwm/src/lib/cwm/custom_widget.rb +++ b/library/cwm/src/lib/cwm/custom_widget.rb @@ -45,6 +45,7 @@ def cwm_definition end # Returns all nested widgets used in contents + # @return [Array] def nested_widgets Yast.import "CWM" From 0f67b1bb0d7d595e3735a14441f4f08a2bce3101 Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Tue, 16 May 2017 13:50:20 +0200 Subject: [PATCH 3/4] Use the shared examples in the preexisting tests this also serves to test the cwm/rspec testing library and have it contribute to testing coverage stats --- library/cwm/test/abstract_widget_test.rb | 3 ++ library/cwm/test/custom_widget_test.rb | 37 ++++++++++++++---------- library/cwm/test/widgets_test.rb | 3 ++ 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/library/cwm/test/abstract_widget_test.rb b/library/cwm/test/abstract_widget_test.rb index b12b8fbf4..b8cc9350f 100755 --- a/library/cwm/test/abstract_widget_test.rb +++ b/library/cwm/test/abstract_widget_test.rb @@ -3,8 +3,11 @@ require_relative "test_helper" require "cwm/abstract_widget" +require "cwm/rspec" describe CWM::AbstractWidget do + include_examples "CWM::AbstractWidget" + describe "#widget_id" do class T1 < CWM::AbstractWidget def initialize(id: nil) diff --git a/library/cwm/test/custom_widget_test.rb b/library/cwm/test/custom_widget_test.rb index 4986931af..48066f7ac 100755 --- a/library/cwm/test/custom_widget_test.rb +++ b/library/cwm/test/custom_widget_test.rb @@ -1,27 +1,34 @@ require_relative "test_helper" require "cwm/custom_widget" +require "cwm/rspec" describe CWM::CustomWidget do - describe "#description" do - context "handle_all_events is false" do - class CustomTestWidget < CWM::CustomWidget - def initialize - self.handle_all_events = false - self.widget_id = "test_widget" - end + class CustomTestWidget < CWM::CustomWidget + def contents + HBox( + InputField(Id(:first), "test"), + PushButton(Id("second"), "Discover 42") + ) + end + end + subject { CustomTestWidget.new } - def contents - HBox( - InputField(Id(:first), "test"), - PushButton(Id("second"), "Discover 42") - ) - end + include_examples "CWM::CustomWidget" + + context "handle_all_events is false" do + class IsolationistTestWidget < CustomTestWidget + def initialize + self.handle_all_events = false + self.widget_id = "test_widget" end - subject { CustomTestWidget.new } + end + describe "#cwm_definition" do + subject { IsolationistTestWidget.new } it "adds to description to handle only ids in contents and widget_id" do - expect(subject.cwm_definition["handle_events"]).to eq [:first, "second", "test_widget"] + expect(subject.cwm_definition["handle_events"]) + .to eq [:first, "second", "test_widget"] end end end diff --git a/library/cwm/test/widgets_test.rb b/library/cwm/test/widgets_test.rb index 37890304a..e88d0e434 100755 --- a/library/cwm/test/widgets_test.rb +++ b/library/cwm/test/widgets_test.rb @@ -3,6 +3,7 @@ require_relative "test_helper" require "cwm/widget" +require "cwm/rspec" describe CWM::RadioButtons do @@ -87,6 +88,8 @@ def cleanup end end + include_examples "CWM::CustomWidget" + describe ".new" do it "has widget_id as passed" do subject = described_class.new(id: "test") From 73f7bb5aaed596eb6edf4e2510a8061edbd0a3c3 Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Tue, 16 May 2017 14:06:06 +0200 Subject: [PATCH 4/4] version + changelog --- package/yast2.changes | 7 +++++++ package/yast2.spec | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package/yast2.changes b/package/yast2.changes index a1c688001..efe57c1ae 100644 --- a/package/yast2.changes +++ b/package/yast2.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue May 16 12:04:40 UTC 2017 - mvidner@suse.com + +- Added cwm/rspec with shared_examples for CWM::AbstractWidget + and its children (boo#1039302) +- 3.2.29 + ------------------------------------------------------------------- Wed Apr 19 14:16:33 UTC 2017 - lslezak@suse.cz diff --git a/package/yast2.spec b/package/yast2.spec index 411e6c681..a796e9e6d 100644 --- a/package/yast2.spec +++ b/package/yast2.spec @@ -17,7 +17,7 @@ Name: yast2 -Version: 3.2.28 +Version: 3.2.29 Release: 0 Summary: YaST2 - Main Package License: GPL-2.0