lib/calabash/console_helpers.rb in calabash-1.9.9.pre2 vs lib/calabash/console_helpers.rb in calabash-1.9.9.pre3

- old
+ new

@@ -1,61 +1,142 @@ require 'clipboard' module Calabash + + # Methods you can use in the Calabash console to help you + # interact with your app. + # @!visibility private module ConsoleHelpers - # Outputs all visible elements as a tree + + # Outputs all visible elements as a tree. def tree ConsoleHelpers.dump(Device.default.dump) true end - def self.save_old_readline_history - file_name = IRB.conf[:HISTORY_FILE] - - if File.exist?(file_name) - @@start_readline_history = File.readlines(file_name).map(&:chomp) - end - end - - def self.extended(base) - save_old_readline_history - end - + # List the visible element classes. def classes query("*").map{|e| e['class']}.uniq end + # List the visible element ids. def ids query("*").map{|e| e['id']}.compact end + # Copy all the commands entered in the current console session into the OS + # Clipboard. def copy ConsoleHelpers.copy true end + # Clear the console. def clear ConsoleHelpers.clear true end + # Puts a message of the day. + def message_of_the_day + messages = [ + "Let's get this done!", + 'Ready to rumble.', + 'Enjoy.', + 'Remember to breathe.', + 'Take a deep breath.', + "Isn't it time for a break?", + 'Can I get you a coffee?', + 'What is a calabash anyway?', + 'Smile! You are on camera!', + 'Let op! Wild Rooster!', + "Don't touch that button!", + "I'm gonna take this to 11.", + 'Console. Engaged.', + 'Your wish is my command.', + 'This console session was created just for you.', + 'Den som jager to harer, får ingen.', + 'Uti, non abuti.', + 'Non Satis Scire', + 'Nullius in verba', + 'Det ka æn jå væer ei jált' + ] + + puts Color.green("Calabash #{Calabash::VERSION} says: '#{messages.shuffle.first}'") + end + + # Turn on debug logging. + def verbose + if Calabash::Logger.log_levels.include?(:debug) + puts Color.blue('Debug logging is already turned on.') + else + Calabash::Logger.log_levels << :debug + puts Color.blue('Turned on debug logging.') + end + + true + end + + # Turn off debug logging. + def quiet + if Calabash::Logger.log_levels.include?(:debug) + puts Color.blue('Turned off debug logging.') + Calabash::Logger.log_levels.delete(:debug) + else + puts Color.blue('Debug logging is already turned off.') + end + + true + end + + # @!visibility private + def puts_console_details + puts '' + puts Color.blue('# => Useful Methods <= #') + puts Color.cyan('> ids => List all the visible ids.') + puts Color.cyan('> classes => List all the visible classes.') + puts Color.cyan("> tree => The app's visible view hierarchy.") + puts Color.cyan('> copy => Copy console commands to the Clipboard.') + puts Color.cyan('> clear => Clear the console.') + puts Color.cyan('> verbose => Turn debug logging on.') + puts Color.cyan('> quiet => Turn debug logging off.') + puts '' + end + + # @!visibility private + def self.save_old_readline_history + file_name = IRB.conf[:HISTORY_FILE] + + if File.exist?(file_name) + @@start_readline_history = File.readlines(file_name).map(&:chomp) + end + end + + # @!visibility private + def self.extended(base) + save_old_readline_history + end + + # @!visibility private def self.copy commands = filter_commands(current_console_history) string = commands.join($INPUT_RECORD_SEPARATOR) Clipboard.copy(string) end + # @!visibility private def self.clear if Gem.win_platform? system('cls') else system('clear') end @@start_readline_history = readline_history end + # @!visibility private def self.current_console_history length = readline_history.length - @@start_readline_history.length readline_history.last(length) end @@ -67,38 +148,45 @@ /\s*ensure_app_installed(\(|\z)/, /\s*uninstall_app(\(|\z)/, /\s*clear_app(\(|\z)/, /\s*stop_app(\(|\z)/) + # @!visibility private def self.filter_commands(commands) commands.reject {|command| command =~ FILTER_REGEX} end + # @!visibility private def self.readline_history Readline::HISTORY.to_a end + # @!visibility private def self.dump(json_data) json_data['children'].each {|child| write_child(child)} end + # @!visibility private def self.write_child(data, indentation=0) render(data, indentation) data['children'].each do |child| write_child(child, indentation+1) end end + # @!visibility private def self.render(data, indentation) raise AbstractMethodError end + # @!visibility private def self.output(string, indentation) (indentation*2).times {print " "} print "#{string}" end + # @!visibility private def self.visible?(data) raise AbstractMethodError end end end