Files
ProMotion/spec/functional/func_table_screen_spec.rb
2014-10-11 12:57:23 -07:00

117 lines
3.6 KiB
Ruby

describe "ProMotion::TableScreen functionality" do
tests PM::TestTableScreen
def table_screen
@table_screen ||= begin
t = TestTableScreen.new(nav_bar: true)
t.on_load
t
end
end
def controller
rotate_device to: :portrait, button: :bottom
table_screen.navigationController
end
def confirmation_class
TestHelper.ios7 ? "UITableViewCellDeleteConfirmationButton" : "UITableViewCellDeleteConfirmationControl"
end
def table_label_class
TestHelper.ios7 ? "UILabel" : "UITableViewLabel"
end
before { UIView.setAnimationDuration 0.01 }
after { @table_screen = nil }
it "should have a navigation bar" do
table_screen.navigationController.should.be.kind_of(UINavigationController)
end
it "should increment the tap counter on tap" do
tap("Increment")
table_screen.tap_counter.should == 3
end
it "should add a new table cell on tap" do
tap("Add New Row")
view("Dynamically Added").class.to_s.should == table_label_class
end
it "should do nothing when no action specified" do
tap("Just another blank row")
table_screen.should == table_screen
end
it "should increment the tap counter by one on tap" do
tap("Increment One")
table_screen.tap_counter.should == 1
end
it "should delete the specified row from the table view on tap" do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 7
tap("Delete the row below")
wait 0.11 do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 6
end
end
it "should delete the specified row from the table view on tap with an animation" do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 7
tap("Delete the row below with an animation")
wait 0.11 do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 6
end
end
# TODO: Why is it so complicated to find the delete button??
it "should use editing_style to delete the table row" do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 7
table_screen.cell_was_deleted.should != true
flick("Just another deletable blank row", :to => :left)
wait 0.11 do
# Tap the delete button
view('Just another deletable blank row').superview.superview.subviews.each do |subview|
if subview.class.to_s == confirmation_class
tap subview
wait 0.11 do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 6
table_screen.cell_was_deleted.should == true
end
end
end
end
end
it "should not allow deleting if on_cell_delete returns `false`" do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 7
table_screen.cell_was_deleted.should != true
flick("A non-deletable blank row", :to => :left)
wait 0.11 do
# Tap the delete button
view('A non-deletable blank row').superview.superview.subviews.each do |subview|
if subview.class == confirmation_class
tap subview
wait 0.11 do
table_screen.tableView(table_screen.tableView, numberOfRowsInSection:0).should == 7
table_screen.cell_was_deleted.should != false
end
end
end
end
end
it "should not crash if cell with editing_style is swiped left" do
Proc.new { flick("Just another deletable blank row", to: :left) }.should.not.raise(StandardError)
end
it "should not crash if cell with no editing_style is swiped left" do
Proc.new { flick("Increment", to: :left) }.should.not.raise(StandardError)
end
end