ProMotion 0.7.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +1 -1
  3. data/ProMotion.gemspec +2 -0
  4. data/README.md +51 -449
  5. data/Rakefile +11 -1
  6. data/app/screens/basic_screen.rb +0 -24
  7. data/lib/ProMotion/cocoatouch/{NavigationController.rb → navigation_controller.rb} +0 -0
  8. data/lib/ProMotion/cocoatouch/split_view_controller.rb +29 -0
  9. data/lib/ProMotion/cocoatouch/tab_bar_controller.rb +43 -0
  10. data/lib/ProMotion/cocoatouch/{TableViewCell.rb → table_view_cell.rb} +0 -1
  11. data/lib/ProMotion/cocoatouch/{TableViewController.rb → table_view_controller.rb} +0 -0
  12. data/lib/ProMotion/cocoatouch/{ViewController.rb → view_controller.rb} +6 -1
  13. data/lib/ProMotion/{screen_helpers → containers}/split_screen.rb +0 -2
  14. data/lib/ProMotion/containers/tabs.rb +95 -0
  15. data/lib/ProMotion/delegate/delegate.rb +2 -13
  16. data/lib/ProMotion/delegate/{delegate_helper.rb → delegate_module.rb} +29 -16
  17. data/lib/ProMotion/delegate/delegate_notifications.rb +17 -8
  18. data/lib/ProMotion/delegate/delegate_parent.rb +11 -0
  19. data/lib/ProMotion/extensions/conversions.rb +20 -0
  20. data/lib/ProMotion/{helpers/logger.rb → logger.rb} +0 -0
  21. data/lib/ProMotion/map/map_screen.rb +6 -0
  22. data/lib/ProMotion/map/map_screen_annotation.rb +56 -0
  23. data/lib/ProMotion/map/map_screen_module.rb +207 -0
  24. data/lib/ProMotion/{push_notifications → push_notification}/push_notification.rb +13 -6
  25. data/lib/ProMotion/{screens → screen}/screen.rb +1 -1
  26. data/lib/ProMotion/{screens/_screen_module.rb → screen/screen_module.rb} +76 -51
  27. data/lib/ProMotion/{screen_helpers → screen}/screen_navigation.rb +8 -12
  28. data/lib/ProMotion/{screens/_tables → table/cell}/table_view_cell_module.rb +18 -27
  29. data/lib/ProMotion/table/data/table_data.rb +98 -0
  30. data/lib/ProMotion/table/extensions/indexable.rb +9 -0
  31. data/lib/ProMotion/table/extensions/refreshable.rb +45 -0
  32. data/lib/ProMotion/table/extensions/searchable.rb +61 -0
  33. data/lib/ProMotion/table/grouped_table.rb +9 -0
  34. data/lib/ProMotion/table/grouped_table_screen.rb +6 -0
  35. data/lib/ProMotion/table/table.rb +312 -0
  36. data/lib/ProMotion/table/table_screen.rb +6 -0
  37. data/lib/ProMotion/{screens/_compatibility → thirdparty}/formotion_screen.rb +18 -5
  38. data/lib/ProMotion/version.rb +1 -1
  39. data/lib/ProMotion/view/styling.rb +137 -0
  40. data/lib/ProMotion/web/web_screen.rb +6 -0
  41. data/lib/ProMotion/web/web_screen_module.rb +155 -0
  42. data/resources/WebScreen.html +6 -0
  43. data/resources/test.jpeg +0 -0
  44. data/spec/functional/func_map_screen_spec.rb +105 -0
  45. data/spec/functional/func_screen_spec.rb +54 -7
  46. data/spec/functional/func_searchable_table_spec.rb +1 -1
  47. data/spec/functional/func_tab_bar_spec.rb +78 -0
  48. data/spec/functional/func_table_screen_spec.rb +61 -14
  49. data/spec/functional/func_web_screen_spec.rb +51 -0
  50. data/spec/helpers/map_screen.rb +51 -0
  51. data/spec/helpers/present_screen.rb +26 -0
  52. data/spec/helpers/tab_screen.rb +4 -0
  53. data/spec/helpers/table_screen.rb +12 -3
  54. data/spec/helpers/table_screen_formotion.rb +25 -0
  55. data/spec/helpers/table_screen_indexable.rb +13 -0
  56. data/spec/helpers/test_delegate.rb +28 -0
  57. data/spec/helpers/web_screen.rb +22 -0
  58. data/spec/unit/delegate_spec.rb +53 -4
  59. data/spec/unit/map_spec.rb +48 -0
  60. data/spec/unit/screen_helpers_spec.rb +24 -16
  61. data/spec/unit/screen_spec.rb +22 -18
  62. data/spec/unit/split_screen_in_tab_bar_spec.rb +2 -2
  63. data/spec/unit/split_screen_open_screen_spec.rb +15 -10
  64. data/spec/unit/split_screen_spec.rb +2 -2
  65. data/spec/unit/tab_spec.rb +41 -0
  66. data/spec/unit/tables/formotion_screen_spec.rb +16 -0
  67. data/spec/unit/tables/table_indexable_spec.rb +12 -0
  68. data/spec/unit/tables/table_module_spec.rb +24 -9
  69. data/spec/unit/tables/table_screen_spec.rb +1 -1
  70. data/spec/unit/tables/table_view_cell_spec.rb +9 -8
  71. data/spec/unit/view_helper_spec.rb +2 -2
  72. data/spec/unit/web_spec.rb +106 -0
  73. metadata +96 -35
  74. data/lib/ProMotion/cocoatouch/SplitViewController.rb +0 -23
  75. data/lib/ProMotion/helpers/console.rb +0 -29
  76. data/lib/ProMotion/helpers/measure_helper.rb +0 -20
  77. data/lib/ProMotion/helpers/system_helper.rb +0 -29
  78. data/lib/ProMotion/helpers/view_helper.rb +0 -82
  79. data/lib/ProMotion/screen_helpers/screen_elements.rb +0 -36
  80. data/lib/ProMotion/screen_helpers/screen_tabs.rb +0 -95
  81. data/lib/ProMotion/screens/_table_screen_module.rb +0 -47
  82. data/lib/ProMotion/screens/_tables/_refreshable_table.rb +0 -45
  83. data/lib/ProMotion/screens/_tables/_searchable_table.rb +0 -60
  84. data/lib/ProMotion/screens/_tables/_sectioned_table.rb +0 -5
  85. data/lib/ProMotion/screens/_tables/_table.rb +0 -169
  86. data/lib/ProMotion/screens/_tables/grouped_table.rb +0 -16
  87. data/lib/ProMotion/screens/_tables/plain_table.rb +0 -17
  88. data/lib/ProMotion/screens/_tables/table_data.rb +0 -175
  89. data/lib/ProMotion/screens/behaves_like_screen.rb +0 -10
  90. data/lib/ProMotion/screens/table_screen.rb +0 -16
  91. data/spec/unit/ios_version_spec.rb +0 -28
@@ -5,11 +5,13 @@ describe "ProMotion::Screen functional" do
5
5
  def controller
6
6
  rotate_device to: :portrait, button: :bottom
7
7
  @controller ||= FunctionalScreen.new(nav_bar: true)
8
- @controller.main_controller
8
+ @root_screen = @controller
9
+ @controller.navigation_controller
9
10
  end
10
11
 
11
12
  after do
12
13
  @controller = nil
14
+ @root_screen = nil
13
15
  end
14
16
 
15
17
  it "should have a navigation bar" do
@@ -17,19 +19,19 @@ describe "ProMotion::Screen functional" do
17
19
  end
18
20
 
19
21
  it "should allow setting a left nav bar button" do
20
- @controller.set_nav_bar_button :left, title: "Cool", action: :triggered_button
22
+ @root_screen.set_nav_bar_button :left, title: "Cool", action: :triggered_button
21
23
  tap("Cool")
22
- @controller.button_was_triggered.should.be.true
24
+ @root_screen.button_was_triggered.should.be.true
23
25
  end
24
26
 
25
27
  it "should allow setting a right nav bar button" do
26
- @controller.set_nav_bar_button :right, title: "Cool2", action: :triggered_button
28
+ @root_screen.set_nav_bar_button :right, title: "Cool2", action: :triggered_button
27
29
  tap("Cool2")
28
- @controller.button_was_triggered.should.be.true
30
+ @root_screen.button_was_triggered.should.be.true
29
31
  end
30
32
 
31
33
  it "should allow opening another screen in the same nav bar and have a back button that is operational" do
32
- @controller.open BasicScreen
34
+ @root_screen.open BasicScreen
33
35
 
34
36
  wait 0.5 do
35
37
 
@@ -47,7 +49,7 @@ describe "ProMotion::Screen functional" do
47
49
  it "should allow opening and closing a modal screen" do
48
50
  @basic = BasicScreen.new(nav_bar: true)
49
51
  wait 0.1 do
50
- @controller.open_modal @basic
52
+ @root_screen.open_modal @basic
51
53
 
52
54
  wait 0.6 do
53
55
 
@@ -63,4 +65,49 @@ describe "ProMotion::Screen functional" do
63
65
  end
64
66
  end
65
67
 
68
+ it "should fire the will_present, on_present, will_dismiss, and on_dismiss_methods" do
69
+ @presented_screen = PresentScreen.new
70
+ @root_screen.open @presented_screen
71
+ wait 0.6 do
72
+ @presented_screen.will_present_fired.should == true
73
+ @presented_screen.on_present_fired.should == true
74
+
75
+ @presented_screen.will_dismiss_fired.should.not == true
76
+ @presented_screen.on_dismiss_fired.should.not == true
77
+
78
+ @presented_screen.reset
79
+
80
+ @presented_screen.close
81
+ wait 0.6 do
82
+ @presented_screen.will_dismiss_fired.should == true
83
+ @presented_screen.on_dismiss_fired.should == true
84
+
85
+ @presented_screen.will_present_fired.should.not == true
86
+ @presented_screen.on_present_fired.should.not == true
87
+
88
+ @presented_screen = nil
89
+ end
90
+ end
91
+ end
92
+
93
+ it "should pop to the root view controller" do
94
+ @root_vc = @controller.navigation_controller.visibleViewController
95
+ @controller.navigation_controller.viewControllers.count.should == 1
96
+ @controller.open BasicScreen.new
97
+ wait 0.6 do
98
+ @controller.open BasicScreen.new
99
+ wait 0.6 do
100
+ @controller.open BasicScreen.new
101
+ wait 0.6 do
102
+ @controller.navigation_controller.viewControllers.count.should == 4
103
+ @controller.close to_screen: :root
104
+ wait 0.6 do
105
+ @controller.navigation_controller.viewControllers.count.should == 1
106
+ @controller.navigation_controller.topViewController.should == @root_vc
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+
66
113
  end
@@ -5,7 +5,7 @@ describe "Searchable table spec" do
5
5
  def controller
6
6
  @controller ||= TableScreenSearchable.new(nav_bar: true)
7
7
  @controller.on_load
8
- @controller.main_controller
8
+ @controller.navigation_controller
9
9
  end
10
10
 
11
11
  it "should be rotated in portrait mode" do
@@ -0,0 +1,78 @@
1
+ describe "PM::Tabs" do
2
+ tests PM::Tabs
3
+
4
+ # Override controller to properly instantiate
5
+ def controller
6
+ @app ||= TestDelegate.new
7
+
8
+ @screen1 = BasicScreen.new(nav_bar: true, title: "Screen 1")
9
+ @screen2 = BasicScreen.new(nav_bar: true, title: "Screen 2")
10
+ @screen3 = BasicScreen.new(title: "Screen 3")
11
+ @screen4 = BasicScreen.new(title: "Screen 4")
12
+
13
+ @controller ||= @app.open_tab_bar(@screen1, @screen2, @screen3, @screen4)
14
+ @tab_bar = @controller
15
+ end
16
+
17
+ it "should create a UITabBarController" do
18
+ @app.window.rootViewController.should.be.kind_of UITabBarController
19
+ end
20
+
21
+ it "should have four tabs" do
22
+ @tab_bar.viewControllers.length.should == 4
23
+ end
24
+
25
+ it "should have the right screens in the right places" do
26
+ @tab_bar.viewControllers[0].should == @screen1.navigationController
27
+ @tab_bar.viewControllers[1].should == @screen2.navigationController
28
+ @tab_bar.viewControllers[2].should == @screen3
29
+ @tab_bar.viewControllers[3].should == @screen4
30
+ end
31
+
32
+ it "should allow opening a tab by the name from any screen" do
33
+ @screen1.open_tab "Screen 2"
34
+ @tab_bar.selectedIndex.should == 1
35
+ @screen2.open_tab "Screen 3"
36
+ @tab_bar.selectedIndex.should == 2
37
+ @screen3.open_tab "Screen 4"
38
+ @tab_bar.selectedIndex.should == 3
39
+ @screen4.open_tab "Screen 1"
40
+ @tab_bar.selectedIndex.should == 0
41
+ end
42
+
43
+ it "should allow opening a tab by the index from any screen" do
44
+ @screen1.open_tab 1
45
+ @tab_bar.selectedIndex.should == 1
46
+ @screen2.open_tab 2
47
+ @tab_bar.selectedIndex.should == 2
48
+ @screen3.open_tab 3
49
+ @tab_bar.selectedIndex.should == 3
50
+ @screen4.open_tab 0
51
+ @tab_bar.selectedIndex.should == 0
52
+ end
53
+
54
+ it "should allow opening a tab from the app_delegate" do
55
+ @app.open_tab "Screen 2"
56
+ @tab_bar.selectedIndex.should == 1
57
+ @app.open_tab "Screen 3"
58
+ @tab_bar.selectedIndex.should == 2
59
+ @app.open_tab "Screen 4"
60
+ @tab_bar.selectedIndex.should == 3
61
+ @app.open_tab "Screen 1"
62
+ @tab_bar.selectedIndex.should == 0
63
+ end
64
+
65
+ it "should allow opening a tab by accessing the tab bar directly" do
66
+ @tab_bar.open_tab "Screen 2"
67
+ @tab_bar.selectedIndex.should == 1
68
+ @tab_bar.open_tab "Screen 3"
69
+ @tab_bar.selectedIndex.should == 2
70
+ @tab_bar.open_tab "Screen 4"
71
+ @tab_bar.selectedIndex.should == 3
72
+ @tab_bar.open_tab "Screen 1"
73
+ @tab_bar.selectedIndex.should == 0
74
+ end
75
+
76
+
77
+
78
+ end
@@ -6,11 +6,7 @@ describe "ProMotion::TestTableScreen functionality" do
6
6
  rotate_device to: :portrait, button: :bottom
7
7
  @controller ||= TestTableScreen.new(nav_bar: true)
8
8
  @controller.on_load
9
- @controller.main_controller
10
- end
11
-
12
- after do
13
- @controller = nil
9
+ @controller.navigation_controller
14
10
  end
15
11
 
16
12
  it "should have a navigation bar" do
@@ -38,36 +34,87 @@ describe "ProMotion::TestTableScreen functionality" do
38
34
  end
39
35
 
40
36
  it "should delete the specified row from the table view on tap" do
41
- @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 6
37
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 7
42
38
  tap("Delete the row below")
43
- @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 5
39
+ wait 0.3 do
40
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 6
41
+ end
44
42
  end
45
43
 
46
44
  it "should delete the specified row from the table view on tap with an animation" do
47
- @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 6
45
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 7
48
46
  tap("Delete the row below with an animation")
49
- @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 5
47
+ wait 0.3 do
48
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 6
49
+ end
50
+ end
51
+
52
+ # TODO: Why is it so complicated to find the delete button??
53
+ it "should use editing_style to delete the table row" do
54
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 7
55
+ @controller.cell_was_deleted.should != true
56
+ flick("Just another deletable blank row", :to => :left)
57
+
58
+ wait 0.25 do
59
+ # Tap the delete button
60
+ view('Just another deletable blank row').superview.superview.subviews.each do |subview|
61
+ if subview.class == UITableViewCellDeleteConfirmationControl
62
+ tap subview
63
+ wait 0.25 do
64
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 6
65
+ @controller.cell_was_deleted.should == true
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ it "should not allow deleting if on_cell_delete returns `false`" do
73
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 7
74
+ @controller.cell_was_deleted.should != true
75
+ flick("A non-deletable blank row", :to => :left)
76
+
77
+ wait 0.25 do
78
+ # Tap the delete button
79
+ view('A non-deletable blank row').superview.superview.subviews.each do |subview|
80
+ if subview.class == UITableViewCellDeleteConfirmationControl
81
+ tap subview
82
+ wait 0.25 do
83
+ @controller.tableView(@controller.tableView, numberOfRowsInSection:0).should == 7
84
+ @controller.cell_was_deleted.should != false
85
+ end
86
+ end
87
+ end
88
+ end
50
89
  end
51
90
 
52
91
  it "should call a method when the switch is flipped" do
53
92
  @controller.scroll_to_bottom
54
93
  tap "switch_1"
55
- @controller.tap_counter.should == 1
94
+ wait 0.3 do
95
+ @controller.tap_counter.should == 1
96
+ end
56
97
  end
57
98
 
58
99
  it "should call the method with arguments when the switch is flipped and when the cell is tapped" do
59
100
  @controller.scroll_to_bottom
60
101
  tap "switch_3"
61
- @controller.tap_counter.should == 3
102
+ wait 0.3 do
103
+ @controller.tap_counter.should == 3
62
104
 
63
- tap "Switch With Cell Tap, Switch Action And Parameters"
64
- @controller.tap_counter.should == 13
105
+ tap "Switch With Cell Tap, Switch Action And Parameters"
106
+ wait 0.3 do
107
+ @controller.tap_counter.should == 13
108
+ end
109
+ end
65
110
  end
66
111
 
67
112
  it "should call the method with arguments when the switch is flipped" do
68
113
  @controller.scroll_to_bottom
69
114
  tap "switch_2"
70
- @controller.tap_counter.should == 3
115
+ wait 0.3 do
116
+ @controller.tap_counter.should == 3
117
+ end
71
118
  end
72
119
 
73
120
  end
@@ -0,0 +1,51 @@
1
+ describe "ProMotion::TestWebScreen functionality" do
2
+ extend WebStub::SpecHelpers
3
+
4
+ before { disable_network_access! }
5
+ after { enable_network_access! }
6
+
7
+ tests PM::TestWebScreen
8
+
9
+ # Override controller to properly instantiate
10
+ def controller
11
+ rotate_device to: :portrait, button: :bottom
12
+ @webscreen ||= TestWebScreen.new(nav_bar: true)
13
+ @webscreen.navigation_controller
14
+ end
15
+
16
+ after do
17
+ @webscreen = nil
18
+ end
19
+
20
+ it "should have the proper html content" do
21
+ file_name = "WebScreen.html"
22
+
23
+ @webscreen.set_content(file_name)
24
+
25
+ @loaded_file = File.read(File.join(NSBundle.mainBundle.resourcePath, file_name))
26
+ wait_for_change @webscreen, 'load_finished' do
27
+ @webscreen.html.delete("\n").should == @loaded_file.delete("\n")
28
+ end
29
+ end
30
+
31
+ it "should allow you to navigate to a website" do
32
+ stub_request(:get, "https://www.google.com/").
33
+ to_return(body: %q{Google! <form action="/search">%}, content_type: "text/html")
34
+
35
+ @webscreen.open_url(NSURL.URLWithString("https://www.google.com/"))
36
+ wait_for_change @webscreen, 'load_finished' do
37
+ @webscreen.html.include?('<form action="/search"').should == true
38
+ end
39
+ end
40
+
41
+ it "should manipulate the webscreen contents with javascript" do
42
+ @webscreen.set_content('<h1 id="cool">Something Cool</h1>')
43
+
44
+ wait_for_change @webscreen, 'load_finished' do
45
+ @webscreen.evaluate('document.getElementById("cool").innerHTML = "Changed"')
46
+ @webscreen.html.should =~ /<h1 id="cool">Changed<\/h1>/
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,51 @@
1
+ class TestMapScreen < PM::MapScreen
2
+
3
+ attr_accessor :infinite_loop_points
4
+
5
+ start_position latitude: 35.090648651123, longitude: -82.965972900391, radius: 4
6
+ title "Gorges State Park, NC"
7
+
8
+ def get_title
9
+ self.title
10
+ end
11
+
12
+ def promotion_annotation_data
13
+ @promotion_annotation_data
14
+ end
15
+
16
+ def annotation_data
17
+ # Partial set of data from "GPS Map of Gorges State Park": http://www.hikewnc.info/maps/gorges-state-park/gps-map
18
+ @data ||= [{
19
+ longitude: -82.965972900391,
20
+ latitude: 35.090648651123,
21
+ title: "Rainbow Falls",
22
+ subtitle: "Nantahala National Forest",
23
+ },{
24
+ longitude: -82.966093558105,
25
+ latitude: 35.092520895652,
26
+ title: "Turtleback Falls",
27
+ subtitle: "Nantahala National Forest",
28
+ },{
29
+ longitude: -82.95916,
30
+ latitude: 35.07496,
31
+ title: "Windy Falls"
32
+ },{
33
+ longitude: -82.943031505056,
34
+ latitude: 35.102516828489,
35
+ title: "Upper Bearwallow Falls",
36
+ subtitle: "Gorges State Park",
37
+ },{
38
+ longitude: -82.956244328014,
39
+ latitude: 35.085548421623,
40
+ title: "Stairway Falls",
41
+ subtitle: "Gorges State Park",
42
+ }]
43
+ end
44
+
45
+ def lookup_infinite_loop
46
+ look_up_address address: "1 Infinite Loop" do |points, error|
47
+ self.infinite_loop_points = points
48
+ end
49
+ end
50
+
51
+ end
@@ -0,0 +1,26 @@
1
+ class PresentScreen < PM::Screen
2
+ attr_accessor :will_present_fired, :on_present_fired, :will_dismiss_fired, :on_dismiss_fired
3
+
4
+ def will_present
5
+ self.will_present_fired = true
6
+ end
7
+
8
+ def on_present
9
+ self.on_present_fired = true
10
+ end
11
+
12
+ def will_dismiss
13
+ self.will_dismiss_fired = true
14
+ end
15
+
16
+ def on_dismiss
17
+ self.on_dismiss_fired = true
18
+ end
19
+
20
+ def reset
21
+ self.will_present_fired = false
22
+ self.on_present_fired = false
23
+ self.will_dismiss_fired = false
24
+ self.on_dismiss_fired = false
25
+ end
26
+ end
@@ -0,0 +1,4 @@
1
+ class TabScreen < PM::Screen
2
+ title "Tab"
3
+ tab_bar_item title: "Tab Item", icon: "list"
4
+ end
@@ -1,6 +1,6 @@
1
- class TestTableScreen < ProMotion::SectionedTableScreen
1
+ class TestTableScreen < ProMotion::TableScreen
2
2
 
3
- attr_accessor :tap_counter
3
+ attr_accessor :tap_counter, :cell_was_deleted
4
4
 
5
5
  def promotion_table_data
6
6
  @promotion_table_data
@@ -17,7 +17,8 @@ class TestTableScreen < ProMotion::SectionedTableScreen
17
17
  { title: "Increment", action: :increment_counter_by, arguments: {number: 3} },
18
18
  { title: "Add New Row", action: :add_tableview_row },
19
19
  { title: "Delete the row below", action: :delete_cell, arguments: {section: 0, row:3} },
20
- { title: "Just another blank row" },
20
+ { title: "Just another deletable blank row", editing_style: :delete },
21
+ { title: "A non-deletable blank row", editing_style: :delete },
21
22
  { title: "Delete the row below with an animation", action: :delete_cell, arguments: {animated: true, section: 0, row:5 } },
22
23
  { title: "Just another blank row" }
23
24
  ]
@@ -86,6 +87,14 @@ class TestTableScreen < ProMotion::SectionedTableScreen
86
87
  end
87
88
  end
88
89
 
90
+ def on_cell_deleted(cell)
91
+ if cell[:title] == "A non-deletable blank row"
92
+ false
93
+ else
94
+ self.cell_was_deleted = true
95
+ end
96
+ end
97
+
89
98
  def increment_counter
90
99
  self.tap_counter = self.tap_counter + 1
91
100
  end