fwtoolkit 0.9.3 → 1.0.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.
- checksums.yaml +8 -8
- data/bin/fwt +2 -112
- data/features/cocoapods/setup.feature +60 -0
- data/features/frank/model.feature +20 -0
- data/features/frank/setup.feature +28 -0
- data/features/git/create.feature +29 -0
- data/features/project/create.feature +25 -0
- data/features/step_definitions/aruba_steps.rb +11 -0
- data/features/step_definitions/git_steps.rb +30 -0
- data/features/step_definitions/project_steps.rb +50 -0
- data/features/step_definitions/rvm_steps.rb +11 -0
- data/features/step_definitions/system_steps.rb +8 -0
- data/features/support/env.rb +23 -0
- data/features/support/lib_test/aruba_fwt.rb +30 -0
- data/features/support/lib_test/aruba_mod.rb +28 -0
- data/features/support/lib_test/fake_gem.rb +47 -0
- data/features/xcode/create.feature +42 -0
- data/lib/fwtoolkit/cli/bootstrap.rb +75 -0
- data/lib/fwtoolkit/cli/ci.rb +52 -0
- data/lib/fwtoolkit/cli/cocoapods.rb +73 -0
- data/lib/fwtoolkit/cli/ext/thor.rb +35 -0
- data/lib/fwtoolkit/cli/frank.rb +113 -0
- data/lib/fwtoolkit/cli/fw_actions/template_dir.rb +59 -0
- data/lib/fwtoolkit/cli/fw_actions.rb +2 -0
- data/lib/fwtoolkit/cli/git.rb +42 -0
- data/lib/fwtoolkit/cli/ota.rb +109 -0
- data/lib/fwtoolkit/cli/ota_client/hockeyapp_client.rb +70 -0
- data/lib/fwtoolkit/cli/project.rb +83 -0
- data/lib/fwtoolkit/cli/thorutils.rb +14 -0
- data/lib/fwtoolkit/cli/xcode.rb +105 -0
- data/lib/fwtoolkit/cli.rb +27 -36
- data/lib/fwtoolkit/config/config.sample +8 -0
- data/lib/fwtoolkit/config.rb +41 -0
- data/lib/fwtoolkit/configfile.rb +36 -0
- data/lib/fwtoolkit/executable/executable.rb +45 -0
- data/lib/fwtoolkit/executable.rb +1 -0
- data/lib/fwtoolkit/ext/gem.rb +9 -0
- data/lib/fwtoolkit/ext/hash_yaml.rb +17 -0
- data/lib/fwtoolkit/git_client/git_client.rb +225 -0
- data/lib/fwtoolkit/git_client.rb +1 -0
- data/lib/fwtoolkit/projectfile.rb +50 -0
- data/lib/fwtoolkit/rake/ext/rake.rb +7 -0
- data/lib/fwtoolkit/rake/tasks/ci.rb +25 -0
- data/lib/fwtoolkit/rake/tasks/config.rb +13 -0
- data/lib/fwtoolkit/rake/tasks/ota.rb +31 -0
- data/lib/fwtoolkit/rake/tasks/project.rb +28 -0
- data/lib/fwtoolkit/rake/tasks/test.rb +59 -0
- data/lib/fwtoolkit/rake/tasks/xcode.rb +69 -0
- data/lib/fwtoolkit/rake/tasks.rb +20 -0
- data/lib/fwtoolkit/version.rb +1 -1
- data/lib/fwtoolkit.rb +4 -7
- data/spec/git_client_spec.rb +316 -0
- data/spec/project_config_spec.rb +40 -0
- data/spec/rake/project.rb +28 -0
- data/spec/rake/test.rb +85 -0
- data/spec/rake/xcode.rb +66 -0
- data/spec/support/aruba-doubles-rspec.rb +21 -0
- data/spec/support/ctx_rake.rb +23 -0
- data/spec/support/double_helper.rb +13 -0
- data/spec/support/project_generator.rb +45 -0
- data/templates/default_project/frank/%project_name%/%target_name%/%class_prefix%AppDelegate+Frank.h.tt +15 -0
- data/templates/{cucumber/AppDelegate+Frank.m.erb → default_project/frank/%project_name%/%target_name%/%class_prefix%AppDelegate+Frank.m.tt} +25 -21
- data/templates/{cucumber → default_project/frank/%project_name%/Frank}/features/example.feature +0 -0
- data/templates/{cucumber → default_project/frank/%project_name%/Frank}/features/step_definitions/launch_steps.rb +0 -0
- data/templates/{cucumber → default_project/frank/%project_name%/Frank}/features/support/env.rb +0 -0
- data/templates/{cucumber → default_project/frank/%project_name%/Frank}/features/support/mimic.rb +0 -0
- data/templates/default_project/frank/~template_config.rb +11 -0
- data/templates/default_project/frank_seed_core_data/%project_name%/Frank/features/support/models/%class_name%.rb.tt +30 -0
- data/templates/default_project/frank_seed_support/%project_name%/Frank/features/support/models/factories.rb.tt +10 -0
- data/templates/{cucumber → default_project/frank_seed_support/%project_name%/Frank}/features/support/views/my_objects_json.erb +0 -0
- data/templates/{cucumber → default_project/frank_seed_support/%project_name%/Frank}/features/support/views/my_objects_xml.erb +0 -0
- data/templates/{fwt/gitignore.erb → default_project/git/.gitignore} +0 -0
- data/templates/{fwt/rvmrc.erb → default_project/rvm/.rvmrc.tt} +2 -2
- data/templates/default_project/rvm/Gemfile +4 -0
- data/templates/default_project/xcode/%project_name%/%project_name%.xcodeproj/project.pbxproj.tt +583 -0
- data/templates/default_project/xcode/%project_name%/%project_name%.xcodeproj/project.xcworkspace/contents.xcworkspacedata.tt +7 -0
- data/templates/default_project/xcode/%project_name%/%project_name%.xcodeproj/xcshareddata/xcschemes/%project_name%-Release.xcscheme.tt +105 -0
- data/templates/default_project/xcode/%project_name%/%project_name%.xcodeproj/xcshareddata/xcschemes/%project_name%-Testing.xcscheme.tt +105 -0
- data/templates/default_project/xcode/%project_name%/%project_name%.xcodeproj/xcshareddata/xcschemes/%project_name%.xcscheme.tt +105 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/%class_prefix%AppDelegate.h.tt +15 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/%class_prefix%AppDelegate.m.tt +49 -0
- data/templates/{fwt/default_project/Info.plist.erb → default_project/xcode/%project_name%/%target_name%/Supporting Files/%project_name%-Info.plist} +0 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/%project_name%-Prefix.pch.tt +14 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/Settings.bundle/Root.plist +53 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/Settings.bundle/en.lproj/Root.strings +0 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/en.lproj/InfoPlist.strings +2 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/fw-shared.xcconfig +49 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/info.plist.h.tt +8 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/main.m.tt +18 -0
- data/templates/default_project/xcode/%project_name%/%target_name%/Supporting Files/version.sh +159 -0
- data/templates/default_project/xcode/%project_name%/%tests_target_name%/%project_name%Tests.h.tt +13 -0
- data/templates/default_project/xcode/%project_name%/%tests_target_name%/%project_name%Tests.m.tt +32 -0
- data/templates/default_project/xcode/%project_name%/%tests_target_name%/Supporting Files/%tests_target_name%-Info.plist +22 -0
- data/templates/default_project/xcode/%project_name%/%tests_target_name%/Supporting Files/en.lproj/InfoPlist.strings +2 -0
- data/templates/default_project/xcode/%project_name%/Default.png +0 -0
- data/templates/default_project/xcode/%project_name%/Resources/Default-568h@2x.png +0 -0
- data/templates/default_project/xcode/%project_name%/Resources/Default.png +0 -0
- data/templates/default_project/xcode/%project_name%/Resources/Default@2x.png +0 -0
- data/templates/default_project/xcode/%project_name%.xcworkspace/contents.xcworkspacedata.tt +7 -0
- data/templates/default_project/xcode/FWProjectfile.tt +14 -0
- data/templates/default_project/xcode/Podfile.tt +4 -0
- data/templates/default_project/xcode/Rakefile.tt +14 -0
- data/templates/default_project/xcode/cruise_config.rb +3 -0
- data/templates/default_project/xcode/~template_config.rb +5 -0
- metadata +187 -141
- data/lib/fwtoolkit/tasks/build.rb +0 -121
- data/lib/fwtoolkit/tasks/ci.rb +0 -30
- data/lib/fwtoolkit/tasks/cocoapods.rb +0 -32
- data/lib/fwtoolkit/tasks/frank.rb +0 -119
- data/lib/fwtoolkit/tasks/helper.rb +0 -16
- data/lib/fwtoolkit/tasks/services.rb +0 -41
- data/lib/fwtoolkit/tasks.rb +0 -24
- data/lib/fwtoolkit/test/frank_model.rb +0 -120
- data/lib/fwtoolkit/test/misc_steps.rb +0 -9
- data/lib/fwtoolkit/test/model_helper.rb +0 -94
- data/lib/fwtoolkit/test/network_steps.rb +0 -60
- data/lib/fwtoolkit/test/pickle_steps.rb +0 -101
- data/lib/fwtoolkit/test/timeout_helper.rb +0 -21
- data/lib/fwtoolkit/test/ui_helper.rb +0 -19
- data/lib/fwtoolkit/test/ui_steps.rb +0 -17
- data/templates/cucumber/AppDelegate+Frank.h.erb +0 -15
- data/templates/fwt/Gemfile.erb +0 -3
- data/templates/fwt/Podfile.erb +0 -4
- data/templates/fwt/Rakefile.erb +0 -24
- data/templates/fwt/default_project/AppDelegate.h.erb +0 -12
- data/templates/fwt/default_project/AppDelegate.m.erb +0 -20
- data/templates/fwt/default_project/Prefix.pch.erb +0 -6
- data/templates/fwt/default_project/main.m.erb +0 -15
- data/templates/models/factories.rb.erb +0 -10
- data/templates/models/model.rb.erb +0 -30
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
require 'fwtoolkit/tasks/helper'
|
|
2
|
-
|
|
3
|
-
module FWToolkit
|
|
4
|
-
module Tasks
|
|
5
|
-
class Frank < Thor
|
|
6
|
-
|
|
7
|
-
include Rake::DSL if defined?(Rake::DSL)
|
|
8
|
-
include Thor::Actions
|
|
9
|
-
|
|
10
|
-
def self.source_root
|
|
11
|
-
File.join(File.dirname(__FILE__), '..', '..', '..')
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
no_tasks do
|
|
15
|
-
def install_tasks
|
|
16
|
-
namespace :frank do
|
|
17
|
-
desc 'Setup Frank'
|
|
18
|
-
task :setup, [:target, :prefix] do |t, args|
|
|
19
|
-
args.with_defaults(:prefix => '')
|
|
20
|
-
setup(args[:target], args[:prefix])
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
desc 'Create Frank model files from CoreData'
|
|
24
|
-
task :model, [:model_file, :prefix] do |t, args|
|
|
25
|
-
args.with_defaults(:model_file => nil)
|
|
26
|
-
args.with_defaults(:prefix => 'true')
|
|
27
|
-
prefix = args[:prefix].eql? 'true'
|
|
28
|
-
@no_prefix = !prefix
|
|
29
|
-
|
|
30
|
-
# validation step - core_data_model should be of type .xcdatamodel
|
|
31
|
-
output_dir = File.join('Frank', 'features', 'support', 'models')
|
|
32
|
-
makedirs output_dir unless Dir.exists? output_dir
|
|
33
|
-
|
|
34
|
-
model = CoreData::DataModel.new(File.join(args[:model_file], 'contents'))
|
|
35
|
-
@models = model.entities
|
|
36
|
-
|
|
37
|
-
@models.each do |entity|
|
|
38
|
-
@model = entity
|
|
39
|
-
@class_name = class_name(@model)
|
|
40
|
-
factory_template = File.join 'templates', 'models', 'model.rb.erb'
|
|
41
|
-
template(factory_template, File.join(output_dir, "#{class_name(@model).ruby_format}.rb"))
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
factory_template = File.join 'templates', 'models', 'factories.rb.erb'
|
|
45
|
-
template(factory_template, File.join(output_dir, 'factories.rb'))
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
desc 'Run CI Frank with rerun option'
|
|
49
|
-
task :ci_test_rerun_failures do |t|
|
|
50
|
-
exception = FWToolkit::Tasks.run_rake_task("frank:ci_test")
|
|
51
|
-
exception = FWToolkit::Tasks.run_rake_task("frank:ci_test_rerun") if exception
|
|
52
|
-
raise exception if exception
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
Cucumber::Rake::Task.new(:ci_test, 'Run Frank acceptance tests with CI options') do |t|
|
|
56
|
-
ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
|
|
57
|
-
ENV['USE_SIM_LAUNCHER_SERVER'] = 'YES'
|
|
58
|
-
artifacts_dir = FWToolkit::Tasks.cc_artifacts_dir
|
|
59
|
-
t.cucumber_opts = "Frank/features --tags ~@wip --format pretty --format html --out '#{artifacts_dir}/frank_results.html' --format rerun --out '#{artifacts_dir}/frank_rerun.txt'"
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
Cucumber::Rake::Task.new(:ci_test_rerun, 'Run failed Frank acceptance tests with CI options') do |t|
|
|
63
|
-
artifacts_dir = FWToolkit::Tasks.cc_artifacts_dir
|
|
64
|
-
t.cucumber_opts = "@#{artifacts_dir}/frank_rerun.txt --format pretty --require Frank/features"
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
desc 'Run Frank acceptance tests'
|
|
68
|
-
task :test, :cucumber_options do |t, args|
|
|
69
|
-
args.with_defaults(:cucumber_options => 'Frank/features --tag ~@wip')
|
|
70
|
-
|
|
71
|
-
ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
|
|
72
|
-
ENV['USE_SIM_LAUNCHER_SERVER'] = nil
|
|
73
|
-
run "cucumber #{args.cucumber_options}"
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
desc 'Run Frank acceptance tests for a tag'
|
|
77
|
-
task :tag, :tag_name do |t, args|
|
|
78
|
-
args.with_defaults(:tag_name => '')
|
|
79
|
-
cucumber_options = "Frank/features --tag #{args.tag_name}"
|
|
80
|
-
|
|
81
|
-
ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
|
|
82
|
-
ENV['USE_SIM_LAUNCHER_SERVER'] = nil
|
|
83
|
-
run "cucumber #{cucumber_options}"
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def class_name(entity)
|
|
89
|
-
@no_prefix ? entity.name : entity.name[3..-1]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def setup(target = nil, prefix = nil, project_directory = target, project_file = "#{target}.xcodeproj")
|
|
93
|
-
run 'frank setup'
|
|
94
|
-
features_dir = File.join('Frank', 'features')
|
|
95
|
-
remove_file(File.join(features_dir, 'my_first.feature'))
|
|
96
|
-
|
|
97
|
-
if target
|
|
98
|
-
test_dir = File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber')
|
|
99
|
-
directory(File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber', 'features'), features_dir, {:force => true})
|
|
100
|
-
|
|
101
|
-
@prefix = prefix
|
|
102
|
-
template 'templates/cucumber/AppDelegate+Frank.h.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.h")
|
|
103
|
-
template 'templates/cucumber/AppDelegate+Frank.m.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.m")
|
|
104
|
-
|
|
105
|
-
project = Xcodeproj::Project.new(project_file)
|
|
106
|
-
project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.h"), project_directory)
|
|
107
|
-
frank_app_d_m = project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.m"), project_directory)
|
|
108
|
-
|
|
109
|
-
target = project.targets.select{|t| t.name.eql? target}[0]
|
|
110
|
-
target.add_file_references([frank_app_d_m])
|
|
111
|
-
|
|
112
|
-
project.save_as(project_file)
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module FWToolkit
|
|
2
|
-
module Tasks
|
|
3
|
-
def self.cc_artifacts_dir
|
|
4
|
-
ENV['CC_BUILD_ARTIFACTS'] ? ENV['CC_BUILD_ARTIFACTS'] : File.join(Dir.pwd, 'artifacts')
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def self.run_rake_task(name)
|
|
8
|
-
begin
|
|
9
|
-
Rake::Task[name].invoke
|
|
10
|
-
rescue Exception => e
|
|
11
|
-
return e
|
|
12
|
-
end
|
|
13
|
-
nil
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
module FWToolkit
|
|
2
|
-
module Tasks
|
|
3
|
-
class Services < Thor
|
|
4
|
-
|
|
5
|
-
include Rake::DSL if defined?(Rake::DSL)
|
|
6
|
-
include Thor::Actions
|
|
7
|
-
|
|
8
|
-
no_tasks do
|
|
9
|
-
def install_tasks
|
|
10
|
-
namespace :services do
|
|
11
|
-
|
|
12
|
-
task :environment do
|
|
13
|
-
require 'fwtoolkit'
|
|
14
|
-
Dir[File.join( Dir.pwd, 'Frank/features/support/models/*.rb')].each {|file| require file }
|
|
15
|
-
Dir[File.join( Dir.pwd, 'Frank/features/support/views/*.rb')].each {|file| require file }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
desc 'Seed objects into the service'
|
|
19
|
-
task :seed => [:environment] do
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
require 'daemons'
|
|
24
|
-
desc 'Run a service'
|
|
25
|
-
task :run, [:service_name] => [:environment, :seed] do |t, args|
|
|
26
|
-
args.with_defaults(:service_name => 'mimic', :seeds_name => nil)
|
|
27
|
-
|
|
28
|
-
require File.join( Dir.pwd, "Frank/features/support/#{args.service_name}.rb")
|
|
29
|
-
say "Service #{args.service_name} running"
|
|
30
|
-
loop do
|
|
31
|
-
sleep(5)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
data/lib/fwtoolkit/tasks.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require 'thor'
|
|
2
|
-
|
|
3
|
-
require 'fwtoolkit/tasks/build'
|
|
4
|
-
require 'fwtoolkit/tasks/cocoapods'
|
|
5
|
-
require 'fwtoolkit/tasks/frank'
|
|
6
|
-
require 'fwtoolkit/tasks/services'
|
|
7
|
-
require 'fwtoolkit/tasks/ci'
|
|
8
|
-
|
|
9
|
-
FWToolkit::Tasks::Cocoapods.new.install_tasks
|
|
10
|
-
FWToolkit::Tasks::Frank.new.install_tasks
|
|
11
|
-
FWToolkit::Tasks::Services.new.install_tasks
|
|
12
|
-
FWToolkit::Tasks::CI.new.install_tasks
|
|
13
|
-
|
|
14
|
-
# monkey patching string to add the ruby_format method
|
|
15
|
-
# used in frank:model tasks
|
|
16
|
-
class String
|
|
17
|
-
def ruby_format
|
|
18
|
-
self.gsub(/(.)([A-Z])/,'\1_\2').downcase
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def ruby_format!
|
|
22
|
-
replace ruby_format
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
require 'pickle'
|
|
2
|
-
|
|
3
|
-
module FWToolkit
|
|
4
|
-
module Test
|
|
5
|
-
class FrankCache
|
|
6
|
-
@@klass_to_objects = {}
|
|
7
|
-
@@id_to_object = {}
|
|
8
|
-
|
|
9
|
-
def self.clean_up
|
|
10
|
-
@@klass_to_objects = {}
|
|
11
|
-
@@id_to_object = {}
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.add_object(object)
|
|
15
|
-
object.id = object.object_id
|
|
16
|
-
|
|
17
|
-
# add to id to object hash
|
|
18
|
-
@@id_to_object[object.object_id.to_s] = object
|
|
19
|
-
|
|
20
|
-
# add to klass to object hash
|
|
21
|
-
@@klass_to_objects[object.class.name] = [] unless @@klass_to_objects[object.class.name]
|
|
22
|
-
@@klass_to_objects[object.class.name] << object
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.all_objects(klass)
|
|
26
|
-
@@klass_to_objects[klass.name] ? @@klass_to_objects[klass.name] : []
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.find(id)
|
|
30
|
-
@@id_to_object[id.to_s]
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.find_first(klass, conditions)
|
|
34
|
-
self.find_all(klass, conditions).first
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.find_all(klass, conditions)
|
|
38
|
-
objects = []
|
|
39
|
-
FWToolkit::Test::FrankCache.all_objects(klass).each do |o|
|
|
40
|
-
match = true
|
|
41
|
-
conditions.keys.each do |k|
|
|
42
|
-
value = eval("o.#{k}")
|
|
43
|
-
if((value.class.name.eql? "String") and (not value.eql? conditions[k]))
|
|
44
|
-
match = false
|
|
45
|
-
break
|
|
46
|
-
elsif((value.class.name.eql? "Fixnum") and (not value == conditions[k].to_i))
|
|
47
|
-
match = false
|
|
48
|
-
break
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
objects << o if match
|
|
52
|
-
end
|
|
53
|
-
objects
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class FrankModel
|
|
58
|
-
|
|
59
|
-
attr_accessor :id, :core_data_entity
|
|
60
|
-
|
|
61
|
-
module PickleAdapter
|
|
62
|
-
include Pickle::Adapter::Base
|
|
63
|
-
|
|
64
|
-
# Gets a list of the available models for this adapter
|
|
65
|
-
def self.model_classes
|
|
66
|
-
klasses = ::FWToolkit::Test::FrankModel.__send__(:descendants)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# get a list of column names for a given class
|
|
70
|
-
def self.column_names(klass)
|
|
71
|
-
klass.new.methods
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Get an instance by id of the model
|
|
75
|
-
def self.get_model(klass, id)
|
|
76
|
-
FWToolkit::Test::FrankCache.find(id)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Find the first instance matching conditions
|
|
80
|
-
def self.find_first_model(klass, conditions)
|
|
81
|
-
FWToolkit::Test::FrankCache.find_first(klass, conditions)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Find all models matching conditions
|
|
85
|
-
def self.find_all_models(klass, conditions)
|
|
86
|
-
FWToolkit::Test::FrankCache.find_all(klass, conditions)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# Create a model using attributes
|
|
90
|
-
def self.create_model(klass, attributes)
|
|
91
|
-
puts "create_model"
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def self.object_in_cache(id)
|
|
96
|
-
FWToolkit::Test::FrankCache.find(id)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def self.all_objects
|
|
100
|
-
FWToolkit::Test::FrankCache.all_objects(self)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def save!
|
|
104
|
-
FWToolkit::Test::FrankCache.add_object(self)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def self.find(id)
|
|
108
|
-
FWToolkit::Test::FrankCache.find(id)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def self.find_first(conditions={})
|
|
112
|
-
FWToolkit::Test::FrankCache.find_first(self, conditions)
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def self.find_all(conditions={})
|
|
116
|
-
FWToolkit::Test::FrankCache.find_all(self, conditions)
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# This file is generated by FWToolkit and is covered by the license at
|
|
2
|
-
#
|
|
3
|
-
require 'fwtoolkit/test/model_helper'
|
|
4
|
-
|
|
5
|
-
Given /^the app is (online|offline)$/ do |val|
|
|
6
|
-
online = (val.eql? "online")
|
|
7
|
-
fwt_app_exec("setRKObjectManagerIsOnline:", online)
|
|
8
|
-
sleep 5
|
|
9
|
-
end
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
require 'json'
|
|
2
|
-
require 'frank-cucumber/gateway'
|
|
3
|
-
require 'cfpropertylist'
|
|
4
|
-
|
|
5
|
-
module FWToolkit
|
|
6
|
-
module Test
|
|
7
|
-
module ModelHelpers
|
|
8
|
-
|
|
9
|
-
def fwt_app_exec(method_name, *method_args)
|
|
10
|
-
operation_map = Frank::Cucumber::Gateway.build_operation_map(method_name,method_args)
|
|
11
|
-
|
|
12
|
-
res = frank_server.send_post(
|
|
13
|
-
'app_exec',
|
|
14
|
-
:operation => operation_map
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
return Frank::Cucumber::Gateway.evaluate_frankly_response( res, "app_exec #{method_name}" )
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def fwt_simulator_applications_dir
|
|
21
|
-
File.join(Dir.home, 'Library', 'Application Support', 'iPhone Simulator', fwt_ios_sdk, 'Applications')
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def fwt_kill_simulator
|
|
25
|
-
`killall "iPhone Simulator"`
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def fwt_simulator_reset_data(sdk)
|
|
29
|
-
fwt_kill_simulator
|
|
30
|
-
FileUtils.rm_rf(fwt_simulator_applications_dir)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def fwt_launch_app(device='iphone')
|
|
34
|
-
launch_app fwt_app_path, fwt_ios_sdk, device
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def fwt_ios_sdk
|
|
38
|
-
raise "IOS_SDK not defined. Please define this in your env.rb, i.e. IOS_SDK='5.1'" unless defined?(IOS_SDK)
|
|
39
|
-
IOS_SDK
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def fwt_app_path
|
|
43
|
-
ENV['APP_BUNDLE_PATH'] || (defined?(APP_BUNDLE_PATH) && APP_BUNDLE_PATH)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def fwt_app_path
|
|
47
|
-
raise "APP_BUNDLE_PATH not defined. Please define this in your env.rb, i.e. APP_BUNDLE_PATH='File.expand_path( '../../../frankified_build/Frankified.app', __FILE__ )'" unless defined?(APP_BUNDLE_PATH)
|
|
48
|
-
raise "File defined in APP_BUNDLE_PATH (#{APP_BUNDLE_PATH}) does not exist" unless File.exists?(APP_BUNDLE_PATH)
|
|
49
|
-
APP_BUNDLE_PATH
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def fwt_seed_app(model_names=[])
|
|
53
|
-
puts "Deprecated: fwt_seed_app(). Please use fwt_seed_app_with_pickle_models(). Will be changed in 0.6.0 to accept objects."
|
|
54
|
-
fwt_seed_app_with_pickle_models(model_names)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def fwt_seed_app_with_pickle_models(model_names=[])
|
|
58
|
-
objects = model_names.collect{|n| model!(n)}
|
|
59
|
-
fwt_seed_app_with_objects(objects)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def fwt_seed_app_with_objects(objects = [])
|
|
63
|
-
fwt_app_exec("seedCoreData:", objects.to_json)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def fwt_set_user_defaults(bundle_identifier, user_defaults)
|
|
67
|
-
app_dir = Dir.entries(fwt_simulator_applications_dir)
|
|
68
|
-
app_dir.delete "."
|
|
69
|
-
app_dir.delete ".."
|
|
70
|
-
plist_file = File.join(fwt_simulator_applications_dir, app_dir.first, 'Library', 'Preferences', "#{bundle_identifier}.plist")
|
|
71
|
-
|
|
72
|
-
plist = CFPropertyList::List.new(:file => plist_file)
|
|
73
|
-
data = CFPropertyList.native_types(plist.value)
|
|
74
|
-
data.merge! user_defaults
|
|
75
|
-
plist.value = CFPropertyList.guess(data)
|
|
76
|
-
plist.save(plist_file, CFPropertyList::List::FORMAT_BINARY)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
World(FWToolkit::Test::ModelHelpers)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
# add as_json to Array
|
|
85
|
-
class Array
|
|
86
|
-
def to_json(*)
|
|
87
|
-
contents = ""
|
|
88
|
-
self.each_index do |i|
|
|
89
|
-
contents << self[i].to_json
|
|
90
|
-
contents << ',' unless i == self.length - 1
|
|
91
|
-
end
|
|
92
|
-
"[#{contents}]"
|
|
93
|
-
end
|
|
94
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module FWToolkit
|
|
2
|
-
module Test
|
|
3
|
-
module NetworkHelpers
|
|
4
|
-
|
|
5
|
-
#Given /^the network simulates a 3G connection
|
|
6
|
-
#ipfw add pipe 1 all from any to any out
|
|
7
|
-
#ipfw add pipe 2 all from any to any in
|
|
8
|
-
#ipfw pipe 1 config bw 64Kbit/s
|
|
9
|
-
#ipfw pipe 2 config bw 128Kbit/s
|
|
10
|
-
|
|
11
|
-
def ipfw_reset_rule_number
|
|
12
|
-
@@ipfw_rule_number = 1
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def ipfw_exit_unless_clean
|
|
16
|
-
ipfw_list = `sudo ipfw list`
|
|
17
|
-
if ipfw_list =~ /^(?!65535 allow ip from any to any$).*/
|
|
18
|
-
puts 'The firewall table contains rules other than the default. Run `sudo ipfw flush` before rerunning cucumber if you don\'t need these rules.'
|
|
19
|
-
exit -1
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def ipfw_deny(host='localhost')
|
|
24
|
-
`sudo ipfw add #{@@ipfw_rule_number} deny tcp from any to #{host}`
|
|
25
|
-
@@ipfw_rule_number += 1
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def ipfw_flush
|
|
29
|
-
`sudo ipfw flush`
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
World(FWToolkit::Test::NetworkHelpers)
|
|
35
|
-
|
|
36
|
-
# Check IPFW because we flush firewall rules at the end of each scenario
|
|
37
|
-
# If we have anything but the default rule, warn the user and exit
|
|
38
|
-
Before do
|
|
39
|
-
ipfw_exit_unless_clean
|
|
40
|
-
ipfw_reset_rule_number
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
After do
|
|
44
|
-
ipfw_flush
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
#
|
|
48
|
-
# Steps
|
|
49
|
-
#
|
|
50
|
-
Given /^the network has no connection$/ do
|
|
51
|
-
ipfw_deny
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
Then /^the network is returned to its original state$/ do
|
|
55
|
-
ipfw_flush
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
# this file generated by script/generate pickle
|
|
2
|
-
require 'pickle/world'
|
|
3
|
-
|
|
4
|
-
# create a model
|
|
5
|
-
Given(/^#{capture_model} exists?(?: with #{capture_fields})?$/) do |name, fields|
|
|
6
|
-
create_model(name, fields)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
# create n models
|
|
10
|
-
Given(/^(\d+) #{capture_plural_factory} exist(?: with #{capture_fields})?$/) do |count, plural_factory, fields|
|
|
11
|
-
count.to_i.times { create_model(plural_factory.singularize, fields) }
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# create models from a table
|
|
15
|
-
Given(/^the following #{capture_plural_factory} exists?:?$/) do |plural_factory, table|
|
|
16
|
-
create_models_from_table(plural_factory, table)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# find a model
|
|
20
|
-
Then(/^#{capture_model} should exist(?: with #{capture_fields})?$/) do |name, fields|
|
|
21
|
-
find_model!(name, fields)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# not find a model
|
|
25
|
-
Then(/^#{capture_model} should not exist(?: with #{capture_fields})?$/) do |name, fields|
|
|
26
|
-
find_model(name, fields).should be_nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# find models with a table
|
|
30
|
-
Then(/^the following #{capture_plural_factory} should exists?:?$/) do |plural_factory, table|
|
|
31
|
-
find_models_from_table(plural_factory, table).should_not be_any(&:nil?)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# find exactly n models
|
|
35
|
-
Then(/^(\d+) #{capture_plural_factory} should exist(?: with #{capture_fields})?$/) do |count, plural_factory, fields|
|
|
36
|
-
find_models(plural_factory.singularize, fields).size.should == count.to_i
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# assert equality of models
|
|
40
|
-
Then(/^#{capture_model} should be #{capture_model}$/) do |a, b|
|
|
41
|
-
model!(a).should == model!(b)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# assert model is in another model's has_many assoc
|
|
45
|
-
Then(/^#{capture_model} should be (?:in|one of|amongst) #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
|
46
|
-
model!(owner).send(association).should include(model!(target))
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# assert model is not in another model's has_many assoc
|
|
50
|
-
Then(/^#{capture_model} should not be (?:in|one of|amongst) #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
|
51
|
-
model!(owner).send(association).should_not include(model!(target))
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# assert model is another model's has_one/belongs_to assoc
|
|
55
|
-
Then(/^#{capture_model} should be #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
|
56
|
-
model!(owner).send(association).should == model!(target)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# assert model is not another model's has_one/belongs_to assoc
|
|
60
|
-
Then(/^#{capture_model} should not be #{capture_model}(?:'s)? (\w+)$/) do |target, owner, association|
|
|
61
|
-
model!(owner).send(association).should_not == model!(target)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# assert model.predicate?
|
|
65
|
-
Then(/^#{capture_model} should (?:be|have) (?:an? )?#{capture_predicate}$/) do |name, predicate|
|
|
66
|
-
if model!(name).respond_to?("has_#{predicate.gsub(' ', '_')}")
|
|
67
|
-
model!(name).should send("have_#{predicate.gsub(' ', '_')}")
|
|
68
|
-
else
|
|
69
|
-
model!(name).should send("be_#{predicate.gsub(' ', '_')}")
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# assert not model.predicate?
|
|
74
|
-
Then(/^#{capture_model} should not (?:be|have) (?:an? )?#{capture_predicate}$/) do |name, predicate|
|
|
75
|
-
if model!(name).respond_to?("has_#{predicate.gsub(' ', '_')}")
|
|
76
|
-
model!(name).should_not send("have_#{predicate.gsub(' ', '_')}")
|
|
77
|
-
else
|
|
78
|
-
model!(name).should_not send("be_#{predicate.gsub(' ', '_')}")
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# model.attribute.should eql(value)
|
|
83
|
-
# model.attribute.should_not eql(value)
|
|
84
|
-
Then(/^#{capture_model}'s (\w+) (should(?: not)?) be #{capture_value}$/) do |name, attribute, expectation, expected|
|
|
85
|
-
actual_value = model(name).send(attribute)
|
|
86
|
-
expectation = expectation.gsub(' ', '_')
|
|
87
|
-
|
|
88
|
-
case expected
|
|
89
|
-
when 'nil', 'true', 'false'
|
|
90
|
-
actual_value.send(expectation, send("be_#{expected}"))
|
|
91
|
-
when /^[+-]?[0-9_]+(\.\d+)?$/
|
|
92
|
-
actual_value.send(expectation, eql(expected.to_f))
|
|
93
|
-
else
|
|
94
|
-
actual_value.to_s.send(expectation, eql(eval(expected)))
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# assert size of association
|
|
99
|
-
Then /^#{capture_model} should have (\d+) (\w+)$/ do |name, size, association|
|
|
100
|
-
model!(name).send(association).size.should == size.to_i
|
|
101
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
Around('~@slow') do |scenario, block|
|
|
2
|
-
timeout_seconds = 300
|
|
3
|
-
begin
|
|
4
|
-
Timeout.timeout(timeout_seconds) do
|
|
5
|
-
block.call
|
|
6
|
-
end
|
|
7
|
-
rescue Timeout::Error
|
|
8
|
-
puts "Your test was killed after #{timeout_seconds}"
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
Around('@slow') do |scenario, block|
|
|
13
|
-
timeout_seconds = 1200
|
|
14
|
-
begin
|
|
15
|
-
Timeout.timeout(timeout_seconds) do
|
|
16
|
-
block.call
|
|
17
|
-
end
|
|
18
|
-
rescue Timeout::Error
|
|
19
|
-
puts "Your slow test was killed after #{timeout_seconds}"
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module FWToolkit
|
|
2
|
-
module Test
|
|
3
|
-
module UIHelpers
|
|
4
|
-
def fwt_set_textfield_text(text_field_mark, text_to_type)
|
|
5
|
-
text_field_selector = "textField marked:'#{text_field_mark}'"
|
|
6
|
-
if element_exists(text_field_selector)
|
|
7
|
-
touch( text_field_selector )
|
|
8
|
-
else
|
|
9
|
-
raise "Could not find [#{text_field_mark}], it does not exist."
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
frankly_map( text_field_selector, 'becomeFirstResponder' )
|
|
13
|
-
frankly_map( text_field_selector, 'setText:', text_to_type )
|
|
14
|
-
frankly_map( text_field_selector, 'endEditing:', true )
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
World(FWToolkit::Test::UIHelpers)
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# This file is generated by FWToolkit and is covered by the license at
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
require 'fwtoolkit/test/ui_helper.rb'
|
|
5
|
-
|
|
6
|
-
When /^I touch the "(.*?)" button on the alert view$/ do |arg1|
|
|
7
|
-
touch("view:'UIAlertButton' marked:'#{arg1}'")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
When /^I type "([^\"]*)"$/ do |cmd|
|
|
11
|
-
type_into_keyboard(cmd, :append_return => false)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
Then /^"([^\"]*)" is disabled$/ do |mark|
|
|
15
|
-
raise "#{mark} is not disabled" unless frankly_map("view marked:'#{mark}'", 'isEnabled')
|
|
16
|
-
end
|
|
17
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// <%= @prefix %>AppDelegate+Frank.h
|
|
3
|
-
// FWToolkit
|
|
4
|
-
//
|
|
5
|
-
// Created by Matt Brooke-Smith on 14/10/2012.
|
|
6
|
-
// Copyright (c) 2012 Future Workshops. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
#import "<%= @prefix %>AppDelegate.h"
|
|
10
|
-
|
|
11
|
-
@interface <%= @prefix %>AppDelegate (Frank)
|
|
12
|
-
|
|
13
|
-
- (void) seedCoreData:(NSString *)json;
|
|
14
|
-
|
|
15
|
-
@end
|
data/templates/fwt/Gemfile.erb
DELETED
data/templates/fwt/Podfile.erb
DELETED