require 'rubygems' require 'cucumber' require 'cucumber/rake/task' require 'rake/task'
Cucumber::Rake::Task.new(:features) do |t|
t.profile = 'default'
end
Cucumber::Rake::Task.new(:api) do |t|
t.profile = 'api'
end
task :DEFAULT => :features
task :web, [:tag, :browser] do |t, args|
Cucumber::Rake::Task.new :cucumber_web do |t| ENV['BROWSER'] = args[:browser].to_s.gsub('browser:', '').strip browser = ENV['BROWSER'] tag = args[:tag] t.profile = 'web' if tag.nil? t.cucumber_opts = html_report_flag("Web_#{browser}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("Web_#{browser}")}" end end Rake::Task[:cucumber_web].invoke
end
task :android_avd, [:tag, :avd] do |t, args|
Cucumber::Rake::Task.new :cucumber_android_avd do |t| ENV['DEVICE'] = args[:avd].to_s.gsub('avd:', '').strip emulator = ENV['DEVICE'] tag = args[:tag] t.profile = 'android_avd' if tag.nil? t.cucumber_opts = html_report_flag("Android_#{emulator}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("Android_#{emulator}")}" end end Rake::Task[:cucumber_android_avd].invoke
end
task :sauce_android_avd, [:tag, :avd] do |t, args|
Cucumber::Rake::Task.new :cucumber_android_avd do |t| test_device_name = args[:avd].to_s.gsub('avd:', '').strip device_info = sauce_emulator_from_yml(test_device_name) ENV['DEVICE'] = device_info['name'] ENV['VERSION'] = device_info['version'] tag = args[:tag] t.profile = 'sauce_android_avd' if tag.nil? t.cucumber_opts = html_report_flag("Sauce_Android_#{test_device_name}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("Sauce_Android_#{test_device_name}")}" end end Rake::Task[:cucumber_android_avd].invoke
end
task :ios_simulator, [:tag, :simulator] do |t, args|
Cucumber::Rake::Task.new :cucumber_ios_simulator do |t| test_device_name = args[:simulator].to_s.gsub('simulator:', '').strip device_info = ios_simulator_from_yml(test_device_name) ENV['DEVICE'] = device_info['name'] ENV['VERSION'] = device_info['version'] tag = args[:tag] t.profile = 'ios_simulator' if tag.nil? t.cucumber_opts = html_report_flag("iOS_#{test_device_name}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("iOS_#{test_device_name}")}" end end Rake::Task[:cucumber_ios_simulator].invoke
end
task :sauce_ios_simulator, [:tag, :simulator] do |t, args|
Cucumber::Rake::Task.new :cucumber_ios_simulator do |t| test_device_name = args[:simulator].to_s.gsub('simulator:', '').strip device_info = sauce_simulator_from_yml(test_device_name) ENV['DEVICE'] = device_info['name'] ENV['VERSION'] = device_info['version'] tag = args[:tag] t.profile = 'sauce_ios_simulator' if tag.nil? t.cucumber_opts = html_report_flag("Sauce_iOS_#{test_device_name}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("Sauce_iOS_#{test_device_name}")}" end end Rake::Task[:cucumber_ios_simulator].invoke
end
task :android_avds, [:tag, :devices] do |t, args|
$devices = args[:devices] $tag = args[:tag] if $devices.to_s.downcase == 'all' devices = all_android_emulators $devices = devices.map { |device| "avd:#{device}" } end require_relative 'hack.rb'
end
task :android_device, [:tag, :device] do |t, args|
Cucumber::Rake::Task.new :cucumber_android_device do |t| devices = all_android_devices test_device_name = args[:device].to_s.gsub('device:', '').strip device_name = devices.values_at(test_device_name) tag = args[:tag] ENV['DEVICE'] = device_name.first device = ENV['DEVICE'] t.profile = 'android_device' if tag.nil? t.cucumber_opts = html_report_flag("Android_#{device}") else t.cucumber_opts = "--tags @#{tag.gsub('@', '')} #{html_report_flag("Android_#{device}")}" end end Rake::Task[:cucumber_android_device].invoke
end
def create_directory(path, dir_name)
dir = "#{path}/#{dir_name}" Dir.mkdir(path) unless Dir.exist? path Dir.mkdir(dir) unless Dir.exist? dir
end
def all_android_emulators
require 'yaml' YAML.load_file(Dir.pwd + '/features/support/mobile/platform/android/inventory/emulators.yml')
end
def all_android_devices
require 'yaml' YAML.load_file(Dir.pwd + '/features/support/mobile/platform/android/inventory/devices.yml')
end
def ios_device_from_yml(name)
require 'yaml' devices = YAML.load_file(Dir.pwd + '/features/support/mobile/platform/ios/inventory/devices.yml') devices[name]
end
def ios_simulator_from_yml(name)
require 'yaml' simulators = YAML.load_file(Dir.pwd + '/features/support/mobile/platform/ios/inventory/simulators.yml') simulators[name]
end
def sauce_emulator_from_yml(name)
require 'yaml' emulators = YAML.load_file(Dir.pwd + '/features/support/mobile/platform/android/inventory/sauce.yml') emulators[name]
end
def sauce_simulator_from_yml(name)
require 'yaml' emulators = YAML.load_file(Dir.pwd + '/features/support/mobile/platform/ios/inventory/sauce.yml') emulators[name]
end
def android_device_from_yml(name)
require 'yaml' YAML.load_file(Dir.pwd + '/features/support/mobile/platform/android/inventory/devices.yml')[name]
end
def path_to_results_folder
"#{Dir.pwd}/features/results"
end
def date_folder
dt = Time.new "#{dt.year}#{dt.month}#{dt.day}"
end
def unique_postfix
dt = Time.new "#{dt.hour}_#{dt.min}_#{dt.sec}"
end
def html_report_flag(name)
path = path_to_results_folder date_dir = date_folder uniq_postfix = unique_postfix create_directory(path, date_dir) report_name = "#{name}__#{uniq_postfix}.html" "-f html --out #{path}/#{date_dir}/#{report_name}"
end