From 8bd814fc1a4b9e97d0a1f7d9ed9aa9613af30b5c Mon Sep 17 00:00:00 2001 From: Andy Meneely Date: Thu, 14 Aug 2014 14:35:46 -0400 Subject: [PATCH] Some regression tests on loading layouts --- lib/squib/deck.rb | 4 ++ spec/data/easy-circular-extends.yml | 6 ++ spec/data/hard-circular-extends.yml | 9 +++ spec/data/multi-level-extends.yml | 10 +++ spec/data/no-extends.yml | 5 ++ spec/data/pre-extends.yml | 7 +++ spec/data/self-circular-extends.yml | 3 + spec/data/single-extends.yml | 7 +++ spec/data/single-level-multi-extends.yml | 12 ++++ spec/deck_spec.rb | 78 +++++++++++++++++++++++- spec/spec_helper.rb | 4 ++ 11 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 spec/data/easy-circular-extends.yml create mode 100644 spec/data/hard-circular-extends.yml create mode 100644 spec/data/multi-level-extends.yml create mode 100644 spec/data/no-extends.yml create mode 100644 spec/data/pre-extends.yml create mode 100644 spec/data/self-circular-extends.yml create mode 100644 spec/data/single-extends.yml create mode 100644 spec/data/single-level-multi-extends.yml diff --git a/lib/squib/deck.rb b/lib/squib/deck.rb index d3009e6..3d5b806 100644 --- a/lib/squib/deck.rb +++ b/lib/squib/deck.rb @@ -29,6 +29,10 @@ module Squib # @api private attr_reader :text_hint + # :nodoc: + # @api private + attr_reader :layout, :config + # Squib's constructor that sets the immutable properties. # # This is the starting point for Squib. In providing a block to the constructor, you have access to all of Deck's instance methods. diff --git a/spec/data/easy-circular-extends.yml b/spec/data/easy-circular-extends.yml new file mode 100644 index 0000000..ccfc559 --- /dev/null +++ b/spec/data/easy-circular-extends.yml @@ -0,0 +1,6 @@ +a: + extends: b + x: 50 +b: + extends: a + x: 150 diff --git a/spec/data/hard-circular-extends.yml b/spec/data/hard-circular-extends.yml new file mode 100644 index 0000000..6ef16fc --- /dev/null +++ b/spec/data/hard-circular-extends.yml @@ -0,0 +1,9 @@ +a: + extends: c + x: 50 +b: + extends: a + x: 150 +c: + extends: b + y: 250 \ No newline at end of file diff --git a/spec/data/multi-level-extends.yml b/spec/data/multi-level-extends.yml new file mode 100644 index 0000000..ef5996d --- /dev/null +++ b/spec/data/multi-level-extends.yml @@ -0,0 +1,10 @@ +frame: + x: 38 + y: 38 +title: + extends: frame + y: 50 + width: 100 +subtitle: + extends: subtitle + y: 150 \ No newline at end of file diff --git a/spec/data/no-extends.yml b/spec/data/no-extends.yml new file mode 100644 index 0000000..3881f3e --- /dev/null +++ b/spec/data/no-extends.yml @@ -0,0 +1,5 @@ +frame: + x: 38 + valign: !ruby/symbol middle + str: "blah" + font: Mr. Font diff --git a/spec/data/pre-extends.yml b/spec/data/pre-extends.yml new file mode 100644 index 0000000..753cd5a --- /dev/null +++ b/spec/data/pre-extends.yml @@ -0,0 +1,7 @@ +title: + extends: frame + y: 50 + width: 100 +frame: + x: 38 + y: 38 diff --git a/spec/data/self-circular-extends.yml b/spec/data/self-circular-extends.yml new file mode 100644 index 0000000..f988d3b --- /dev/null +++ b/spec/data/self-circular-extends.yml @@ -0,0 +1,3 @@ +a: + extends: a + x: 50 diff --git a/spec/data/single-extends.yml b/spec/data/single-extends.yml new file mode 100644 index 0000000..2788822 --- /dev/null +++ b/spec/data/single-extends.yml @@ -0,0 +1,7 @@ +frame: + x: 38 + y: 38 +title: + extends: frame + y: 50 + width: 100 diff --git a/spec/data/single-level-multi-extends.yml b/spec/data/single-level-multi-extends.yml new file mode 100644 index 0000000..6cbd349 --- /dev/null +++ b/spec/data/single-level-multi-extends.yml @@ -0,0 +1,12 @@ +frame: + x: 38 + y: 38 +title: + extends: frame + y: 50 + width: 100 +title2: + extends: frame + x: 75 + y: 150 + width: 150 \ No newline at end of file diff --git a/spec/deck_spec.rb b/spec/deck_spec.rb index 24bf1ea..fee9644 100644 --- a/spec/deck_spec.rb +++ b/spec/deck_spec.rb @@ -45,5 +45,81 @@ describe Squib::Deck do end end -end#describe + context "#load_layout" do + it "loads a normal layout with no extends" do + d = Squib::Deck.new(layout: test_file('no-extends.yml')) + expect(d.layout).to \ + eq({'frame' => { + 'x' => 38, + 'valign' => :middle, + 'str' => "blah", + 'font' => "Mr. Font", + } + } + ) + end + + it "loads with a single extends" do + d = Squib::Deck.new(layout: test_file('single-extends.yml')) + expect(d.layout).to \ + eq({'frame' => { + 'x' => 38, + 'y' => 38, + }, + 'title' => { + 'extends' => 'frame', + 'x' => 38, + 'y' => 50, + 'width' => 100, + } + } + ) + end + + it "applies the extends regardless of order" do + d = Squib::Deck.new(layout: test_file('pre-extends.yml')) + expect(d.layout).to \ + eq({'frame' => { + 'x' => 38, + 'y' => 38, + }, + 'title' => { + 'extends' => 'frame', + 'x' => 38, + 'y' => 50, + 'width' => 100, + } + } + ) + end + + it "applies the single-level extends multiple timess" do + d = Squib::Deck.new(layout: test_file('single-level-multi-extends.yml')) + expect(d.layout).to \ + eq({'frame' => { + 'x' => 38, + 'y' => 38, + }, + 'title' => { + 'extends' => 'frame', + 'x' => 38, + 'y' => 50, + 'width' => 100, + }, + 'title2' => { + 'extends' => 'frame', + 'x' => 75, + 'y' => 150, + 'width' => 150, + }, + } + ) + end + + + + + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 82e0839..cfe1012 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,3 +6,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ Coveralls::SimpleCov::Formatter ] SimpleCov.start + +def test_file(str) + "#{File.expand_path(File.dirname(__FILE__))}/data/#{str}" +end \ No newline at end of file