spec/args/box_spec.rb in squib-0.8.0 vs spec/args/box_spec.rb in squib-0.9.0

- old
+ new

@@ -1,127 +1,127 @@ -require 'spec_helper' -require 'squib/args/box' - -describe Squib::Args::Box do - subject(:box) { Squib::Args::Box.new } - let(:expected_defaults) { {x: [0], y: [0], width: [:deck], height: [:deck] } } - - it 'intitially has no params set' do - expect(box).not_to respond_to(:x, :y, :width, :height) - end - - it 'extracts the defaults from Box on an empty hash' do - box.load!({}) - expect(box).to have_attributes(expected_defaults) - end - - it 'extracts what is specified and fills in defaults from Box' do - box.load!(x: 4, width: 40) - expect(box).to have_attributes(x: [4], width: [40], y: [0], height: [:deck]) - end - - it 'extracts the defaults from Box on an empty hash' do - box.load!({foo: :bar}) - expect(box).to have_attributes(expected_defaults) - expect(box).not_to respond_to(:foo) - end - - context 'single expansion' do - let(:args) { {x: [1, 2], y: 3} } - before(:each) { box.load!(args, expand_by: 2) } - it 'expands box' do - expect(box).to have_attributes({ - x: [1, 2], - y: [3, 3], - height: [:deck, :deck], - width: [:deck, :deck] - }) - end - - it 'gives access to each card too' do - expect(box[0]).to have_attributes({ - x: 1, - y: 3, - height: :deck, - width: :deck - }) - end - end - - context 'layouts' do - let(:layout) do - { 'attack' => { 'x' => 50 }, - 'defend' => { 'x' => 60 } } - end - - it 'are used when not specified' do - args = { layout: ['attack', 'defend'] } - box.load!(args, expand_by: 2, layout: layout) - expect(box).to have_attributes( - x: [50, 60], # set by layout - y: [0, 0], # Box default - ) - end - - it 'handle single expansion' do - args = { layout: 'attack' } - box.load!(args, expand_by: 2, layout: layout) - expect(box).to have_attributes( - x: [50, 50], # set by layout - y: [0, 0], # Box default - ) - end - - it 'handles symbols' do - args = { layout: :attack } - box.load!(args, expand_by: 2, layout: layout) - expect(box).to have_attributes( - x: [50, 50], # set by layout - y: [0, 0], # Box default - ) - end - - it 'warns on non-existent layouts' do - args = { layout: :heal} - expect(Squib.logger).to receive(:warn).with('Layout "heal" does not exist in layout file - using default instead').at_least(:once) - box.load!(args, expand_by: 2, layout: layout) - expect(box).to have_attributes( - x: [0, 0], # Box default - y: [0, 0], # Box default - ) - end - end - - context 'unit conversion' do - - it 'converts units on all args' do - args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'} - box.load!(args, expand_by: 2) - expect(box).to have_attributes( - x: [300, 600], - y: [300, 300], - width: [300, 300], - height: [300, 300], - ) - end - - end - - context 'validation' do - it 'replaces with deck width and height' do - args = {width: :deck, height: :deck} - deck = OpenStruct.new(width: 123, height: 456) - box = Squib::Args::Box.new(deck) - box.load!(args, expand_by: 1) - expect(box).to have_attributes(width: [123], height: [456]) - end - - it 'has radius override x_radius and y_radius' do - args = {x_radius: 1, y_radius: 2, radius: 3} - box.load!(args, expand_by: 2) - expect(box).to have_attributes(x_radius: [3, 3], y_radius: [3, 3]) - end - - end - - -end +require 'spec_helper' +require 'squib/args/box' + +describe Squib::Args::Box do + subject(:box) { Squib::Args::Box.new } + let(:expected_defaults) { {x: [0], y: [0], width: [:deck], height: [:deck] } } + + it 'intitially has no params set' do + expect(box).not_to respond_to(:x, :y, :width, :height) + end + + it 'extracts the defaults from Box on an empty hash' do + box.load!({}) + expect(box).to have_attributes(expected_defaults) + end + + it 'extracts what is specified and fills in defaults from Box' do + box.load!(x: 4, width: 40) + expect(box).to have_attributes(x: [4], width: [40], y: [0], height: [:deck]) + end + + it 'extracts the defaults from Box on an empty hash' do + box.load!({foo: :bar}) + expect(box).to have_attributes(expected_defaults) + expect(box).not_to respond_to(:foo) + end + + context 'single expansion' do + let(:args) { {x: [1, 2], y: 3} } + before(:each) { box.load!(args, expand_by: 2) } + it 'expands box' do + expect(box).to have_attributes({ + x: [1, 2], + y: [3, 3], + height: [:deck, :deck], + width: [:deck, :deck] + }) + end + + it 'gives access to each card too' do + expect(box[0]).to have_attributes({ + x: 1, + y: 3, + height: :deck, + width: :deck + }) + end + end + + context 'layouts' do + let(:layout) do + { 'attack' => { 'x' => 50 }, + 'defend' => { 'x' => 60 } } + end + + it 'are used when not specified' do + args = { layout: ['attack', 'defend'] } + box.load!(args, expand_by: 2, layout: layout) + expect(box).to have_attributes( + x: [50, 60], # set by layout + y: [0, 0], # Box default + ) + end + + it 'handle single expansion' do + args = { layout: 'attack' } + box.load!(args, expand_by: 2, layout: layout) + expect(box).to have_attributes( + x: [50, 50], # set by layout + y: [0, 0], # Box default + ) + end + + it 'handles symbols' do + args = { layout: :attack } + box.load!(args, expand_by: 2, layout: layout) + expect(box).to have_attributes( + x: [50, 50], # set by layout + y: [0, 0], # Box default + ) + end + + it 'warns on non-existent layouts' do + args = { layout: :heal} + expect(Squib.logger).to receive(:warn).with('Layout "heal" does not exist in layout file - using default instead').at_least(:once) + box.load!(args, expand_by: 2, layout: layout) + expect(box).to have_attributes( + x: [0, 0], # Box default + y: [0, 0], # Box default + ) + end + end + + context 'unit conversion' do + + it 'converts units on all args' do + args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'} + box.load!(args, expand_by: 2) + expect(box).to have_attributes( + x: [300, 600], + y: [300, 300], + width: [300, 300], + height: [300, 300], + ) + end + + end + + context 'validation' do + it 'replaces with deck width and height' do + args = {width: :deck, height: :deck} + deck = OpenStruct.new(width: 123, height: 456) + box = Squib::Args::Box.new(deck) + box.load!(args, expand_by: 1) + expect(box).to have_attributes(width: [123], height: [456]) + end + + it 'has radius override x_radius and y_radius' do + args = {x_radius: 1, y_radius: 2, radius: 3} + box.load!(args, expand_by: 2) + expect(box).to have_attributes(x_radius: [3, 3], y_radius: [3, 3]) + end + + end + + +end