roku_builder 4.25.5 → 4.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/intergration/roku_builder/test_helper.rb +2 -3
  3. data/intergration/roku_builder/test_profiler.rb +1 -1
  4. data/lib/roku_builder/config_parser.rb +4 -5
  5. data/lib/roku_builder/device_manager.rb +100 -0
  6. data/lib/roku_builder/plugins/core.rb +3 -1
  7. data/lib/roku_builder/plugins/inspector.rb +36 -26
  8. data/lib/roku_builder/plugins/line_inspector.rb +27 -6
  9. data/lib/roku_builder/plugins/linker.rb +29 -22
  10. data/lib/roku_builder/plugins/loader.rb +36 -15
  11. data/lib/roku_builder/plugins/monitor.rb +19 -17
  12. data/lib/roku_builder/plugins/navigator.rb +40 -34
  13. data/lib/roku_builder/plugins/packager.rb +109 -92
  14. data/lib/roku_builder/plugins/profiler.rb +24 -15
  15. data/lib/roku_builder/plugins/tester.rb +15 -13
  16. data/lib/roku_builder/util.rb +39 -17
  17. data/lib/roku_builder/version.rb +1 -1
  18. data/lib/roku_builder.rb +3 -19
  19. data/roku_builder.gemspec +3 -2
  20. data/test/roku_builder/plugins/test_analyzer.rb +19 -0
  21. data/test/roku_builder/plugins/test_core.rb +2 -3
  22. data/test/roku_builder/plugins/test_inspector.rb +48 -8
  23. data/test/roku_builder/plugins/test_linker.rb +66 -10
  24. data/test/roku_builder/plugins/test_loader.rb +44 -15
  25. data/test/roku_builder/plugins/test_monitor.rb +33 -16
  26. data/test/roku_builder/plugins/test_navigator.rb +55 -14
  27. data/test/roku_builder/plugins/test_packager.rb +118 -34
  28. data/test/roku_builder/plugins/test_profiler.rb +153 -78
  29. data/test/roku_builder/plugins/test_tester.rb +20 -5
  30. data/test/roku_builder/test_device_manager.rb +187 -0
  31. data/test/roku_builder/test_files/analyzer_test/dont_use_hello_world.json +11 -0
  32. data/test/roku_builder/test_files/analyzer_test/linter_positive_match.json +13 -0
  33. data/test/roku_builder/test_helper.rb +6 -0
  34. data/test/roku_builder/test_roku_builder.rb +5 -42
  35. metadata +27 -6
@@ -9,10 +9,12 @@ module RokuBuilder
9
9
  RokuBuilder.class_variable_set(:@@dev, false)
10
10
  RokuBuilder.setup_plugins
11
11
  register_plugins(Linker)
12
+ @device_manager = Minitest::Mock.new
12
13
  @requests = []
13
14
  end
14
15
  def teardown
15
16
  @requests.each {|req| remove_request_stub(req)}
17
+ @device_manager.verify
16
18
  end
17
19
  def test_linker_parse_options_long
18
20
  parser = OptionParser.new
@@ -41,8 +43,14 @@ module RokuBuilder
41
43
  options = {deeplink: 'a:A, b:B:C, d:a\b'}
42
44
  config, options = build_config_options_objects(LinkerTest, options, false)
43
45
 
46
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
47
+ @device_manager.expect(:reserve_device, device, no_lock: false)
48
+ @device_manager.expect(:release_device, nil, [device])
49
+
44
50
  linker = Linker.new(config: config)
45
- linker.deeplink(options: options)
51
+ RokuBuilder.stub(:device_manager, @device_manager) do
52
+ linker.deeplink(options: options)
53
+ end
46
54
  end
47
55
  def test_linker_link_sideload
48
56
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/launch/dev?a=A&b=B:C&d=a%5Cb").
@@ -55,8 +63,14 @@ module RokuBuilder
55
63
  options = {deeplink: 'a:A, b:B:C, d:a\b', working: true}
56
64
  config, options = build_config_options_objects(LinkerTest, options, false)
57
65
 
66
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
67
+ @device_manager.expect(:reserve_device, device, no_lock: false)
68
+ @device_manager.expect(:release_device, nil, [device])
69
+
58
70
  linker = Linker.new(config: config)
59
- linker.deeplink(options: options)
71
+ RokuBuilder.stub(:device_manager, @device_manager) do
72
+ linker.deeplink(options: options)
73
+ end
60
74
  end
61
75
  def test_linker_link_sideload_current
62
76
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/launch/dev?a=A&b=B:C&d=a%5Cb").
@@ -72,8 +86,14 @@ module RokuBuilder
72
86
  config, options = build_config_options_objects(LinkerTest, options, false)
73
87
  end
74
88
 
89
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
90
+ @device_manager.expect(:reserve_device, device, no_lock: false)
91
+ @device_manager.expect(:release_device, nil, [device])
92
+
75
93
  linker = Linker.new(config: config)
76
- linker.deeplink(options: options)
94
+ RokuBuilder.stub(:device_manager, @device_manager) do
95
+ linker.deeplink(options: options)
96
+ end
77
97
  end
78
98
  def test_linker_link_app
79
99
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/launch/1234?a=A&b=B:C&d=a%5Cb").
@@ -82,8 +102,14 @@ module RokuBuilder
82
102
  options = {deeplink: 'a:A, b:B:C, d:a\b', app_id: "1234"}
83
103
  config, options = build_config_options_objects(LinkerTest, options, false)
84
104
 
105
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
106
+ @device_manager.expect(:reserve_device, device, no_lock: false)
107
+ @device_manager.expect(:release_device, nil, [device])
108
+
85
109
  linker = Linker.new(config: config)
86
- linker.deeplink(options: options)
110
+ RokuBuilder.stub(:device_manager, @device_manager) do
111
+ linker.deeplink(options: options)
112
+ end
87
113
  end
88
114
  def test_linker_link_nothing
89
115
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/launch/dev").
@@ -92,8 +118,14 @@ module RokuBuilder
92
118
  options = {deeplink: ''}
93
119
  config, options = build_config_options_objects(LinkerTest, options, false)
94
120
 
121
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
122
+ @device_manager.expect(:reserve_device, device, no_lock: false)
123
+ @device_manager.expect(:release_device, nil, [device])
124
+
95
125
  linker = Linker.new(config: config)
96
- linker.deeplink(options: options)
126
+ RokuBuilder.stub(:device_manager, @device_manager) do
127
+ linker.deeplink(options: options)
128
+ end
97
129
  end
98
130
  def test_linker_link_sideload_input
99
131
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/input?a=A&b=B:C&d=a%5Cb").
@@ -106,8 +138,14 @@ module RokuBuilder
106
138
  options = {input: 'a:A, b:B:C, d:a\b', working: true}
107
139
  config, options = build_config_options_objects(LinkerTest, options, false)
108
140
 
141
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
142
+ @device_manager.expect(:reserve_device, device, no_lock: false)
143
+ @device_manager.expect(:release_device, nil, [device])
144
+
109
145
  linker = Linker.new(config: config)
110
- linker.input(options: options)
146
+ RokuBuilder.stub(:device_manager, @device_manager) do
147
+ linker.input(options: options)
148
+ end
111
149
  end
112
150
  def test_linker_link_app_input
113
151
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/input?a=A&b=B:C&d=a%5Cb").
@@ -116,8 +154,14 @@ module RokuBuilder
116
154
  options = {input: 'a:A, b:B:C, d:a\b', app_id: "1234"}
117
155
  config, options = build_config_options_objects(LinkerTest, options, false)
118
156
 
157
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
158
+ @device_manager.expect(:reserve_device, device, no_lock: false)
159
+ @device_manager.expect(:release_device, nil, [device])
160
+
119
161
  linker = Linker.new(config: config)
120
- linker.input(options: options)
162
+ RokuBuilder.stub(:device_manager, @device_manager) do
163
+ linker.input(options: options)
164
+ end
121
165
  end
122
166
  def test_linker_link_nothing_input
123
167
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/input").
@@ -126,8 +170,14 @@ module RokuBuilder
126
170
  options = {input: ''}
127
171
  config, options = build_config_options_objects(LinkerTest, options, false)
128
172
 
173
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
174
+ @device_manager.expect(:reserve_device, device, no_lock: false)
175
+ @device_manager.expect(:release_device, nil, [device])
176
+
129
177
  linker = Linker.new(config: config)
130
- linker.input(options: options)
178
+ RokuBuilder.stub(:device_manager, @device_manager) do
179
+ linker.input(options: options)
180
+ end
131
181
  end
132
182
 
133
183
  def test_linker_list
@@ -143,13 +193,19 @@ module RokuBuilder
143
193
  options = {applist: true}
144
194
  config, options = build_config_options_objects(LinkerTest, options, false)
145
195
 
196
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
197
+ @device_manager.expect(:reserve_device, device, no_lock: false)
198
+ @device_manager.expect(:release_device, nil, [device])
199
+
146
200
  linker = Linker.new(config: config)
147
201
 
148
202
  print_count = 0
149
203
  did_print = Proc.new { |msg| print_count+=1 }
150
204
 
151
- linker.stub(:printf, did_print) do
152
- linker.applist(options: options)
205
+ RokuBuilder.stub(:device_manager, @device_manager) do
206
+ linker.stub(:printf, did_print) do
207
+ linker.applist(options: options)
208
+ end
153
209
  end
154
210
 
155
211
  assert_equal 6, print_count
@@ -10,14 +10,19 @@ module RokuBuilder
10
10
  RokuBuilder.setup_plugins
11
11
  register_plugins(Loader)
12
12
  @config, @options = build_config_options_objects(LoaderTest, {sideload: true, working: true}, false)
13
+ RokuBuilder.class_variable_set(:@@config, @config)
14
+ RokuBuilder.class_variable_set(:@@options, @options)
13
15
  @root_dir = @config.root_dir
14
- @device_config = @config.device_config
16
+ @device_config = @config.devices.first.last
15
17
  FileUtils.cp(File.join(@root_dir, "manifest_template"), File.join(@root_dir, "manifest"))
16
18
  @request_stubs = []
19
+ @device_manager = Minitest::Mock.new
20
+ @device = RokuBuilder::Device.new("roku", @config.raw[:devices][:roku])
17
21
  end
18
22
  def teardown
19
23
  FileUtils.rm(File.join(@root_dir, "manifest"))
20
24
  @request_stubs.each {|req| remove_request_stub(req)}
25
+ @device_manager.verify
21
26
  end
22
27
  def test_loader_parse_options_long
23
28
  parser = OptionParser.new
@@ -47,9 +52,13 @@ module RokuBuilder
47
52
  to_return(status: 200, body: "", headers: {}))
48
53
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
49
54
  to_return(status: 200, body: "Install Success", headers: {}))
55
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
56
+ @device_manager.expect(:release_device, nil, [@device])
50
57
 
51
- loader = Loader.new(config: @config)
52
- loader.sideload(options: @options)
58
+ RokuBuilder.stub(:device_manager, @device_manager) do
59
+ loader = Loader.new(config: @config)
60
+ loader.sideload(options: @options)
61
+ end
53
62
  end
54
63
  def test_loader_sideload_infile
55
64
  infile = File.join(@root_dir, "test.zip")
@@ -62,9 +71,13 @@ module RokuBuilder
62
71
  to_return(status: 200, body: "", headers: {}))
63
72
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
64
73
  to_return(status: 200, body: "Install Success", headers: {}))
74
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
75
+ @device_manager.expect(:release_device, nil, [@device])
65
76
 
66
- loader = Loader.new(config: @config)
67
- loader.sideload(options: @options)
77
+ RokuBuilder.stub(:device_manager, @device_manager) do
78
+ loader = Loader.new(config: @config)
79
+ loader.sideload(options: @options)
80
+ end
68
81
  end
69
82
  def test_loader_build_defining_folder_and_files
70
83
  loader = Loader.new(config: @config)
@@ -100,33 +113,49 @@ module RokuBuilder
100
113
  def test_loader_unload
101
114
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
102
115
  to_return(status: 200, body: "Delete Succeeded", headers: {}))
116
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
117
+ @device_manager.expect(:release_device, nil, [@device])
103
118
 
104
- loader = Loader.new(config: @config)
105
- loader.delete(options: @options)
119
+ RokuBuilder.stub(:device_manager, @device_manager) do
120
+ loader = Loader.new(config: @config)
121
+ loader.delete(options: @options)
122
+ end
106
123
  end
107
124
  def test_loader_unload_fail
108
125
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
109
126
  to_return(status: 200, body: "Delete Failed", headers: {}))
127
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
128
+ @device_manager.expect(:release_device, nil, [@device])
110
129
 
111
- loader = Loader.new(config: @config)
112
- assert_raises ExecutionError do
113
- loader.delete(options: @options)
130
+ RokuBuilder.stub(:device_manager, @device_manager) do
131
+ loader = Loader.new(config: @config)
132
+ assert_raises ExecutionError do
133
+ loader.delete(options: @options)
134
+ end
114
135
  end
115
136
  end
116
137
  def test_loader_squash
117
138
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
118
139
  to_return(status: 200, body: "Conversion succeeded", headers: {}))
140
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
141
+ @device_manager.expect(:release_device, nil, [@device])
119
142
 
120
- loader = Loader.new(config: @config)
121
- loader.squash(options: @options)
143
+ RokuBuilder.stub(:device_manager, @device_manager) do
144
+ loader = Loader.new(config: @config)
145
+ loader.squash(options: @options)
146
+ end
122
147
  end
123
148
  def test_loader_squash_fail
124
149
  @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
125
150
  to_return(status: 200, body: "Conversion failed", headers: {}))
151
+ @device_manager.expect(:reserve_device, @device, no_lock: false)
152
+ @device_manager.expect(:release_device, nil, [@device])
126
153
 
127
- loader = Loader.new(config: @config)
128
- assert_raises ExecutionError do
129
- loader.squash(options: @options)
154
+ RokuBuilder.stub(:device_manager, @device_manager) do
155
+ loader = Loader.new(config: @config)
156
+ assert_raises ExecutionError do
157
+ loader.squash(options: @options)
158
+ end
130
159
  end
131
160
  end
132
161
  def test_copy_files
@@ -21,8 +21,12 @@ module RokuBuilder
21
21
  user: "user",
22
22
  password: "password"
23
23
  }
24
- @config.instance_variable_set(:@parsed, {device_config: device_config, init_params: {}})
25
24
  @monitor = Monitor.new(config: @config)
25
+ @device_manager = Minitest::Mock.new
26
+ @device = RokuBuilder::Device.new("roku", device_config)
27
+ end
28
+ def teardown
29
+ @device_manager.verify
26
30
  end
27
31
  def test_scripter_parse_options_long
28
32
  parser = OptionParser.new
@@ -51,11 +55,15 @@ module RokuBuilder
51
55
  sleep(0.1)
52
56
  "q"
53
57
  }
58
+ @device_manager.expect(:reserve_device, @device, no_lock: true)
59
+ @device_manager.expect(:release_device, nil, [@device])
54
60
 
55
- Readline.stub(:readline, readline) do
56
- Net::Telnet.stub(:new, @connection) do
57
- @connection.stub(:waitfor, waitfor, "txt") do
58
- @monitor.monitor(options: @options)
61
+ RokuBuilder.stub(:device_manager, @device_manager) do
62
+ Readline.stub(:readline, readline) do
63
+ Net::Telnet.stub(:new, @connection) do
64
+ @connection.stub(:waitfor, waitfor, "txt") do
65
+ @monitor.monitor(options: @options)
66
+ end
59
67
  end
60
68
  end
61
69
  end
@@ -73,11 +81,16 @@ module RokuBuilder
73
81
  sleep(0.1)
74
82
  "q"
75
83
  }
76
- Readline.stub(:readline, readline) do
77
- Net::Telnet.stub(:new, @connection) do
78
- @connection.stub(:waitfor, waitfor, "txt") do
79
- @monitor.stub(:manage_text, "") do
80
- @monitor.monitor(options: @options)
84
+ @device_manager.expect(:reserve_device, @device, no_lock: true)
85
+ @device_manager.expect(:release_device, nil, [@device])
86
+
87
+ RokuBuilder.stub(:device_manager, @device_manager) do
88
+ Readline.stub(:readline, readline) do
89
+ Net::Telnet.stub(:new, @connection) do
90
+ @connection.stub(:waitfor, waitfor, "txt") do
91
+ @monitor.stub(:manage_text, "") do
92
+ @monitor.monitor(options: @options)
93
+ end
81
94
  end
82
95
  end
83
96
  end
@@ -110,12 +123,16 @@ module RokuBuilder
110
123
  "q"
111
124
  end
112
125
  }
113
-
114
- Readline.stub(:readline, readline) do
115
- Net::Telnet.stub(:new, @connection) do
116
- @connection.stub(:waitfor, waitfor, "txt") do
117
- @connection.stub(:puts, puts) do
118
- @monitor.monitor(options: @options)
126
+ @device_manager.expect(:reserve_device, @device, no_lock: true)
127
+ @device_manager.expect(:release_device, nil, [@device])
128
+
129
+ RokuBuilder.stub(:device_manager, @device_manager) do
130
+ Readline.stub(:readline, readline) do
131
+ Net::Telnet.stub(:new, @connection) do
132
+ @connection.stub(:waitfor, waitfor, "txt") do
133
+ @connection.stub(:puts, puts) do
134
+ @monitor.monitor(options: @options)
135
+ end
119
136
  end
120
137
  end
121
138
  end
@@ -82,14 +82,23 @@ module RokuBuilder
82
82
  options = {}
83
83
  options[type] = input.to_s
84
84
  config, options = build_config_options_objects(NavigatorTest, options, false)
85
+
86
+ device_manager = Minitest::Mock.new
87
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
88
+ device_manager.expect(:reserve_device, device, no_lock: true)
89
+ device_manager.expect(:release_device, nil, [device])
90
+
85
91
  navigator = Navigator.new(config: config)
86
- if success
87
- navigator.send(type, options: options)
88
- else
89
- assert_raises ExecutionError do
92
+ RokuBuilder.stub(:device_manager, device_manager) do
93
+ if success
90
94
  navigator.send(type, options: options)
95
+ else
96
+ assert_raises ExecutionError do
97
+ navigator.send(type, options: options)
98
+ end
91
99
  end
92
100
  end
101
+ device_manager.verify
93
102
  end
94
103
 
95
104
  def test_navigator_screen_secret
@@ -116,8 +125,16 @@ module RokuBuilder
116
125
  logger.expect(:debug, nil, ["Send Command: /keypress/Rev"])
117
126
  end
118
127
 
119
- navigator.screen(options: options)
128
+ device_manager = Minitest::Mock.new
129
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
130
+ device_manager.expect(:reserve_device, device, no_lock: true)
131
+ device_manager.expect(:release_device, nil, [device])
132
+
133
+ RokuBuilder.stub(:device_manager, device_manager) do
134
+ navigator.screen(options: options)
135
+ end
120
136
 
137
+ device_manager.verify
121
138
  logger.verify
122
139
  Logger.set_testing
123
140
  end
@@ -231,9 +248,18 @@ module RokuBuilder
231
248
  options = {navigate: true}
232
249
  config, options = build_config_options_objects(NavigatorTest, options, false)
233
250
  navigator = Navigator.new(config: config)
234
- navigator.stub(:read_char, "\u0003") do
235
- navigator.navigate(options: options)
251
+
252
+ device_manager = Minitest::Mock.new
253
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
254
+ device_manager.expect(:reserve_device, device, no_lock: true)
255
+ device_manager.expect(:release_device, nil, [device])
256
+
257
+ RokuBuilder.stub(:device_manager, device_manager) do
258
+ navigator.stub(:read_char, "\u0003") do
259
+ navigator.navigate(options: options)
260
+ end
236
261
  end
262
+ device_manager.verify
237
263
  end
238
264
 
239
265
  def test_navigator_interactive_nav
@@ -249,7 +275,7 @@ module RokuBuilder
249
275
  @i += 1
250
276
  char
251
277
  }
252
- thread_new = lambda { |char|
278
+ thread_new = lambda { |char,device|
253
279
  assert_equal "<", char
254
280
  }
255
281
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/Rev").
@@ -257,19 +283,31 @@ module RokuBuilder
257
283
  options = {navigate: true}
258
284
  config, options = build_config_options_objects(NavigatorTest, options, false)
259
285
  navigator = Navigator.new(config: config)
260
- navigator.stub(:read_char, read_char) do
261
- Thread.stub(:new, thread_new, "<") do
262
- navigator.navigate(options: options)
286
+
287
+ device_manager = Minitest::Mock.new
288
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
289
+ device_manager.expect(:reserve_device, device, no_lock: true)
290
+ device_manager.expect(:release_device, nil, [device])
291
+
292
+ RokuBuilder.stub(:device_manager, device_manager) do
293
+ navigator.stub(:read_char, read_char) do
294
+ Thread.stub(:new, thread_new, "<") do
295
+ navigator.navigate(options: options)
296
+ end
263
297
  end
264
298
  end
299
+ device_manager.verify
265
300
  end
266
- def test_navigator_hendle_interactive_text
301
+ def test_navigator_handle_interactive_text
267
302
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/LIT_b").
268
303
  to_return(status: 200, body: "", headers: {}))
269
304
  options = {navigate: true}
270
305
  config, options = build_config_options_objects(NavigatorTest, options, false)
271
306
  navigator = Navigator.new(config: config)
272
- navigator.send(:handle_navigate_input, "b")
307
+
308
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
309
+
310
+ navigator.send(:handle_navigate_input, "b", device)
273
311
  end
274
312
  def test_navigator_hendle_interactive_command
275
313
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/Play").
@@ -277,7 +315,10 @@ module RokuBuilder
277
315
  options = {navigate: true}
278
316
  config, options = build_config_options_objects(NavigatorTest, options, false)
279
317
  navigator = Navigator.new(config: config)
280
- navigator.send(:handle_navigate_input, "=")
318
+
319
+ device = RokuBuilder::Device.new("roku", config.raw[:devices][:roku])
320
+
321
+ navigator.send(:handle_navigate_input, "=", device)
281
322
  end
282
323
  def test_navigator_generate_mappings
283
324
  options = {navigate: true}