diff --git a/.gitignore b/.gitignore index 7e396fd..afb4c38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ osaka.tmproj osaka*.gem Gemfile.lock +.DS_Store diff --git a/lib/osaka/commandrunner.rb b/lib/osaka/commandrunner.rb index 448346f..c770842 100644 --- a/lib/osaka/commandrunner.rb +++ b/lib/osaka/commandrunner.rb @@ -7,9 +7,11 @@ class SystemCommandFailed < RuntimeError end module CommandRunner - def self.run(command) + def self.run(command, debug = false) + puts "Execute: #{command} " if debug output = `#{command} 2>&1` raise Osaka::SystemCommandFailed, "message" + output unless $?.success? + puts "Output was: #{output}" if debug output end end diff --git a/lib/osaka/keynote.rb b/lib/osaka/keynote.rb index 7e10091..74e73a5 100644 --- a/lib/osaka/keynote.rb +++ b/lib/osaka/keynote.rb @@ -25,5 +25,18 @@ def light_table_view control.click(at.menu_item("Light Table").menu(1).menu_bar_item("View").menu_bar(1)) end end + + def open (filename) + abolutePathFileName = File.absolute_path(filename) + new_window = do_and_wait_for_new_window { + # jwg - weird that keynote open via osascript is flakey for Mavericks + # was: control.tell("open \"#{abolutePathFileName}\"") + # But now uses the command line + CommandRunner::run("open #{abolutePathFileName}", ScriptRunner::debug_prints?) + } + control.wait_until_exists(at.window(File.basename(filename))) + control.set_current_window(new_window) + end + end end \ No newline at end of file diff --git a/lib/osaka/keynoteflow.rb b/lib/osaka/keynoteflow.rb index 9f35252..516cbff 100644 --- a/lib/osaka/keynoteflow.rb +++ b/lib/osaka/keynoteflow.rb @@ -4,21 +4,20 @@ module CommonFlows def self.keynote_combine_files(result_file, files_to_merge) keynote = Osaka::Keynote.new keynote.activate + keynote.close_template_chooser_if_any keynote.raise_error_on_open_standard_windows("All Keynote windows must be closed before running this flow") files_to_merge = [files_to_merge].flatten keynote.open(files_to_merge.shift) - keynote.light_table_view + keynote.select_all_slides keynote.save_as(result_file) - - + files_to_merge.each { |file| combine_keynote = Osaka::Keynote.new combine_keynote.open(file) combine_keynote.select_all_slides combine_keynote.copy combine_keynote.close - keynote.select_all_slides keynote.paste } @@ -27,11 +26,47 @@ def self.keynote_combine_files(result_file, files_to_merge) keynote.quit end + def self.keynote_open_yield_close(files) + keynote = Osaka::Keynote.new + keynote.activate + keynote.close_template_chooser_if_any + keynote.raise_error_on_open_standard_windows("All Keynote windows must be closed before running this flow") + files = [files].flatten + files.each { |file| + keynote = Osaka::Keynote.new + keynote.open(file) + yield keynote + keynote.close + } + keynote.quit + end + def self.keynote_combine_files_from_directory_sorted(result_file, directory = ".", pattern = /^.*\.key$/) files_in_directory = Dir.new(directory).entries files_in_directory.select! { |f| f =~ pattern } files_to_open = files_in_directory.collect { |f| File.join(directory, f)} keynote_combine_files(result_file, files_to_open.sort) end + + def self.output message + puts message + end + + def self.keynote_combine_files_from_list(result_file, directory = ".", keynote_files) + files_to_open = keynote_files.collect { |f| File.join(directory, f)} + missing_files = "" + files_to_open.each { |f| + if !File.exist?(f) + missing_files += "\n" + f + end + } + + if missing_files.empty? + keynote_combine_files(result_file, files_to_open) + else + output "These files do not exist: " + missing_files + end + + end end \ No newline at end of file diff --git a/lib/osaka/osakaexpectations.rb b/lib/osaka/osakaexpectations.rb index c09dae3..3d0ca6e 100644 --- a/lib/osaka/osakaexpectations.rb +++ b/lib/osaka/osakaexpectations.rb @@ -3,134 +3,136 @@ module Osaka module OsakaExpectations def simulate_mac_version(version) - control.should_receive(:mac_version).and_return(version) + expect(control).to receive(:mac_version).and_return(version) end - + def expect_execute_osascript(command = nil) return Osaka::ScriptRunner.should_receive(:execute).with(command) unless command.nil? Osaka::ScriptRunner.should_receive(:execute) end def expect_clone - control.should_receive(:clone) + expect(control).to receive(:clone) end def expect_activate - control.should_receive(:activate) + expect(control).to receive(:activate) + # expect(control).to receive(:activate) end def expect_launch - control.should_receive(:launch) + expect(control).to receive(:launch) end def expect_focus - control.should_receive(:focus) + expect(control).to receive(:focus) end def expect_focus! - control.should_receive(:focus!) + expect(control).to receive(:focus!) end def expect_set_current_window(name) - control.should_receive(:set_current_window).with(name) + expect(control).to receive(:set_current_window).with(name) end def expect_running? - control.should_receive(:running?) + expect(control).to receive(:running?) end def expect_quit - control.should_receive(:quit) + expect(control).to receive(:quit) end def expect_window_list - control.should_receive(:window_list) + expect(control).to receive(:window_list) end def expect_standard_window_list - control.should_receive(:standard_window_list) + expect(control).to receive(:standard_window_list) end def expect_current_window_name - control.should_receive(:current_window_name) + expect(control).to receive(:current_window_name) + # expect(control).to receive(:current_window_name) end def expect_set(element, location, value) - control.should_receive(:set).with(element, location, value) + expect(control).to receive(:set).with(element, location, value) end def expect_set!(element, location, value) - control.should_receive(:set!).with(element, location, value) + expect(control).to receive(:set!).with(element, location, value) end def expect_get_app!(element) - control.should_receive(:get_app!).with(element) + expect(control).to receive(:get_app!).with(element) end def expect_keystroke(key, modifier = []) - control.should_receive(:keystroke).with(key, modifier).and_return(control) unless modifier.empty? - control.should_receive(:keystroke).with(key).and_return(control) if modifier.empty? + expect(control).to receive(:keystroke).with(key, modifier).and_return(control) unless modifier.empty? + expect(control).to receive(:keystroke).with(key).and_return(control) if modifier.empty? end def expect_keystroke!(key, modifier = []) - control.should_receive(:keystroke!).with(key, modifier).and_return(control) unless modifier.empty? - control.should_receive(:keystroke!).with(key).and_return(control) if modifier.empty? + expect(control).to receive(:keystroke!).with(key, modifier).and_return(control) unless modifier.empty? + expect(control).to receive(:keystroke!).with(key).and_return(control) if modifier.empty? end def expect_click!(location) - control.should_receive(:click!).with(location).and_return(control) + expect(control).to receive(:click!).with(location).and_return(control) end def expect_click(location) - control.should_receive(:click).with(location).and_return(control) + expect(control).to receive(:click).with(location).and_return(control) end def expect_click_menu_bar(menu_item, menu_name) - control.should_receive(:click_menu_bar).with(menu_item, menu_name).and_return(control) + expect(control).to receive(:click_menu_bar).with(menu_item, menu_name).and_return(control) end def expect_get!(element, location) - control.should_receive(:get!).with(element, location) + expect(control).to receive(:get!).with(element, location) end def expect_tell(do_this) - control.should_receive(:tell).with(do_this) + expect(control).to receive(:tell).with(do_this) end def expect_system_event(event) - control.should_receive(:system_event).with(event) + expect(control).to receive(:system_event).with(event) end def expect_system_event!(event) - control.should_receive(:system_event!).with(event) + expect(control).to receive(:system_event!).with(event) end def expect_exists?(location) - control.should_receive(:exists?).with(location) + expect(control).to receive(:exists?).with(location) end def expect_not_exists?(location) - control.should_receive(:not_exists?).with(location) + expect(control).to receive(:not_exists?).with(location) end def expect_wait_until_exists(*location) - control.should_receive(:wait_until_exists).with(*location) + expect(control).to receive(:wait_until_exists).with(*location) end def expect_wait_until_exists!(*location) - control.should_receive(:wait_until_exists!).with(*location) + expect(control).to receive(:wait_until_exists!).with(*location) end def expect_wait_until_not_exists(location) - control.should_receive(:wait_until_not_exists).with(location) + expect(control).to receive(:wait_until_not_exists).with(location) end def expect_wait_until_not_exists!(location, action) - control.should_receive(:wait_until_not_exists!).with(location) + expect(control).to receive(:wait_until_not_exists!).with(location) end def expect_until_not_exists!(element) - control.should_receive(:until_not_exists!).with(element).and_yield + expect(control).to receive(:until_not_exists!).with(element).and_yield end end end \ No newline at end of file diff --git a/lib/osaka/pages.rb b/lib/osaka/pages.rb index 4a4a26b..7e90222 100644 --- a/lib/osaka/pages.rb +++ b/lib/osaka/pages.rb @@ -89,7 +89,7 @@ def self.create_document(filename, &block) def new_document super - if control.current_window_name == "Template Chooser" + if template_chooser? control.set_current_window(do_and_wait_for_new_window { control.click(at.button("Choose").window("Template Chooser")) }) diff --git a/lib/osaka/remotecontrol.rb b/lib/osaka/remotecontrol.rb index 9dda4a3..a6f1ddf 100644 --- a/lib/osaka/remotecontrol.rb +++ b/lib/osaka/remotecontrol.rb @@ -150,6 +150,10 @@ def click_menu_bar(menu_item, menu_name) click!(menu_item + at.menu(1) + menu_bar_location) end + def click_menu_bar_by_name(menu_item_name, menu_name) + click_menu_bar(at.menu_item(menu_item_name), menu_name) + end + def set!(element, location, value) encoded_value = (value.class == String) ? "\"#{value}\"" : value.to_s check_output( system_event!("set #{element}#{construct_prefixed_location(location)} to #{encoded_value}"), "set") @@ -241,6 +245,8 @@ def mac_version :lion when /^10.8.*/ :mountain_lion + when /^10.9.*/ + :mavericks else :other end diff --git a/lib/osaka/typicalapplication.rb b/lib/osaka/typicalapplication.rb index 87856da..e4a852d 100644 --- a/lib/osaka/typicalapplication.rb +++ b/lib/osaka/typicalapplication.rb @@ -114,8 +114,10 @@ def duplicate end def duplicate_and_close_original - new_instance = duplicate - close + original_window_name = control.current_window_name + new_instance = duplicate + control.click_menu_bar_by_name(original_window_name, "Window") + close @control = new_instance.control end @@ -199,6 +201,24 @@ def select_file_from_open_dialog(filename, dialog_location) dialog.set_folder(File.dirname(filename)) dialog.select_file(File.basename(filename)) end + + # jwg add tests + def template_chooser? + focus + current_window_name = control.current_window_name + current_window_name == "Choose a Theme" || + current_window_name == "Choose a Template" || + current_window_name == "Template Chooser" ? true : false + end + + def close_template_chooser_if_any + focus + if template_chooser? + window = at.window(control.current_window_name) + close + control.wait_until_not_exists!(window) + end + end def raise_error_on_open_standard_windows(error_message) raise Osaka::ApplicationWindowsMustBeClosed, error_message if ! control.standard_window_list.empty? diff --git a/make-gem.sh b/make-gem.sh new file mode 100755 index 0000000..9f1a79b --- /dev/null +++ b/make-gem.sh @@ -0,0 +1,3 @@ +#/bin/bash +gem build osaka.gemspec +gem install osaka-0.4.8.gem diff --git a/run_each_test.sh b/run_each_test.sh new file mode 100755 index 0000000..159d9ef --- /dev/null +++ b/run_each_test.sh @@ -0,0 +1,40 @@ +UNIT_TESTS+=" ./spec/calculator_spec.rb" +UNIT_TESTS+=" ./spec/defaultssystem_spec.rb" +UNIT_TESTS+=" ./spec/keynote_flows_spec.rb" +UNIT_TESTS+=" ./spec/keynote_spec.rb" +UNIT_TESTS+=" ./spec/launchservices_spec.rb" +UNIT_TESTS+=" ./spec/location_spec.rb" +UNIT_TESTS+=" ./spec/mailmergeflow_spec.rb" +UNIT_TESTS+=" ./spec/numbers_spec.rb" +UNIT_TESTS+=" ./spec/osakaexpectations_spec.rb" +# UNIT_TESTS+=" ./spec/pages_spec.rb" +UNIT_TESTS+=" ./spec/preview_spec.rb" +UNIT_TESTS+=" ./spec/remotecontrol_spec.rb" +UNIT_TESTS+=" ./spec/scriptrunner_spec.rb" +UNIT_TESTS+=" ./spec/textedit_spec.rb" +UNIT_TESTS+=" ./spec/typicalapplication_spec.rb" +UNIT_TESTS+=" ./spec/typicalfinderdialog_spec.rb" +UNIT_TESTS+=" ./spec/typicalopendialog_spec.rb" +UNIT_TESTS+=" ./spec/typicalprintdialog_spec.rb" +UNIT_TESTS+=" ./spec/typicalsavedialog_spec.rb" + +INTEGRATION_TESTS+=" ./spec/integration_calculator_spec.rb" +INTEGRATION_TESTS+=" ./spec/integration_keynote_spec.rb" +INTEGRATION_TESTS+=" ./spec/integration_numbers_spec.rb" +INTEGRATION_TESTS+=" ./spec/integration_preview_spec.rb" +INTEGRATION_TESTS+=" ./spec/integration_textedit_spec.rb" +## INTEGRATION_TESTS+=" ./spec/integration_pages_numbers_mail_merge_spec.rb" + +export LANG=en_US.UTF-8 + +if [ "$1" == "u" ] ; then + ruby -S rspec $UNIT_TESTS + +elif [ "$1" == "i" ] ; then + ruby -S rspec $INTEGRATION_TESTS +else + ruby -S rspec $UNIT_TESTS + ruby -S rspec $INTEGRATION_TESTS +fi + + diff --git a/spec/assets/01_first_slides.key b/spec/assets/01_first_slides.key deleted file mode 100644 index fdd39c3..0000000 Binary files a/spec/assets/01_first_slides.key and /dev/null differ diff --git a/spec/assets/02_second_slides.key b/spec/assets/02_second_slides.key deleted file mode 100644 index 0a4f501..0000000 Binary files a/spec/assets/02_second_slides.key and /dev/null differ diff --git a/spec/assets/03_third_slides.key b/spec/assets/03_third_slides.key deleted file mode 100644 index 1b829b1..0000000 Binary files a/spec/assets/03_third_slides.key and /dev/null differ diff --git a/spec/assets/key-09/01_first_slides.key b/spec/assets/key-09/01_first_slides.key new file mode 100644 index 0000000..911ab70 Binary files /dev/null and b/spec/assets/key-09/01_first_slides.key differ diff --git a/spec/assets/key-09/02_second_slides.key b/spec/assets/key-09/02_second_slides.key new file mode 100644 index 0000000..152eed9 Binary files /dev/null and b/spec/assets/key-09/02_second_slides.key differ diff --git a/spec/assets/key-09/03_third_slides.key b/spec/assets/key-09/03_third_slides.key new file mode 100644 index 0000000..530df31 Binary files /dev/null and b/spec/assets/key-09/03_third_slides.key differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/Girl_and_Snowcone-small-97.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/Girl_and_Snowcone-small-97.jpg new file mode 100644 index 0000000..49cd917 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/Girl_and_Snowcone-small-97.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/Happy_Girls-small-95.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/Happy_Girls-small-95.jpg new file mode 100644 index 0000000..23ff195 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/Happy_Girls-small-95.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt0@2x-99.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt0@2x-99.jpg new file mode 100644 index 0000000..488f912 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt0@2x-99.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt10@2x-109.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt10@2x-109.jpg new file mode 100644 index 0000000..133f299 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt10@2x-109.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt11@2x-110.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt11@2x-110.jpg new file mode 100644 index 0000000..11cd202 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt11@2x-110.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt12@2x-111.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt12@2x-111.jpg new file mode 100644 index 0000000..254a2d3 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt12@2x-111.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt13@2x-112.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt13@2x-112.jpg new file mode 100644 index 0000000..5387972 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt13@2x-112.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt1@2x-100.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt1@2x-100.jpg new file mode 100644 index 0000000..5cf36ee Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt1@2x-100.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt2@2x-101.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt2@2x-101.jpg new file mode 100644 index 0000000..7a52df8 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt2@2x-101.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt3@2x-102.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt3@2x-102.jpg new file mode 100644 index 0000000..08b96be Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt3@2x-102.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt4@2x-103.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt4@2x-103.jpg new file mode 100644 index 0000000..8c8cafc Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt4@2x-103.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt5@2x-104.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt5@2x-104.jpg new file mode 100644 index 0000000..42694af Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt5@2x-104.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt6@2x-105.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt6@2x-105.jpg new file mode 100644 index 0000000..25ecd11 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt6@2x-105.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt7@2x-106.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt7@2x-106.jpg new file mode 100644 index 0000000..68d01bd Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt7@2x-106.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt8@2x-107.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt8@2x-107.jpg new file mode 100644 index 0000000..1a1ad1b Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt8@2x-107.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/mt9@2x-108.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/mt9@2x-108.jpg new file mode 100644 index 0000000..9e529bd Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/mt9@2x-108.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/st0-117.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/st0-117.jpg new file mode 100644 index 0000000..b8cdae2 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/st0-117.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/st1-121.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/st1-121.jpg new file mode 100644 index 0000000..e95f6ae Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/st1-121.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Data/st2-124.jpg b/spec/assets/key-v6.2/01_first_slides.key/Data/st2-124.jpg new file mode 100644 index 0000000..f859845 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Data/st2-124.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Index.zip b/spec/assets/key-v6.2/01_first_slides.key/Index.zip new file mode 100644 index 0000000..9b129dc Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Index.zip differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/Metadata/BuildVersionHistory.plist b/spec/assets/key-v6.2/01_first_slides.key/Metadata/BuildVersionHistory.plist new file mode 100644 index 0000000..91d49bd --- /dev/null +++ b/spec/assets/key-v6.2/01_first_slides.key/Metadata/BuildVersionHistory.plist @@ -0,0 +1,9 @@ + + + + + local build-Nov 15 2011 + local build-Jun 29 2012 + M6.2-1861-1 + + diff --git a/spec/assets/key-v6.2/01_first_slides.key/Metadata/DocumentIdentifier b/spec/assets/key-v6.2/01_first_slides.key/Metadata/DocumentIdentifier new file mode 100644 index 0000000..95af507 --- /dev/null +++ b/spec/assets/key-v6.2/01_first_slides.key/Metadata/DocumentIdentifier @@ -0,0 +1 @@ +F626FDF2-0A41-4A05-82B0-F76B817A667D \ No newline at end of file diff --git a/spec/assets/key-v6.2/01_first_slides.key/Metadata/Properties.plist b/spec/assets/key-v6.2/01_first_slides.key/Metadata/Properties.plist new file mode 100644 index 0000000..7204799 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/Metadata/Properties.plist differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/preview-micro.jpg b/spec/assets/key-v6.2/01_first_slides.key/preview-micro.jpg new file mode 100644 index 0000000..eff9d60 Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/preview-micro.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/preview-web.jpg b/spec/assets/key-v6.2/01_first_slides.key/preview-web.jpg new file mode 100644 index 0000000..1f4418c Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/preview-web.jpg differ diff --git a/spec/assets/key-v6.2/01_first_slides.key/preview.jpg b/spec/assets/key-v6.2/01_first_slides.key/preview.jpg new file mode 100644 index 0000000..02e24fc Binary files /dev/null and b/spec/assets/key-v6.2/01_first_slides.key/preview.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/Girl_and_Snowcone-small-109.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/Girl_and_Snowcone-small-109.jpg new file mode 100644 index 0000000..49cd917 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/Girl_and_Snowcone-small-109.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/Happy_Girls-small-107.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/Happy_Girls-small-107.jpg new file mode 100644 index 0000000..23ff195 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/Happy_Girls-small-107.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt0@2x-111.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt0@2x-111.jpg new file mode 100644 index 0000000..488f912 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt0@2x-111.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt10@2x-121.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt10@2x-121.jpg new file mode 100644 index 0000000..133f299 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt10@2x-121.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt11@2x-122.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt11@2x-122.jpg new file mode 100644 index 0000000..11cd202 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt11@2x-122.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt12@2x-123.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt12@2x-123.jpg new file mode 100644 index 0000000..254a2d3 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt12@2x-123.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt13@2x-124.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt13@2x-124.jpg new file mode 100644 index 0000000..5387972 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt13@2x-124.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt1@2x-112.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt1@2x-112.jpg new file mode 100644 index 0000000..5cf36ee Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt1@2x-112.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt2@2x-113.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt2@2x-113.jpg new file mode 100644 index 0000000..7a52df8 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt2@2x-113.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt3@2x-114.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt3@2x-114.jpg new file mode 100644 index 0000000..08b96be Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt3@2x-114.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt4@2x-115.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt4@2x-115.jpg new file mode 100644 index 0000000..8c8cafc Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt4@2x-115.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt5@2x-116.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt5@2x-116.jpg new file mode 100644 index 0000000..42694af Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt5@2x-116.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt6@2x-117.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt6@2x-117.jpg new file mode 100644 index 0000000..25ecd11 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt6@2x-117.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt7@2x-118.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt7@2x-118.jpg new file mode 100644 index 0000000..68d01bd Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt7@2x-118.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt8@2x-119.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt8@2x-119.jpg new file mode 100644 index 0000000..1a1ad1b Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt8@2x-119.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/mt9@2x-120.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/mt9@2x-120.jpg new file mode 100644 index 0000000..9e529bd Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/mt9@2x-120.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/st0-133.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/st0-133.jpg new file mode 100644 index 0000000..b02724a Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/st0-133.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/st1-138.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/st1-138.jpg new file mode 100644 index 0000000..4237aed Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/st1-138.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Data/st2-142.jpg b/spec/assets/key-v6.2/02_second_slides.key/Data/st2-142.jpg new file mode 100644 index 0000000..91ab4e9 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Data/st2-142.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Index.zip b/spec/assets/key-v6.2/02_second_slides.key/Index.zip new file mode 100644 index 0000000..aa72596 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Index.zip differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/Metadata/BuildVersionHistory.plist b/spec/assets/key-v6.2/02_second_slides.key/Metadata/BuildVersionHistory.plist new file mode 100644 index 0000000..1ebbca1 --- /dev/null +++ b/spec/assets/key-v6.2/02_second_slides.key/Metadata/BuildVersionHistory.plist @@ -0,0 +1,8 @@ + + + + + local build-Nov 15 2011 + M6.2-1861-1 + + diff --git a/spec/assets/key-v6.2/02_second_slides.key/Metadata/DocumentIdentifier b/spec/assets/key-v6.2/02_second_slides.key/Metadata/DocumentIdentifier new file mode 100644 index 0000000..054c19e --- /dev/null +++ b/spec/assets/key-v6.2/02_second_slides.key/Metadata/DocumentIdentifier @@ -0,0 +1 @@ +3D3D0D28-B768-47C9-8EB9-A8503176D20E \ No newline at end of file diff --git a/spec/assets/key-v6.2/02_second_slides.key/Metadata/Properties.plist b/spec/assets/key-v6.2/02_second_slides.key/Metadata/Properties.plist new file mode 100644 index 0000000..ea92376 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/Metadata/Properties.plist differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/preview-micro.jpg b/spec/assets/key-v6.2/02_second_slides.key/preview-micro.jpg new file mode 100644 index 0000000..d588bb0 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/preview-micro.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/preview-web.jpg b/spec/assets/key-v6.2/02_second_slides.key/preview-web.jpg new file mode 100644 index 0000000..590dfc9 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/preview-web.jpg differ diff --git a/spec/assets/key-v6.2/02_second_slides.key/preview.jpg b/spec/assets/key-v6.2/02_second_slides.key/preview.jpg new file mode 100644 index 0000000..f2a17f5 Binary files /dev/null and b/spec/assets/key-v6.2/02_second_slides.key/preview.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/Girl_and_Snowcone-small-109.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/Girl_and_Snowcone-small-109.jpg new file mode 100644 index 0000000..49cd917 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/Girl_and_Snowcone-small-109.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/Happy_Girls-small-107.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/Happy_Girls-small-107.jpg new file mode 100644 index 0000000..23ff195 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/Happy_Girls-small-107.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt0@2x-111.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt0@2x-111.jpg new file mode 100644 index 0000000..488f912 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt0@2x-111.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt10@2x-121.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt10@2x-121.jpg new file mode 100644 index 0000000..133f299 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt10@2x-121.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt11@2x-122.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt11@2x-122.jpg new file mode 100644 index 0000000..11cd202 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt11@2x-122.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt12@2x-123.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt12@2x-123.jpg new file mode 100644 index 0000000..254a2d3 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt12@2x-123.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt13@2x-124.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt13@2x-124.jpg new file mode 100644 index 0000000..5387972 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt13@2x-124.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt1@2x-112.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt1@2x-112.jpg new file mode 100644 index 0000000..5cf36ee Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt1@2x-112.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt2@2x-113.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt2@2x-113.jpg new file mode 100644 index 0000000..7a52df8 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt2@2x-113.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt3@2x-114.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt3@2x-114.jpg new file mode 100644 index 0000000..08b96be Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt3@2x-114.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt4@2x-115.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt4@2x-115.jpg new file mode 100644 index 0000000..8c8cafc Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt4@2x-115.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt5@2x-116.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt5@2x-116.jpg new file mode 100644 index 0000000..42694af Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt5@2x-116.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt6@2x-117.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt6@2x-117.jpg new file mode 100644 index 0000000..25ecd11 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt6@2x-117.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt7@2x-118.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt7@2x-118.jpg new file mode 100644 index 0000000..68d01bd Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt7@2x-118.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt8@2x-119.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt8@2x-119.jpg new file mode 100644 index 0000000..1a1ad1b Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt8@2x-119.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/mt9@2x-120.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/mt9@2x-120.jpg new file mode 100644 index 0000000..9e529bd Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/mt9@2x-120.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/st0-143.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/st0-143.jpg new file mode 100644 index 0000000..4871e83 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/st0-143.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/st1-144.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/st1-144.jpg new file mode 100644 index 0000000..f0271cb Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/st1-144.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Data/st2-145.jpg b/spec/assets/key-v6.2/03_third_slides.key/Data/st2-145.jpg new file mode 100644 index 0000000..f110080 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Data/st2-145.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Index.zip b/spec/assets/key-v6.2/03_third_slides.key/Index.zip new file mode 100644 index 0000000..23fdbcf Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Index.zip differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/Metadata/BuildVersionHistory.plist b/spec/assets/key-v6.2/03_third_slides.key/Metadata/BuildVersionHistory.plist new file mode 100644 index 0000000..1ebbca1 --- /dev/null +++ b/spec/assets/key-v6.2/03_third_slides.key/Metadata/BuildVersionHistory.plist @@ -0,0 +1,8 @@ + + + + + local build-Nov 15 2011 + M6.2-1861-1 + + diff --git a/spec/assets/key-v6.2/03_third_slides.key/Metadata/DocumentIdentifier b/spec/assets/key-v6.2/03_third_slides.key/Metadata/DocumentIdentifier new file mode 100644 index 0000000..054c19e --- /dev/null +++ b/spec/assets/key-v6.2/03_third_slides.key/Metadata/DocumentIdentifier @@ -0,0 +1 @@ +3D3D0D28-B768-47C9-8EB9-A8503176D20E \ No newline at end of file diff --git a/spec/assets/key-v6.2/03_third_slides.key/Metadata/Properties.plist b/spec/assets/key-v6.2/03_third_slides.key/Metadata/Properties.plist new file mode 100644 index 0000000..e42ee28 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/Metadata/Properties.plist differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/preview-micro.jpg b/spec/assets/key-v6.2/03_third_slides.key/preview-micro.jpg new file mode 100644 index 0000000..b667f59 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/preview-micro.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/preview-web.jpg b/spec/assets/key-v6.2/03_third_slides.key/preview-web.jpg new file mode 100644 index 0000000..4f33579 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/preview-web.jpg differ diff --git a/spec/assets/key-v6.2/03_third_slides.key/preview.jpg b/spec/assets/key-v6.2/03_third_slides.key/preview.jpg new file mode 100644 index 0000000..4e76ee2 Binary files /dev/null and b/spec/assets/key-v6.2/03_third_slides.key/preview.jpg differ diff --git a/spec/integration_keynote_spec.rb b/spec/integration_keynote_spec.rb index cc58468..9be375e 100644 --- a/spec/integration_keynote_spec.rb +++ b/spec/integration_keynote_spec.rb @@ -3,17 +3,23 @@ describe "Integration tests for Keynote and Common Flows", :integration => true do + def mac_version + control = Osaka::RemoteControl.new(nil) + control.mac_version + end + before(:each) do - @assets_directory = File.join(File.dirname(__FILE__), "assets") + dir = (mac_version == :mavericks ? "assets/key-v6.2" : "assets/key-09") + @assets_directory = File.join(File.dirname(__FILE__), dir) end - + it "Should be able to do a combine with just one file" do keynote_file = File.join(@assets_directory, "01_first_slides.key") Dir.mktmpdir { |dir| results_file = File.join(dir, "results.key") CommonFlows.keynote_combine_files(results_file, keynote_file) - File.exists?(results_file).should == true + expect(File.exists?(results_file)).to be(true) } end @@ -22,7 +28,27 @@ Dir.mktmpdir { |dir| results_file = File.join(dir, "results.key") CommonFlows.keynote_combine_files_from_directory_sorted(results_file, @assets_directory) - File.exists?(results_file).should == true + expect(File.exists?(results_file)).to be(true) + } + end + + it "Should be able to combine multiple files with keynote '09" do + if mac_version == :mavericks + @assets_directory = File.join(File.dirname(__FILE__), "assets/key-09") + Dir.mktmpdir { |dir| + results_file = File.join(dir, "results.key") + CommonFlows.keynote_combine_files_from_directory_sorted(results_file, @assets_directory) + expect(File.exists?(results_file)).to be(true) + } + end + end + + it "Should be able to combine multiple files from a file list" do + + Dir.mktmpdir { |dir| + results_file = File.join(dir, "results.key") + CommonFlows.keynote_combine_files_from_list(results_file, @assets_directory, ["01_first_slides.key", "02_second_slides.key", "03_third_slides.key"]) + expect(File.exists?(results_file)).to be(true) } end @@ -38,5 +64,13 @@ keynote.close end - + + it "Should report non-existant files and terminate" do + bad_file_name = "02_typo_slides.key" + CommonFlows.should_receive(:output).with("These files do not exist: \n" + File.join(@assets_directory, bad_file_name)) + Dir.mktmpdir { |dir| + CommonFlows.keynote_combine_files_from_list(nil, @assets_directory, ["01_first_slides.key", bad_file_name, "03_third_slides.key"]) + } + end + end \ No newline at end of file diff --git a/spec/keynote_flows_spec.rb b/spec/keynote_flows_spec.rb index 9adb4b4..c324602 100644 --- a/spec/keynote_flows_spec.rb +++ b/spec/keynote_flows_spec.rb @@ -3,18 +3,39 @@ describe "Common flows in keynote" do + let(:mock_keynote) { double("First keynote")} + + def should_get_started + mock_keynote.should_receive(:activate) + mock_keynote.should_receive(:close_template_chooser_if_any) + mock_keynote.should_receive(:raise_error_on_open_standard_windows) + end + + def should_create_output_file_from_input(input_file, result_file) + mock_keynote.should_receive(:open).with(input_file) + mock_keynote.should_receive(:select_all_slides) + mock_keynote.should_receive(:save_as).with(result_file) + end + + def should_append_file(file) + another_keynote = double("keynote with " + file) + Osaka::Keynote.should_receive(:new).and_return(another_keynote) + another_keynote.should_receive(:open).with(file) + another_keynote.should_receive(:select_all_slides) + another_keynote.should_receive(:copy) + mock_keynote.should_receive(:paste) + another_keynote.should_receive(:close) + end + def should_shutdown mock_keynote.should_receive(:save) mock_keynote.should_receive(:close) mock_keynote.should_receive(:quit) end - let(:mock_keynote) { double("First keynote")} - it "Should exit if keynote windows are already open" do Osaka::Keynote.should_receive(:new).and_return(mock_keynote) - mock_keynote.should_receive(:activate) - mock_keynote.should_receive(:raise_error_on_open_standard_windows) + should_get_started .with("All Keynote windows must be closed before running this flow") .and_raise(Osaka::ApplicationWindowsMustBeClosed, "All Keynote windows must be closed before running this flow") @@ -25,37 +46,18 @@ def should_shutdown it "Should be able to combine just one single file" do Osaka::Keynote.should_receive(:new).and_return(mock_keynote) - mock_keynote.should_receive(:activate) - mock_keynote.should_receive(:raise_error_on_open_standard_windows) - mock_keynote.should_receive(:light_table_view) - mock_keynote.should_receive(:open).with("one_file.key") - mock_keynote.should_receive(:save_as).with("result.key") + should_get_started + should_create_output_file_from_input("one_file.key", "result.key") should_shutdown CommonFlows.keynote_combine_files("result.key", "one_file.key") end it "Should be able to combine multiple files in one result" do - mock2_keynote = double("Second keynote") - mock3_keynote = double("Third keynote") - Osaka::Keynote.should_receive(:new).and_return(mock_keynote, mock2_keynote, mock3_keynote) - mock_keynote.should_receive(:activate) - mock_keynote.should_receive(:raise_error_on_open_standard_windows) - mock_keynote.should_receive(:open).with("one_file.key") - mock_keynote.should_receive(:light_table_view) - mock_keynote.should_receive(:save_as).with("result.key") - mock_keynote.should_receive(:select_all_slides).exactly(2).times - mock_keynote.should_receive(:paste).exactly(2).times - - mock2_keynote.should_receive(:open).with("two_file.key") - mock2_keynote.should_receive(:select_all_slides) - mock2_keynote.should_receive(:copy) - mock2_keynote.should_receive(:close) - - mock3_keynote.should_receive(:open).with("three_file.key") - mock3_keynote.should_receive(:select_all_slides) - mock3_keynote.should_receive(:copy) - mock3_keynote.should_receive(:close) - + Osaka::Keynote.should_receive(:new).and_return(mock_keynote) + should_get_started + should_create_output_file_from_input("one_file.key", "result.key") + should_append_file("two_file.key") + should_append_file("three_file.key") should_shutdown CommonFlows.keynote_combine_files("result.key", ["one_file.key", "two_file.key", "three_file.key"]) end @@ -78,4 +80,18 @@ def should_shutdown CommonFlows.keynote_combine_files_from_directory_sorted("results.key", "dirname", /^\d+.*\.key$/) end + it "Should be able to open and close keynote files" do + Osaka::Keynote.should_receive(:new).exactly(3).times.and_return(mock_keynote) + should_get_started + mock_keynote.should_receive(:open).with("file1.key") + mock_keynote.should_receive(:close) + mock_keynote.should_receive(:open).with("file2.key") + mock_keynote.should_receive(:close) + mock_keynote.should_receive(:quit) + CommonFlows.keynote_open_yield_close(["file1.key", "file2.key"]) { |k| k.instance_of? Osaka::Keynote } + end + + it "Should be able to search and replace strings in keynote files" do + end + end \ No newline at end of file diff --git a/spec/keynote_spec.rb b/spec/keynote_spec.rb index 96c1b25..ae1dac5 100644 --- a/spec/keynote_spec.rb +++ b/spec/keynote_spec.rb @@ -40,4 +40,13 @@ subject.select_all_slides end + it "Should use the bash command open to make up for problem in keynote 6.2" do + File.stub(:absolute_path).with("file.key").and_return("/path/file.key") + subject.stub(:do_and_wait_for_new_window).and_yield.and_return("new_window") + Osaka::CommandRunner.stub(:run).with("open /path/file.key", false).and_return("something that is printed during debug") + subject.control.stub(:wait_until_exists) + subject.control.stub(:set_current_window).with("new_window") + subject.open("file.key") + end + end diff --git a/spec/osakaexpectations_spec.rb b/spec/osakaexpectations_spec.rb index 0624e04..32010c5 100644 --- a/spec/osakaexpectations_spec.rb +++ b/spec/osakaexpectations_spec.rb @@ -20,7 +20,7 @@ subject.wait_until_exists!(at.window(1)) { code_block_been_called = true } - code_block_been_called.should be_true + code_block_been_called.should be true end end \ No newline at end of file diff --git a/spec/remotecontrol_spec.rb b/spec/remotecontrol_spec.rb index 49e707e..cf3c243 100644 --- a/spec/remotecontrol_spec.rb +++ b/spec/remotecontrol_spec.rb @@ -32,9 +32,15 @@ def expect_execute_and_warning_for(action) it "Should be possible to check whether an application is still running" do expect_execute_osascript("tell application \"System Events\"; (name of processes) contains \"#{name}\"; end tell").and_return("false") - subject.running?.should be_false + subject.running?.should be false end + it "Can get the OS version (mavericks)" do + expect_execute_osascript("system version of (system info)").and_return("10.9.4\n") + subject.mac_version.should == :mavericks + subject.mac_version_string.should == "10.9.4" + end + it "Can get the OS version (lion)" do expect_execute_osascript("system version of (system info)").and_return("10.7.4\n") subject.mac_version.should == :lion @@ -121,12 +127,12 @@ def expect_execute_and_warning_for(action) it "Should be able to check whether a location exists" do expect_execute_osascript(/exists button 1/).and_return("true\n") - subject.exists?(at.button(1)).should be_true + subject.exists?(at.button(1)).should be true end it "Should be able to check whether a location does not exists" do expect_execute_osascript(/not exists window 1/).and_return("true\n") - subject.not_exists?(at.window(1)).should be_true + subject.not_exists?(at.window(1)).should be true end end diff --git a/spec/typicalapplication_spec.rb b/spec/typicalapplication_spec.rb index d92f57d..eee4a9c 100644 --- a/spec/typicalapplication_spec.rb +++ b/spec/typicalapplication_spec.rb @@ -92,7 +92,7 @@ it "Should be able to check if its running" do expect_running?.and_return(true) - subject.running?.should be_true + subject.running?.should equal true end it "Won't quit when the application isn't running" do @@ -177,8 +177,12 @@ it "Should be able to duplicate and close the original document" do - subject.stub_chain(:duplicate, :control).and_return(new_instance_control) + duplicate = double("DuplicateDocument") + subject.control.should_receive(:current_window_name).and_return("window name") + subject.should_receive(:duplicate).and_return(duplicate) + subject.control.should_receive(:click_menu_bar_by_name).with("window name", "Window") subject.should_receive(:close) + duplicate.should_receive(:control).and_return(new_instance_control) subject.duplicate_and_close_original subject.control.should equal(new_instance_control) end @@ -308,5 +312,12 @@ subject.raise_error_on_open_standard_windows("error message") }.to raise_error(Osaka::ApplicationWindowsMustBeClosed, "error message") end + + it "Should do nothing is there template chooser is not open" do + subject.stub(:focus) + subject.should_receive(:template_chooser?).and_return(false) + subject.close_template_chooser_if_any + end + end \ No newline at end of file