fwtoolkit 0.9.3 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODNiNTM1NjE3MTcyODA2OGZlNTIyYjg1YzdkMDcxMjZkMGJhZjZmNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWY2OGQyMjI5YjdiMDg1NjQ2NGU3ZjUzOWYwZWEwZjA2ZGUyMmY2Zg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzEyNTRkZmM4NGIxMmNlODcxNmU4MTBlNjU0ZjU5ZDg0M2UwM2E4Yzc3MjQx
|
10
|
+
ZWMzNzJiZTdkZWQwNDhlY2ZiY2EzMDc1YzE0ZTgzZjE4ZmJlYWYzMTc3Yzdm
|
11
|
+
YWNhNzAwYzY4MmM3MmVjNzNlNzFjMzI5ZDNhYmRiYTMzMmMxOGU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjRiNTZkN2JhMDlkNGE4MWI4Y2U0NWE3OTgxMDdhM2VkYTk0ZThiMTdhZTVm
|
14
|
+
NGIwY2EzNTRlZTNjMWRmNjU1NTI3Nzc3MzBhODI1MWVlM2M2YWJiMjNiOWNm
|
15
|
+
OTJkZGNjOTJhZWRhMGQ0MTc4ODQ1YmUzZDJkZWExNTUwY2RhODg=
|
data/bin/fwt
CHANGED
@@ -1,115 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'thor'
|
3
|
-
require 'xcodeproj'
|
4
|
-
require 'erb'
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
include Thor::Actions
|
9
|
-
|
10
|
-
def self.source_root
|
11
|
-
File.join(File.dirname(__FILE__), '..')
|
12
|
-
end
|
13
|
-
|
14
|
-
desc "new APP_PATH PREFIX", "Creates a new Future Workshops iOS project"
|
15
|
-
def new(app_path, prefix)
|
16
|
-
|
17
|
-
setup_cocoapods
|
18
|
-
|
19
|
-
@app_name = File.basename(app_path)
|
20
|
-
@prefix = prefix.upcase
|
21
|
-
@path = app_path
|
22
|
-
supporting_files = 'Supporting Files'
|
23
|
-
|
24
|
-
@project = Xcodeproj::Project.new
|
25
|
-
@project.root_object.build_configuration_list
|
3
|
+
require 'fwtoolkit'
|
26
4
|
|
27
|
-
|
28
|
-
process_template("Info.plist.erb", info_plist, supporting_files)
|
29
|
-
|
30
|
-
target = @project.new_target(:application, @app_name, :ios)
|
31
|
-
|
32
|
-
add_system_framework('UIKit')
|
33
|
-
add_system_framework('CoreGraphics')
|
34
|
-
|
35
|
-
add_build_settings_to_target({
|
36
|
-
'INFOPLIST_FILE' => "$(SRCROOT)/#{@app_name}/#{@app_name}-Info.plist",
|
37
|
-
'GCC_PREFIX_HEADER' => "#{@app_name}/#{@app_name}-Prefix.pch",
|
38
|
-
'SKIP_INSTALL' => 'NO',
|
39
|
-
'IPHONEOS_DEPLOYMENT_TARGET' => '6.0',
|
40
|
-
}, target)
|
41
|
-
|
42
|
-
app_d_h = process_template("AppDelegate.h.erb", "#{@prefix}AppDelegate.h")
|
43
|
-
app_d_m = process_template("AppDelegate.m.erb", "#{@prefix}AppDelegate.m")
|
44
|
-
main_m = process_template("main.m.erb", "main.m", supporting_files)
|
45
|
-
prefix_pch = process_template("Prefix.pch.erb", "#{@app_name}-Prefix.pch", supporting_files)
|
46
|
-
|
47
|
-
target.add_file_references([app_d_m, main_m])
|
48
|
-
|
49
|
-
# final save
|
50
|
-
@project.save_as File.join(@path, "#{@app_name}.xcodeproj")
|
51
|
-
@workspace = Xcodeproj::Workspace.new("#{@app_name}.xcodeproj")
|
52
|
-
@workspace.save_as File.join(@path, "#{@app_name}.xcworkspace")
|
53
|
-
|
54
|
-
# Ruby
|
55
|
-
template 'templates/fwt/rvmrc.erb', File.join(@path, '.rvmrc')
|
56
|
-
template 'templates/fwt/Gemfile.erb', File.join(@path, 'Gemfile')
|
57
|
-
template 'templates/fwt/Rakefile.erb', File.join(@path, 'Rakefile')
|
58
|
-
template 'templates/fwt/Podfile.erb', File.join(@path, 'Podfile')
|
59
|
-
template 'templates/fwt/gitignore.erb', File.join(@path, '.gitignore')
|
60
|
-
|
61
|
-
sleep 2 # flushing issues?
|
62
|
-
|
63
|
-
inside(@path) do
|
64
|
-
run "rvm gemset create #{@app_name}", {:capture => true}
|
65
|
-
run "rvm gemset use #{@app_name}", {:capture => true}
|
66
|
-
run 'bundle', {:capture => true}
|
67
|
-
#run 'rake pod:clean_install', {:capture => true}
|
68
|
-
run "rake frank:setup['#{@app_name}','#{@prefix}']", {:capture => true}
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
private
|
73
|
-
def add_build_settings_to_target(map, target)
|
74
|
-
target.build_settings('Debug').merge! map
|
75
|
-
target.build_settings('Release').merge! map
|
76
|
-
end
|
77
|
-
|
78
|
-
def add_system_framework(name)
|
79
|
-
framework = @project.add_system_framework(name)
|
80
|
-
target = @project.targets.first
|
81
|
-
build_phase = target.frameworks_build_phase
|
82
|
-
build_phase.add_file_reference framework
|
83
|
-
end
|
84
|
-
|
85
|
-
def setup_cocoapods
|
86
|
-
unless Dir.exists?(File.join(Dir.home, '.cocoapods', 'fw'))
|
87
|
-
run 'gem install cocoapods', {:capture => true}
|
88
|
-
run 'pod repo add fw git@github.com:FutureWorkshops/FWTPodspecs.git', {:capture => true}
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def process_template(template_filename, destination_filename, destination_group = "", template_project = 'default_project')
|
93
|
-
template "templates/fwt/#{template_project}/#{template_filename}", File.join(@path, @app_name, destination_filename)
|
94
|
-
@project.new_file(File.join(@app_name, destination_filename), File.join(@app_name, destination_group))
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
module Xcodeproj
|
100
|
-
class Project
|
101
|
-
def add_system_framework(name)
|
102
|
-
path = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/System/Library/Frameworks/#{name}.framework"
|
103
|
-
if file = frameworks_group.files.select { |f| f.path == path }.first
|
104
|
-
file
|
105
|
-
else
|
106
|
-
framework_ref = frameworks_group.new_file(path)
|
107
|
-
framework_ref.name = "#{name}.framework"
|
108
|
-
framework_ref.source_tree = 'SDKROOT'
|
109
|
-
framework_ref
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
FWT.start
|
5
|
+
FWToolkit::CLI.start(ARGV)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
Feature: Installing cocoapods
|
2
|
+
As a lead developer
|
3
|
+
In order to work with cocoapods in my project
|
4
|
+
I want my system to be configured correctly
|
5
|
+
|
6
|
+
@slow @pods
|
7
|
+
Scenario: Install and configure cocoapods for a user without cocoapods installed
|
8
|
+
Given I'm using a clean gemset "fwtoolkit_test" containing fwtoolkit.gem
|
9
|
+
And I'm using a clean home directory
|
10
|
+
And I force aruba-double path-hijacking
|
11
|
+
And I double `pod`
|
12
|
+
And I double `sudo`
|
13
|
+
And I double `git`
|
14
|
+
When I successfully run `fwt pods setup`
|
15
|
+
Then the double `sudo gem install cocoapods` should have been run
|
16
|
+
And a directory named "homedir/.cocoapods/fw" should exist
|
17
|
+
|
18
|
+
@slow @pods
|
19
|
+
Scenario: Configure fw's cocoapods for a user that has cocoapods already installed
|
20
|
+
Given I'm using a clean gemset "fwtoolkit_test" containing fwtoolkit.gem
|
21
|
+
And I'm using a clean home directory
|
22
|
+
And I force aruba-double path-hijacking
|
23
|
+
And I double the gem "cocoapods"
|
24
|
+
And I double `pod`
|
25
|
+
And I double `sudo`
|
26
|
+
When I successfully run `fwt pods setup`
|
27
|
+
Then the stdout should contain:
|
28
|
+
"""
|
29
|
+
Cocoapods is already installed
|
30
|
+
"""
|
31
|
+
And a directory named "homedir/.cocoapods/fw" should exist
|
32
|
+
|
33
|
+
@slow @pods
|
34
|
+
Scenario: Configure fw's cocoapods for a user that has messed up his/her installation
|
35
|
+
Given I'm using a clean gemset "fwtoolkit_test" containing fwtoolkit.gem
|
36
|
+
And I'm using a clean home directory
|
37
|
+
And a directory named ".cocoapods/fw" inside the home directory
|
38
|
+
And I force aruba-double path-hijacking
|
39
|
+
And I double `gem`
|
40
|
+
And I double `sudo`
|
41
|
+
When I successfully run `fwt pods setup`
|
42
|
+
Then the double `sudo gem install cocoapods` should have been run
|
43
|
+
And the stdout should contain:
|
44
|
+
"""
|
45
|
+
FW's podspec repository already installed
|
46
|
+
"""
|
47
|
+
|
48
|
+
@slow @pods
|
49
|
+
Scenario: Configure a project with Cocoapods
|
50
|
+
Given a directory named "MyProject"
|
51
|
+
And I double `bundle`
|
52
|
+
And I cd to "MyProject"
|
53
|
+
And an empty file named "Gemfile"
|
54
|
+
And I cd to ".."
|
55
|
+
When I successfully run `fwt pods install MyProject`
|
56
|
+
Then the file "MyProject/Gemfile" should contain:
|
57
|
+
"""
|
58
|
+
gem "Cocoapods"
|
59
|
+
"""
|
60
|
+
And the double `bundle exec pod install` should have been run
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Create frank model from core data
|
2
|
+
As a lead developer working on a project
|
3
|
+
I want to generate ruby classes that mirror my CoreData model
|
4
|
+
So I can refer to core data entities from my Frank tests
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a configured installation of FWToolkit for "Tom the Dev" working for "Awesome Company"
|
8
|
+
|
9
|
+
@frank
|
10
|
+
Scenario: generate ruby model from CoreData
|
11
|
+
Given an initialized FW iOS project named "MyProject"
|
12
|
+
And the project "MyProject" contains a valid CoreData model
|
13
|
+
When I run `fwt test model MyProject`
|
14
|
+
Then I cd to "MyProject"
|
15
|
+
And the following files should exist:
|
16
|
+
| MyProject/Frank/features/support/views/my_objects_json.erb |
|
17
|
+
| MyProject/Frank/features/support/views/my_objects_xml.erb |
|
18
|
+
| MyProject/Frank/features/support/models/factories.rb |
|
19
|
+
| MyProject/Frank/features/support/models/Ent1.rb |
|
20
|
+
| MyProject/Frank/features/support/models/Ent2.rb |
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: Frankifie a project
|
2
|
+
As a lead developer working on a project
|
3
|
+
I want a quick way to set up my project with frank
|
4
|
+
So I can add BDD tests to it
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a configured installation of FWToolkit for "Tom the Dev" working for "Awesome Company"
|
8
|
+
|
9
|
+
@frank @no-clobber @test @announce
|
10
|
+
Scenario: setup an existing project
|
11
|
+
Given an initialized FW iOS project named "MyProject"
|
12
|
+
When I successfully run `fwt test setup MyProject`
|
13
|
+
Then I cd to "MyProject"
|
14
|
+
And the following files should exist:
|
15
|
+
| MyProject/MyProject/AAAAppDelegate+Frank.h |
|
16
|
+
| MyProject/MyProject/AAAAppDelegate+Frank.m |
|
17
|
+
| MyProject/Frank/Features/step_definitions/launch_steps.rb |
|
18
|
+
| MyProject/Frank/Features/support/env.rb |
|
19
|
+
| MyProject/Frank/Features/support/mimic.rb |
|
20
|
+
|
21
|
+
|
22
|
+
@frank @slom
|
23
|
+
Scenario: try to setup a project that already has frank
|
24
|
+
Given an initialized FW iOS project named "MyProject"
|
25
|
+
And I successfully run `fwt test setup MyProject`
|
26
|
+
When I run `fwt test setup MyProject`
|
27
|
+
Then the output should contain "Frank is already set up for the project"
|
28
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Feature: Create a git repo
|
2
|
+
As a lead devepoer
|
3
|
+
In order to work on my new project
|
4
|
+
I want my project folder to contain a git repo correctly initialised
|
5
|
+
|
6
|
+
@announce
|
7
|
+
Scenario: Create a new git repo on a folder with just a .gitignore
|
8
|
+
Given a directory named "my_project"
|
9
|
+
When I successfully run `fwt git new my_project`
|
10
|
+
Then an initialized git repository should exists inside a directory named "my_project"
|
11
|
+
And a file named "my_project/.gitignore" should exist
|
12
|
+
|
13
|
+
Scenario: Fail to create a git repo because one exists already
|
14
|
+
Given a directory named "my_project"
|
15
|
+
Given an initialized git repository inside a directory named "my_project"
|
16
|
+
Given a valid .gitignore file exists inside a directory named "my_project"
|
17
|
+
When I run `fwt git new my_project`
|
18
|
+
Then the stderr should contain:
|
19
|
+
"""
|
20
|
+
There's already a repository at path
|
21
|
+
"""
|
22
|
+
@slow
|
23
|
+
Scenario: Create a git repository on a folder with files in it
|
24
|
+
Given a directory named "my_project"
|
25
|
+
Given a valid .gitignore file exists inside a directory named "my_project"
|
26
|
+
Given the directory "my_project" contains an uncommitted file named "my_file.c"
|
27
|
+
When I successfully run `fwt git new my_project`
|
28
|
+
Then an initialized git repository should exists inside a directory named "my_project"
|
29
|
+
And the file named "my_file.c" should have been committed to the repository at path "my_project"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Feature: Create a new FW's project
|
2
|
+
As a lead developer
|
3
|
+
I want to use fwt to create a new project
|
4
|
+
So that the project folder has everything I need in terms of rvm/ci/xcode settings
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a configured installation of FWToolkit for "Tom the Dev" working for "Awesome Company"
|
8
|
+
|
9
|
+
@announce
|
10
|
+
@wip @slow
|
11
|
+
Scenario: Create a new project
|
12
|
+
Given I'm using a clean gemset "fwtoolkit_test" containing fwtoolkit.gem
|
13
|
+
#Creating the xcode project it's been done on xcode.feature
|
14
|
+
And I double `bundle`
|
15
|
+
And I double `rvm`
|
16
|
+
And I double `gem`
|
17
|
+
And I double `pod`
|
18
|
+
When I run `fwt proj new MyProject AAA` interactively
|
19
|
+
And I wait for output to contain "I found more than one target in this project. Which is the main app target that you wish to Frankify"
|
20
|
+
And I type "1"
|
21
|
+
Then the following files should exist:
|
22
|
+
| MyProject/Podfile |
|
23
|
+
And the double `pod install` should have been run
|
24
|
+
And the double `rvm 1.9.3 do rvm --rvmrc --create ruby-1.9.3@MyProject` should have been run
|
25
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'fwtoolkit/git_client'
|
2
|
+
require 'aruba/api'
|
3
|
+
|
4
|
+
Then /^the file named "([^"]*)" should have been committed to the repository at path "([^"]*)"$/ do |file, repo_path|
|
5
|
+
repo = GitClient::Repository.new(File.join(current_dir, repo_path))
|
6
|
+
status = repo.status
|
7
|
+
if status == nil
|
8
|
+
status.should be_nil
|
9
|
+
else
|
10
|
+
repo.status.values.any?{ |v| v.include?(file).should be_false }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
Then /^an initialized git repository should exists inside a directory named "([^"]*)"$/ do |repo_path|
|
15
|
+
repo = GitClient::Repository.new(File.join(current_dir, repo_path))
|
16
|
+
repo.initialized?
|
17
|
+
end
|
18
|
+
|
19
|
+
Given /^an initialized git repository inside a directory named "([^"]*)"$/ do |repo_path|
|
20
|
+
repo = GitClient::Repository.new(File.join(current_dir, repo_path))
|
21
|
+
repo.init
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /^a valid \.gitignore file exists inside a directory named "([^"]*)"$/ do |repo_path|
|
25
|
+
write_file File.join(repo_path, '.gitignore'), ".DB_Store\ntemp\ntmp"
|
26
|
+
end
|
27
|
+
|
28
|
+
Given /^the directory "([^"]*)" contains an uncommitted file named "([^"]*)"$/ do |repo_path, file_name|
|
29
|
+
write_file File.join(repo_path, file_name), ".DB_Store\ntemp\ntmp"
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'aruba'
|
2
|
+
|
3
|
+
Given /^a configured installation of FWToolkit for "([^"]*)" working for "([^"]*)"$/ do |dev_name, company_name|
|
4
|
+
steps %Q{
|
5
|
+
Given I'm using a clean home directory
|
6
|
+
}
|
7
|
+
steps %Q{
|
8
|
+
And a directory named ".fwtoolkit" inside the home directory
|
9
|
+
And a file named "#{File.join(Dir.home, '.fwtoolkit', 'config')}" with:
|
10
|
+
"""
|
11
|
+
developer_name: "#{dev_name}"
|
12
|
+
organization_name: "#{company_name}"
|
13
|
+
"""
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
Given /^an initialized FW iOS project named "([^"]*)"$/ do |proj_name|
|
18
|
+
steps %Q{
|
19
|
+
Given I successfully run `fwt xcode new #{proj_name} AAA`
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
Given /^the project "([^"]*)" contains a valid CoreData model$/ do |proj_name|
|
24
|
+
steps %Q{
|
25
|
+
Given I cd to "#{proj_name}/#{proj_name}"
|
26
|
+
And a directory named "Model.xcdatamodeld"
|
27
|
+
And I cd to "Model.xcdatamodeld"
|
28
|
+
And a directory named "Model.xcdatamodel"
|
29
|
+
And I cd to "Model.xcdatamodel"
|
30
|
+
And a file named "contents" with:
|
31
|
+
"""
|
32
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
33
|
+
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1811" systemVersion="12D78" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
|
34
|
+
<entity name="AAAEnt1" syncable="YES">
|
35
|
+
<attribute name="attribute" optional="YES" attributeType="Float" defaultValueString="0.0" syncable="YES"/>
|
36
|
+
<relationship name="relationship" optional="YES" minCount="1" maxCount="1" deletionRule="Nullify" destinationEntity="AAAEnt2" inverseName="relationship" inverseEntity="Ent2" syncable="YES"/>
|
37
|
+
</entity>
|
38
|
+
<entity name="AAAEnt2" syncable="YES">
|
39
|
+
<attribute name="attribute" optional="YES" attributeType="String" syncable="YES"/>
|
40
|
+
<relationship name="relationship" optional="YES" minCount="1" maxCount="1" deletionRule="Nullify" destinationEntity="AAAEnt1" inverseName="relationship" inverseEntity="Ent1" syncable="YES"/>
|
41
|
+
</entity>
|
42
|
+
<elements>
|
43
|
+
<element name="AAAEnt1" positionX="160" positionY="192" width="128" height="75"/>
|
44
|
+
<element name="AAAEnt2" positionX="160" positionY="192" width="128" height="75"/>
|
45
|
+
</elements>
|
46
|
+
</model>
|
47
|
+
"""
|
48
|
+
And I cd to "../../../.."
|
49
|
+
}
|
50
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'aruba/api'
|
2
|
+
require 'aruba-doubles'
|
3
|
+
|
4
|
+
Given /^I'm using a clean gemset "([^"]*)" containing fwtoolkit.gem$/ do |gemset|
|
5
|
+
use_clean_gemset(gemset)
|
6
|
+
# Copying over the bundle generated cache to avoid failing a test for a network timeout
|
7
|
+
FileUtils.cp_r 'vendor/cache', File.join(ENV['GEM_HOME'], 'cache')
|
8
|
+
run_simple("sh -c 'cd ../..; gem build ./fwtoolkit.gemspec; gem install --no-ri --no-rdoc fwtoolkit-*.gem; rm fwtoolkit-*.gem'")
|
9
|
+
end
|
10
|
+
|
11
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
require 'aruba-doubles/cucumber'
|
3
|
+
|
4
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
5
|
+
|
6
|
+
lib_test_dir = File.join File.dirname(__FILE__), 'lib_test'
|
7
|
+
$LOAD_PATH.unshift(lib_test_dir) unless $LOAD_PATH.include?(lib_test_dir)
|
8
|
+
|
9
|
+
Before('@slow') do
|
10
|
+
@aruba_timeout_seconds = 60
|
11
|
+
end
|
12
|
+
|
13
|
+
#Before('@fake_fs') do
|
14
|
+
#FakeFS::FileSystem.clone "~/.rvm"
|
15
|
+
#FakeFS::FileSystem.clone '/tmp'
|
16
|
+
#FakeFS::FileSystem.clone "."
|
17
|
+
#FakeFS.activate!
|
18
|
+
#end
|
19
|
+
|
20
|
+
#After('@fake_fs') do
|
21
|
+
#FakeFS::FileSystem.clear
|
22
|
+
#FakeFS.deactivate!
|
23
|
+
#end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'fake_gem'
|
2
|
+
|
3
|
+
module Aruba
|
4
|
+
module Api
|
5
|
+
def create_fake_home(dir_name)
|
6
|
+
@@__arubafw_original_home = ENV["HOME"]
|
7
|
+
home_dir = File.expand_path File.join("tmp", "aruba", dir_name)
|
8
|
+
ENV["HOME"] = home_dir
|
9
|
+
FileUtils.mkdir_p home_dir
|
10
|
+
end
|
11
|
+
|
12
|
+
def restore_original_home
|
13
|
+
unless (defined?(@@__arubafw_original_home).nil? || @@__arubafw_original_home.nil?)
|
14
|
+
ENV['HOME'] = @@__arubafw_original_home
|
15
|
+
@@__arubafw_original_home = nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def install_fake_gem(gem_name)
|
20
|
+
FakeGem.new(gem_name).install
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
World(Aruba::Api)
|
27
|
+
|
28
|
+
After do
|
29
|
+
restore_original_home
|
30
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'aruba/api'
|
2
|
+
|
3
|
+
module Aruba
|
4
|
+
module Api
|
5
|
+
# The original version installs bundle and doesn't check if the gemset is clean, so we can't use it
|
6
|
+
alias_method :orig_use_clean_gemset, :use_clean_gemset unless method_defined?(:orig_use_clean_gemset)
|
7
|
+
|
8
|
+
def use_clean_gemset(gemset)
|
9
|
+
unset_bundler_env_vars
|
10
|
+
# orig_use_clean_gemset gemset
|
11
|
+
run_simple(%{rvm gemset create "#{gemset}"}, true)
|
12
|
+
if all_stdout =~ /'#{gemset}' gemset created \((.*)\)\./
|
13
|
+
gem_home = $1
|
14
|
+
set_env('GEM_HOME', gem_home)
|
15
|
+
set_env('GEM_PATH', gem_home)
|
16
|
+
set_env('BUNDLE_PATH', gem_home)
|
17
|
+
|
18
|
+
paths = (ENV['PATH'] || "").split(File::PATH_SEPARATOR)
|
19
|
+
paths.unshift(File.join(gem_home, 'bin'))
|
20
|
+
set_env('PATH', paths.uniq.join(File::PATH_SEPARATOR))
|
21
|
+
else
|
22
|
+
raise "I didn't understand rvm's output: #{all_stdout}"
|
23
|
+
end
|
24
|
+
|
25
|
+
run_simple(%{rvm --force gemset empty "#{gemset}"}, true)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
require "tmpdir"
|
3
|
+
require "rubygems/installer"
|
4
|
+
|
5
|
+
class FakeGem
|
6
|
+
DEFAULT_VERSION = "99.0.0"
|
7
|
+
|
8
|
+
include Gem::UserInteraction
|
9
|
+
|
10
|
+
def initialize(name, options={})
|
11
|
+
@name = name
|
12
|
+
@options = {:install_dir => Gem.dir}.merge(options)
|
13
|
+
@version = options.delete(:version) || DEFAULT_VERSION
|
14
|
+
end
|
15
|
+
|
16
|
+
def install
|
17
|
+
temp_path = File.join(Dir.tmpdir, "fakegem.#{Process.pid}")
|
18
|
+
FileUtils.mkdir_p(temp_path)
|
19
|
+
Dir.chdir(temp_path) do
|
20
|
+
build_gem
|
21
|
+
Gem::Installer.new(specification.file_name, @options).install
|
22
|
+
end
|
23
|
+
say "Fake gem #@name #@version is now installed"
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def specification
|
28
|
+
@specification ||= Gem::Specification.new{ |s|
|
29
|
+
s.name = @name
|
30
|
+
s.version = @version
|
31
|
+
s.summary = "Fake #@name gem"
|
32
|
+
s.author = "Nobody"
|
33
|
+
s.email = "nobody@localhost"
|
34
|
+
s.description = "Fake gem"
|
35
|
+
s.homepage = "http://website.com"
|
36
|
+
s.has_rdoc = false
|
37
|
+
s.files = []
|
38
|
+
s.executables = []
|
39
|
+
s.require_paths = ["lib"]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_gem
|
44
|
+
FileUtils.mkdir_p("lib")
|
45
|
+
Gem::Builder.new(specification).build
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Feature: Create new project
|
2
|
+
As a lead developer
|
3
|
+
I want to use fwt to create a new Xcode project
|
4
|
+
So that the structure of the project is compliant with FW's standards
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a configured installation of FWToolkit for "Tom the Dev" working for "Awesome Company"
|
8
|
+
|
9
|
+
@xcode
|
10
|
+
Scenario: Create a new project
|
11
|
+
When I successfully run `fwt xcode new MyProject AAA`
|
12
|
+
Then I cd to "MyProject"
|
13
|
+
And the following directories should exist:
|
14
|
+
| MyProject.xcworkspace |
|
15
|
+
| MyProject/MyProject.xcodeproj |
|
16
|
+
| MyProject/MyProject/Supporting Files/Settings.bundle |
|
17
|
+
| MyProject/Myproject/Supporting Files/en.lproj |
|
18
|
+
| MyProject/MyprojectTests/Supporting Files/en.lproj |
|
19
|
+
And the following files should exist:
|
20
|
+
| MyProject/MyProject/AAAAppDelegate.h |
|
21
|
+
| MyProject/MyProject/AAAAppDelegate.m |
|
22
|
+
| MyProject/MyProject/Supporting Files/MyProject-Info.plist |
|
23
|
+
| MyProject/MyProject/Supporting Files/MyProject-Prefix.pch |
|
24
|
+
| MyProject/MyProject/Supporting Files/fw-shared.xcconfig |
|
25
|
+
| MyProject/MyProject/Supporting Files/main.m |
|
26
|
+
| MyProject/MyProject/Supporting Files/version.sh |
|
27
|
+
| MyProject/MyProjectTests/Supporting Files/MyProjectTests-Info.plist |
|
28
|
+
| MyProject/MyProjectTests/MyProjectTests.h |
|
29
|
+
| MyProject/MyProjectTests/MyProjectTests.m |
|
30
|
+
| MyProject/Resources/Default.png |
|
31
|
+
| MyProject/Resources/Default@2x.png |
|
32
|
+
| MyProject/Resources/Default-568h@2x.png |
|
33
|
+
And I successfully run `xcodebuild -scheme MyProject -workspace MyProject.xcworkspace -sdk iphonesimulator6.0`
|
34
|
+
|
35
|
+
@xcode
|
36
|
+
Scenario: Fails to create a new project is the project dir is not empty
|
37
|
+
Given a directory named "MyProject"
|
38
|
+
When I run `fwt xcode new MyProject AAA`
|
39
|
+
Then the stderr should contain:
|
40
|
+
"""
|
41
|
+
Can't create the project. The directory
|
42
|
+
"""
|