describe 'Frame helpers' do before do @layout = TestEmptyLayout.new top_view = UIView.new @layout.root = top_view @view_size = CGSize.new(8, 10) @view = UIView.alloc.initWithFrame([[0, 0], @view_size]) @view.backgroundColor = UIColor.whiteColor @layout.name_element(@view, :view) @superview_size = CGSize.new(60, 40) @superview = UIView.alloc.initWithFrame([[0, 0], @superview_size]) @superview.addSubview(@view) @superview.backgroundColor = UIColor.blueColor @another_view = UIView.alloc.initWithFrame([[10, 100], [120, 48]]) @another_view.backgroundColor = UIColor.redColor @layout.name_element(@another_view, :another_view) top_view.addSubview(@another_view) top_view.addSubview(@superview) @label = UILabel.alloc.init @label.text = 'M' @label_auto_size = @label.intrinsicContentSize end it 'should support `x` method' do @layout.context(@view) do retval = @layout.x 1 @view.frame.origin.x.should == 1 retval.should == CGRectGetMinX(@view.frame) retval = @layout.x '100% - 1' @view.frame.origin.x.should == @superview_size.width - 1 retval.should == CGRectGetMinX(@view.frame) end end it 'should support `left` method' do @layout.context(@view) do retval = @layout.left 1 @view.frame.origin.x.should == 1 retval.should == CGRectGetMinX(@view.frame) retval = @layout.left '100% - 1' @view.frame.origin.x.should == @superview_size.width - 1 retval.should == CGRectGetMinX(@view.frame) end end it 'should support `right` method' do @layout.context(@view) do retval = @layout.right 1 @view.frame.origin.x.should == 1 - @view_size.width retval.should == CGRectGetMaxX(@view.frame) retval = @layout.right '100% - 1' @view.frame.origin.x.should == @superview_size.width - 1 - @view_size.width retval.should == CGRectGetMaxX(@view.frame) end end it 'should support `center_x` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.center_x 1 @view.center.x.should == 1 retval.should == CGRectGetMidX(@view.frame) retval = @layout.center_x '100% - 1' @view.center.x.should == @superview_size.width - 1 retval.should == CGRectGetMidX(@view.frame) end end it 'should support `middle_x` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.middle_x 1 @view.center.x.should == 1 retval.should == CGRectGetMidX(@view.frame) retval = @layout.middle_x '100% - 1' @view.center.x.should == @superview_size.width - 1 retval.should == CGRectGetMidX(@view.frame) end end it 'should support `y` method' do @layout.context(@view) do retval = @layout.y 1 @view.frame.origin.y.should == 1 retval.should == CGRectGetMinY(@view.frame) retval = @layout.y '100% - 1' @view.frame.origin.y.should == @superview_size.height - 1 retval.should == CGRectGetMinY(@view.frame) end end it 'should support `top` method' do @layout.context(@view) do retval = @layout.top 1 @view.frame.origin.y.should == 1 retval.should == CGRectGetMinY(@view.frame) retval = @layout.top '100% - 1' @view.frame.origin.y.should == @superview_size.height - 1 retval.should == CGRectGetMinY(@view.frame) end end it 'should support `bottom` method' do @layout.context(@view) do retval = @layout.bottom 1 @view.frame.origin.y.should == 1 - @view_size.height retval.should == CGRectGetMaxY(@view.frame) retval = @layout.bottom '100% - 1' @view.frame.origin.y.should == @superview_size.height - 1 - @view_size.height retval.should == CGRectGetMaxY(@view.frame) end end it 'should support `center_y` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.center_y 1 @view.center.y.should == 1 retval.should == CGRectGetMidY(@view.frame) retval = @layout.center_y '100% - 1' @view.center.y.should == @superview_size.height - 1 retval.should == CGRectGetMidY(@view.frame) end end it 'should support `middle_y` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.middle_y 1 @view.center.y.should == 1 retval.should == CGRectGetMidY(@view.frame) retval = @layout.middle_y '100% - 1' @view.center.y.should == @superview_size.height - 1 retval.should == CGRectGetMidY(@view.frame) end end it 'should support `width` method' do @layout.context(@view) do retval = @layout.width 1 @view.frame.size.width.should == 1 retval.should == CGRectGetWidth(@view.frame) retval = @layout.width '100% - 1' @view.frame.size.width.should == @superview_size.width - 1 retval.should == CGRectGetWidth(@view.frame) end end it 'should support `w` method' do @layout.context(@view) do retval = @layout.w 1 @view.frame.size.width.should == 1 retval.should == CGRectGetWidth(@view.frame) retval = @layout.w '100% - 1' @view.frame.size.width.should == @superview_size.width - 1 retval.should == CGRectGetWidth(@view.frame) end end it 'should support `height` method' do @layout.context(@view) do retval = @layout.height 1 @view.frame.size.height.should == 1 retval.should == CGRectGetHeight(@view.frame) retval = @layout.height '100% - 1' @view.frame.size.height.should == @superview_size.height - 1 retval.should == CGRectGetHeight(@view.frame) end end it 'should support `h` method' do @layout.context(@view) do retval = @layout.h 1 @view.frame.size.height.should == 1 retval.should == CGRectGetHeight(@view.frame) retval = @layout.h '100% - 1' @view.frame.size.height.should == @superview_size.height - 1 retval.should == CGRectGetHeight(@view.frame) end end it 'should support `origin([])` method' do @layout.context(@view) do retval = @layout.origin [1, 2] @view.frame.origin.x.should == 1 @view.frame.origin.y.should == 2 retval.should == @view.frame.origin retval = @layout.origin ['100% - 1', '100% - 2'] @view.frame.origin.x.should == @superview_size.width - 1 @view.frame.origin.y.should == @superview_size.height - 2 retval.should == @view.frame.origin end end it 'should support `origin({})` method' do @layout.context(@view) do retval = @layout.origin x: 1, y: 2 @view.frame.origin.x.should == 1 @view.frame.origin.y.should == 2 retval.should == @view.frame.origin retval = @layout.origin x: '100% - 1', y: '100% - 2' @view.frame.origin.x.should == @superview_size.width - 1 @view.frame.origin.y.should == @superview_size.height - 2 retval.should == @view.frame.origin end end it 'should support `origin({relative: true})` method' do @layout.context(@view) do retval = @layout.origin right: 1, down: 2, relative: true @view.frame.origin.x.should == 1 @view.frame.origin.y.should == 2 retval.should == @view.frame.origin retval = @layout.origin x: '100%', y: '100%', left: 1, up: 2, relative: true @view.frame.origin.x.should == @superview_size.width - 1 @view.frame.origin.y.should == @superview_size.height - 2 retval.should == @view.frame.origin end end it 'should support `center([])` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.center [1, 2] @view.center.x.should == 1 @view.center.y.should == 2 retval.should == @view.center retval = @layout.center ['100% - 1', '100% - 2'] @view.center.x.should == @superview_size.width - 1 @view.center.y.should == @superview_size.height - 2 retval.should == @view.center end end it 'should support `center({})` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.center x: 1, y: 2 @view.center.x.should == 1 @view.center.y.should == 2 retval.should == @view.center retval = @layout.center x: '100% - 1', y: '100% - 2' @view.center.x.should == @superview_size.width - 1 @view.center.y.should == @superview_size.height - 2 retval.should == @view.center end end it 'should support `center({relative: true})` method' do @view.frame = [[0, 0], [2, 2]] @layout.context(@view) do retval = @layout.center x: 1, y: 1, right: 1, down: 2, relative: true @view.center.x.should == 2 @view.center.y.should == 3 retval.should == @view.center retval = @layout.center x: '100%', y: '100%', left: 1, up: 2, relative: true @view.center.x.should == @superview_size.width - 1 @view.center.y.should == @superview_size.height - 2 retval.should == @view.center end end it 'should support `size` method' do @layout.context(@view) do retval = @layout.size [1, 2] @view.frame.size.width.should == 1 @view.frame.size.height.should == 2 retval.should == @view.frame.size retval = @layout.size ['100% - 1', '100% - 2'] @view.frame.size.width.should == @superview_size.width - 1 @view.frame.size.height.should == @superview_size.height - 2 retval.should == @view.frame.size end end it 'should support `size :full`' do @layout.context(@view) do retval = @layout.size :full retval.should == @view.frame.size end @view.frame.size.width.should == @superview_size.width @view.frame.size.height.should == @superview_size.height end it 'should support `size :auto`' do @layout.context(@label) do retval = @layout.size :auto retval.should == @label.frame.size end @label.frame.size.width.should == @label_auto_size.width @label.frame.size.height.should == @label_auto_size.height end it 'should support `size :auto, height`' do @layout.context(@label) do retval = @layout.size [:auto, @label_auto_size.height] retval.should == @label.frame.size end @label.frame.size.width.should == @label_auto_size.width @label.frame.size.height.should == @label_auto_size.height end it 'should support `size width, :auto`' do @layout.context(@label) do retval = @layout.size [@label_auto_size.width, :auto] retval.should == @label.frame.size end @label.frame.size.width.should == @label_auto_size.width @label.frame.size.height.should == @label_auto_size.height end it 'should support `size :scale, height`' do @layout.context(@label) do retval = @layout.size [100 * @label_auto_size.width, :scale] retval.should == @label.frame.size end @label.frame.size.width.should == 100 * @label_auto_size.width @label.frame.size.height.should == 100 * @label_auto_size.height end it 'should support `size width, :scale`' do @layout.context(@label) do retval = @layout.size [:scale, 100 * @label_auto_size.height] retval.should == @label.frame.size end @label.frame.size.width.should == 100 * @label_auto_size.width @label.frame.size.height.should == 100 * @label_auto_size.height end it 'should support `frame` arrays [[x, y], [w, h]]' do @layout.context(@view) do retval = @layout.frame [[1, 2], [3, 4]] retval.should == @view.frame end @view.frame.origin.x.should == 1 @view.frame.origin.y.should == 2 @view.frame.size.width.should == 3 @view.frame.size.height.should == 4 end it 'should support `frame` arrays [x, y, w, h]' do @layout.context(@view) do retval = @layout.frame [1, 2, 3, 4] retval.should == @view.frame end @view.frame.origin.x.should == 1 @view.frame.origin.y.should == 2 @view.frame.size.width.should == 3 @view.frame.size.height.should == 4 end it 'should support `frame :full`' do @layout.context(@view) do retval = @layout.frame :full retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == 0 @view.frame.size.width.should == @superview_size.width @view.frame.size.height.should == @superview_size.height end it 'should support `frame :auto`' do def @view.intrinsicContentSize CGSize.new(1, 2) end @layout.context(@view) do retval = @layout.frame :auto retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == 0 @view.frame.size.width.should == 1 @view.frame.size.height.should == 2 end it 'should support `frame :center`' do @layout.context(@view) do retval = @layout.frame :center retval.should == @view.frame end @view.frame.origin.x.should == 26 @view.frame.origin.y.should == 15 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top_left`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left() retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == 0 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top_left(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == 0 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_top_left(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_top_left(right:down:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left(right: 10, down: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_top_left(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top_left(:view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_left(:another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top`' do @layout.context(@view) do retval = @layout.frame @layout.from_top() retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - @view_size.width) / 2 @view.frame.origin.y.should == 0 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 10) / 2 @view.frame.origin.y.should == 0 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_top(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 22) / 2 + 10 @view.frame.origin.y.should == 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_top(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + (@another_view.frame.size.width - @view_size.width) / 2 + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top(view, width: "100%")`' do @layout.context(@view) do retval = @layout.frame @layout.from_top(@another_view, x: 1, y: 1, width: '100%') retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + (@another_view.frame.size.width - @view.frame.size.width) / 2 + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + 1 @view.frame.size.width.should == @superview_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top_right`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_right() retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - @view_size.width @view.frame.origin.y.should == 0 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_top_right(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_right(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 10 @view.frame.origin.y.should == 0 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_top_right(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_right(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 22 + 10 @view.frame.origin.y.should == 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_top_right(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_top_right(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + @another_view.frame.size.width - @view_size.width + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_left`' do @layout.context(@view) do retval = @layout.frame @layout.from_left() retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == (@superview_size.height - @view_size.height) / 2 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_left(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_left(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == (@superview_size.height - 20) / 2 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_left(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_left(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == (@superview_size.height - 12) / 2 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_left(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_left(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + (@another_view.frame.size.height - @view_size.height) / 2 + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_center`' do @layout.context(@view) do retval = @layout.frame @layout.from_center() retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - @view_size.width) / 2 @view.frame.origin.y.should == (@superview_size.height - @view_size.height) / 2 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_center(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_center(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 10) / 2 @view.frame.origin.y.should == (@superview_size.height - 20) / 2 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_center(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_center(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 22) / 2 + 10 @view.frame.origin.y.should == (@superview_size.height - 12) / 2 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_center(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_center(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + (@another_view.frame.size.width - @view_size.width) / 2 + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + (@another_view.frame.size.height - @view_size.height) / 2 + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_right`' do @layout.context(@view) do retval = @layout.frame @layout.from_right() retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - @view_size.width @view.frame.origin.y.should == (@superview_size.height - @view_size.height) / 2 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_right(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_right(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 10 @view.frame.origin.y.should == (@superview_size.height - 20) / 2 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_right(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_right(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 22 + 10 @view.frame.origin.y.should == (@superview_size.height - 12) / 2 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_right(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_right(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + @another_view.frame.size.width - @view_size.width + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + (@another_view.frame.size.height - @view_size.height) / 2 + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom_left`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_left() retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == @superview_size.height - @view_size.height @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom_left(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_left(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == @superview_size.height - 20 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_bottom_left(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_left(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == @superview_size.height - 12 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_bottom_left(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_left(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + @another_view.frame.size.height - @view_size.height + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom() retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - @view_size.width) / 2 @view.frame.origin.y.should == @superview_size.height - @view_size.height @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 10) / 2 @view.frame.origin.y.should == @superview_size.height - 20 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_bottom(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == (@superview_size.width - 22) / 2 + 10 @view.frame.origin.y.should == @superview_size.height - 12 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_bottom(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + (@another_view.frame.size.width - @view_size.width) / 2 + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + @another_view.frame.size.height - @view_size.height + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom_right`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_right() retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - @view_size.width @view.frame.origin.y.should == @superview_size.height - @view_size.height @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `from_bottom_right(width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_right(width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 10 @view.frame.origin.y.should == @superview_size.height - 20 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `from_bottom_right(x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_right(x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == @superview_size.width - 22 + 10 @view.frame.origin.y.should == @superview_size.height - 12 + 20 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `from_bottom_right(view)`' do @layout.context(@view) do retval = @layout.frame @layout.from_bottom_right(@another_view, x: 1, y: 1) retval.should == @view.frame end @view.frame.origin.x.should == @another_view.frame.origin.x + @another_view.frame.size.width - @view_size.width + 1 @view.frame.origin.y.should == @another_view.frame.origin.y + @another_view.frame.size.height - @view_size.height + 1 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `above(view)`' do @layout.context(@view) do retval = @layout.frame @layout.above(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 90 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `above(view)` and ignore view origin' do f = @view.frame f.origin.x = 10 f.origin.y = 10 @view.frame = f @layout.context(@view) do retval = @layout.frame @layout.above(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 90 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `above(view, up:)`' do @layout.context(@view) do retval = @layout.frame @layout.above(@another_view, up: 8) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 82 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `above(view, width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.above(@another_view, width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 80 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `above(view, x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.above(@another_view, x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 20 @view.frame.origin.y.should == 108 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `below(view)`' do @layout.context(@view) do retval = @layout.frame @layout.below(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 148 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `below(view)` and ignore view origin' do f = @view.frame f.origin.x = 10 f.origin.y = 10 @view.frame = f @layout.context(@view) do retval = @layout.frame @layout.below(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 148 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `below(view, down:)`' do @layout.context(@view) do retval = @layout.frame @layout.below(@another_view, down: 8) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 156 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `below(view, width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.below(@another_view, width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 148 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `below(view, x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.below(@another_view, x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 20 @view.frame.origin.y.should == 168 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `before(view)`' do @layout.context(@view) do retval = @layout.frame @layout.before(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 2 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `before(view)` and ignore view origin' do f = @view.frame f.origin.x = 10 f.origin.y = 10 @view.frame = f @layout.context(@view) do retval = @layout.frame @layout.before(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 2 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `before(view, left:)`' do @layout.context(@view) do retval = @layout.frame @layout.before(@another_view, left: 8) retval.should == @view.frame end @view.frame.origin.x.should == -6 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `before(view, width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.before(@another_view, width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 0 @view.frame.origin.y.should == 100 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `before(view, x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.before(@another_view, x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == -2 @view.frame.origin.y.should == 120 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `left_of(view)`' do before = nil left_of = nil @layout.context(@view) do before = @layout.before(@another_view) left_of = @layout.left_of(@another_view) end left_of.origin.x.should == before.origin.x left_of.origin.y.should == before.origin.y left_of.size.width.should == before.size.width left_of.size.height.should == before.size.height end it 'should support setting the frame via `after(view)`' do @layout.context(@view) do retval = @layout.frame @layout.after(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 130 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `after(view)` and ignore view origin' do f = @view.frame f.origin.x = 10 f.origin.y = 10 @view.frame = f @layout.context(@view) do retval = @layout.frame @layout.after(@another_view) retval.should == @view.frame end @view.frame.origin.x.should == 130 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `after(view, right:)`' do @layout.context(@view) do retval = @layout.frame @layout.after(@another_view, right: 8) retval.should == @view.frame end @view.frame.origin.x.should == 138 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `after(view, width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.after(@another_view, width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 130 @view.frame.origin.y.should == 100 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `after(view, x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.after(@another_view, x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 140 @view.frame.origin.y.should == 120 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end it 'should support setting the frame via `right_of(view)`' do after = nil right_of = nil @layout.context(@view) do after = @layout.after(@another_view) right_of = @layout.right_of(@another_view) end right_of.origin.x.should == after.origin.x right_of.origin.y.should == after.origin.y right_of.size.width.should == after.size.width right_of.size.height.should == after.size.height end it 'should support setting the frame via `relative_to(view)`' do @layout.context(@view) do retval = @layout.frame @layout.relative_to(@another_view, {}) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `relative_to(view)` and ignore view origin' do f = @view.frame f.origin.x = 10 f.origin.y = 10 @view.frame = f @layout.context(@view) do retval = @layout.frame @layout.relative_to(@another_view, {}) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 100 @view.frame.size.width.should == @view_size.width @view.frame.size.height.should == @view_size.height end it 'should support setting the frame via `relative_to(view, width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.relative_to(@another_view, width: 10, height: 20) retval.should == @view.frame end @view.frame.origin.x.should == 10 @view.frame.origin.y.should == 100 @view.frame.size.width.should == 10 @view.frame.size.height.should == 20 end it 'should support setting the frame via `relative_to(view, x:y:width:height:)`' do @layout.context(@view) do retval = @layout.frame @layout.relative_to(@another_view, x: 10, y: 20, width: 22, height: 12) retval.should == @view.frame end @view.frame.origin.x.should == 20 @view.frame.origin.y.should == 120 @view.frame.size.width.should == 22 @view.frame.size.height.should == 12 end end