From 70582bb1bad39a5a2bac8189e32278e1b9e3c92a Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Mon, 20 Mar 2017 13:53:19 +0100 Subject: [PATCH] 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