cuesmash 0.1.7.1 → 0.1.9

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.
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
  # coding: utf-8
3
3
 
4
+ require 'cuesmash/app'
5
+
4
6
  module Cuesmash
5
7
 
6
8
  #
7
9
  # Provides an object to get information about the ios app that is being built.
8
10
  #
9
- # @author [jarod]
10
- #
11
- class IosApp
11
+ class IosApp < App
12
12
 
13
13
  # Public: the path to the dir containing the built app i.e. /tmp/MyAppQWERQW/Build/Products/Debug-iphonesimulator/
14
14
  attr_reader :app_dir
@@ -26,23 +26,17 @@ module Cuesmash
26
26
  # Create a new App instance
27
27
  #
28
28
  # @param file_name [String] The usually is the scheme of the xcode project
29
- # @param travis_build [Boolean] if the build is running on travis-ci
29
+ # @param build_configuration [String] which iOS build configuration to run i.e. Release, Debug
30
30
  #
31
31
  # @return [App] A app instance
32
- def initialize(file_name:, travis_build: false, build_configuration:)
32
+ def initialize(file_name:, build_configuration:)
33
33
  @app_name = "#{file_name}" << ".app"
34
34
  @tmp_dir = Dir.mktmpdir(file_name)
35
35
  @build_configuration = build_configuration
36
36
 
37
- # if we are running this on travis then we want to build inside the project
38
- # dir (it's a VM so it gets cleaned up each run). Otherwise let's create
39
- # our own tmp dir for each build.
40
- if travis_build
41
- @app_dir = "./build/Release-iphonesimulator/"
42
- else
43
- @app_dir = "#{@tmp_dir}" << "/#{@build_configuration}-iphonesimulator/"
44
- end
37
+ @app_dir = "#{@tmp_dir}" << "/#{@build_configuration}-iphonesimulator/"
38
+
45
39
  @app_path = "#{@app_dir}" << "#{@app_name}"
46
40
  end
47
- end
48
- end
41
+ end # class IosApp
42
+ end # module Cuesmash
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+
3
+ module Cuesmash
4
+
5
+ #
6
+ # iOS Specific compiler
7
+ #
8
+ class IosCompiler < Compiler
9
+
10
+ attr_accessor :scheme
11
+ attr_accessor :tmp_dir
12
+ attr_accessor :build_configuration
13
+
14
+ def initialize(scheme, tmp_dir, build_configuration)
15
+ @scheme = scheme
16
+ @tmp_dir = tmp_dir
17
+ @build_configuration = build_configuration
18
+ end
19
+
20
+ #
21
+ # Generate the string to be used as the xcode build command
22
+ # using the scheme ivar
23
+ #
24
+ # @return [String] The full xcode build command with args
25
+ def command
26
+ xcode_command = "set -o pipefail && xcodebuild #{workspace} -scheme #{@scheme} -derivedDataPath #{@tmp_dir} -configuration #{@build_configuration} OBJROOT=#{@tmp_dir} SYMROOT=#{@tmp_dir} -sdk iphonesimulator build | bundle exec xcpretty -c"
27
+
28
+ Logger.info "xcode_command == #{xcode_command}"
29
+ xcode_command
30
+ end # command
31
+
32
+ #
33
+ # Looks in the current directory for the workspace file and
34
+ # gets it's name if there is one
35
+ #
36
+ # @return [String] The name of the workspace file that was found along with the -workspace flag
37
+ def workspace
38
+ wp = Dir["*.xcworkspace"].first
39
+ if wp
40
+ flag = "-workspace #{wp}"
41
+ Logger.debug "workspace == #{wp}"
42
+ return flag
43
+ else
44
+ Logger.debug "no workspace found"
45
+ return wp
46
+ end
47
+ end # workspace
48
+ end # class IosCompiler
49
+ end # module Cuesmash
@@ -28,6 +28,7 @@ module Cuesmash
28
28
 
29
29
  # TODO: the git checkouts needs to check to see if the dirs have already been
30
30
  # checked out.
31
+ # TODO: (JM) turns out that appium needs to have `brew install ant` run before it will work for android
31
32
 
32
33
  private
33
34
 
@@ -3,7 +3,11 @@
3
3
 
4
4
  require 'thor'
5
5
  require 'cuesmash'
6
- require 'cuesmash/setup'
6
+ require 'cuesmash/ioscompiler'
7
+ require 'cuesmash/androidapp'
8
+ require 'cuesmash/androidcompiler'
9
+ require 'cuesmash/android_command'
10
+ require 'byebug'
7
11
 
8
12
  module Cuesmash
9
13
 
@@ -22,14 +26,16 @@ module Cuesmash
22
26
  --tags -t the tags to pass to cucumber, for multiple tags pass one per tag. See cucumber tags for more info. https://github.com/cucumber/cucumber/wiki/Tags\n
23
27
  --output -o The output directory for the test report --not yet implemented--\n
24
28
  --format -f The format of the test report --not yet implemented--\n
25
- --scheme -s the Xcode scheme to build\n
29
+ --scheme -s iOS only: the Xcode scheme to build\n
30
+ --app_name -n Android only: the name of the app\n
26
31
  --debug -d BOOLEAN turn on debug output\n
27
32
  --travis_ci -c BOOLEAN turn on settings for building on Travis CI\n
28
33
  --server -r BOOLEAN start up server (requires sinatra app in the project directory)\n
29
34
  --profile -p which cucumber.yml profile to use\n
30
35
  --quiet -q BOOLEAN cucumber quiet mode
31
36
  LONGDESC
32
- method_option :scheme, type: :string, aliases: "-s", desc: "the Xcode scheme to build"
37
+ method_option :scheme, type: :string, aliases: "-s", desc: "iOS only: the Xcode scheme to build"
38
+ method_option :app_name, type: :string, aliases: "-n", desc: "Android only: the name of the app"
33
39
  method_option :tags, type: :array, aliases: "-t", desc: "the tags to pass to cucumber, for multiple tags pass one per tag"
34
40
  method_option :debug, type: :boolean, default: false, aliases: "-d", desc: "turn on debug output"
35
41
  method_option :travis_ci, type: :boolean, default: false, aliases: "-c", desc: "turn on settings for building on Travis CI"
@@ -39,59 +45,91 @@ module Cuesmash
39
45
  def test
40
46
 
41
47
  # get the cuesmash.yml config
42
- config = load_config
43
-
44
- # Create new IosApp object
45
- app = IosApp.new(file_name: options[:scheme], travis_build: options[:travis_ci])
48
+ @config = load_config
46
49
 
47
50
  # Compile the project
48
- compiler = Cuesmash::Compiler.new(options[:scheme], app.tmp_dir)
49
- compiler.compile
50
-
51
- # enumerate over each device / OS combination and run the tests.
52
- config['devices'].each do |device, oses|
53
- oses.each do |os|
54
- say "\n============================\ntesting iOS #{os} on #{device}", :green
55
- Cuesmash::Command.execute(device: device, os: os, server: options[:server], tags: options[:tags], scheme: options[:scheme], travis: options[:travis_ci], debug: options[:debug], app: app, profile: options[:profile], quiet: options[:quiet])
56
- end
57
- end # device each
58
-
59
- # clean up the temp dir
60
- unless options[:travis_ci]
61
- # clean up temp dir
51
+ if @config['platform'] == 'iOS'
52
+
53
+ # Create new IosApp object
54
+ @app = IosApp.new(file_name: options[:scheme], build_configuration: @config['build_configuration'])
55
+
56
+ setup_ios
57
+
58
+ # enumerate over each device / OS combination and run the tests.
59
+ @config['devices'].each do |device, oses|
60
+ oses.each do |os|
61
+ say "\n============================\ntesting iOS #{os} on #{device}", :green
62
+ Cuesmash::Command.execute(device: device,
63
+ os: os,
64
+ server: options[:server],
65
+ tags: options[:tags],
66
+ scheme: options[:scheme],
67
+ debug: options[:debug],
68
+ app: @app,
69
+ profile: options[:profile],
70
+ quiet: options[:quiet],
71
+ timeout: @config['default']['test_timeout'].to_s)
72
+ end
73
+ end # device each
74
+
75
+ # clean up the temp dir
62
76
  Logger.info "Cleaning up tmp dir\n"
63
- FileUtils.remove_entry app.tmp_dir
77
+ FileUtils.remove_entry @app.tmp_dir
78
+
79
+ elsif @config['platform'] == 'Android'
80
+
81
+ say "Setting up android", :red
82
+
83
+ @app = Cuesmash::AndroidApp.new(project_name: options[:app_name], build_configuration: @config['build_configuration'])
84
+ setup_android
85
+
86
+ # enumerate over each device / OS combination and run the tests.
87
+ @config['devices']['emulators'].each do |emulator|
88
+ say "\n============================\ntesting Android on #{emulator}", :green
89
+ Cuesmash::AndroidCommand.execute( avd: emulator,
90
+ server: options[:server],
91
+ tags: options[:tags],
92
+ debug: options[:debug],
93
+ app: @app,
94
+ profile: options[:profile],
95
+ quiet: options[:quiet],
96
+ timeout: @config['default']['test_timeout'].to_s)
97
+ end # device each
98
+ else
99
+ say "please set platform: 'iOS' or 'Android' in your .cuesmash.yml file", :red
100
+ return
64
101
  end
65
102
  end # test
66
103
 
67
104
  desc "build OPTIONS", "compile the app and create appium.txt to use for arc"
68
105
  long_desc <<-LONGDESC
69
- --scheme -s the Xcode scheme to build\n
106
+ --scheme -s iOS: the Xcode scheme to build\n
107
+ --app_name -n Android: the app name
70
108
  LONGDESC
71
109
  method_option :scheme, type: :string, aliases: "-s", desc: "the Xcode scheme to build"
110
+ method_option :app_name, type: :string, aliases: "-n", desc: "Android only: the name of the app"
72
111
  def build
73
112
 
74
113
  # get the cuesmash.yml config
75
- config = load_config
114
+ @config = load_config
76
115
 
77
116
  # if no default then bail
78
- if config['default'] == nil
117
+ if @config['default'] == nil
79
118
  say "add a default device and os version to the .cuesmash.yml", :red
80
119
  return
81
120
  end
82
121
 
83
- # Create new IosApp object
84
- app = IosApp.new(file_name: options[:scheme], build_configuration: config['build_configuration'])
85
-
86
- # Compile the project
87
- compiler = Cuesmash::Compiler.new(options[:scheme], app.tmp_dir, config['build_configuration'])
88
- compiler.compile
89
-
90
- # create the appium text file
91
- appium = AppiumText.new(platform_name: "iOS", device_name: config['default']['os'], platform_version: config['default']['version'].to_s, app: app.app_path)
92
- appium.execute
122
+ if @config['platform'] == 'iOS'
123
+ setup_ios
124
+ elsif @config['platform'] == 'Android'
125
+ say "Setting up android"
126
+ setup_android
127
+ else
128
+ say "please set platform: 'iOS' or 'Android' in your .cuesmash.yml file", :red
129
+ return
130
+ end
93
131
 
94
- say "\nYour build is available at #{app.app_path}", :green
132
+ say "\nYour build is available at #{@app.app_path}", :green
95
133
  end # build
96
134
 
97
135
  no_commands do
@@ -109,6 +147,55 @@ module Cuesmash
109
147
  end
110
148
  config
111
149
  end # end load_config
150
+
151
+ #
152
+ # helper methods
153
+ #
154
+ def setup_ios
155
+ @app = IosApp.new(file_name: options[:scheme], build_configuration: @config['build_configuration'])
156
+
157
+ # Compile the project
158
+ compiler = Cuesmash::IosCompiler.new(options[:scheme], @app.tmp_dir, @config['build_configuration'])
159
+ compiler.compile
160
+
161
+ ios_appium_text
162
+ end
163
+
164
+ #
165
+ # helper method for setting up android build
166
+ #
167
+ def setup_android
168
+ @app = Cuesmash::AndroidApp.new(project_name: options[:app_name], build_configuration: @config['build_configuration'])
169
+
170
+ # Compile the project
171
+ compiler = Cuesmash::AndroidCompiler.new
172
+ compiler.compile
173
+
174
+ android_appium_text
175
+ end
176
+
177
+ #
178
+ # iOS Appium text file set up
179
+ #
180
+ def ios_appium_text
181
+ appium = Cuesmash::AppiumText.new(platform_name: "iOS",
182
+ device_name: @config['default']['os'],
183
+ platform_version: @config['default']['version'].to_s,
184
+ app: @app.app_path,
185
+ new_command_timeout: @config['default']['test_timeout'].to_s)
186
+ appium.execute
187
+ end
188
+
189
+ #
190
+ # Android Appium text file set up
191
+ #
192
+ def android_appium_text
193
+ appium = Cuesmash::AndroidAppiumText.new( platform_name: @config['platform'],
194
+ avd: @config['default_emulator'],
195
+ app: @app.app_path,
196
+ new_command_timeout: @config['default']['test_timeout'].to_s)
197
+ appium.execute
198
+ end
112
199
  end # no_commands
113
200
  end # Start class
114
201
  end # module Cuesmash
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'cuesmash/android_compiler'
3
+
4
+ describe Cuesmash::AndroidCompiler do
5
+
6
+ before(:each) do
7
+ Cuesmash::AndroidCompiler.any_instance.stub(:puts)
8
+ end
9
+
10
+ describe "when generating the command" do
11
+
12
+ before(:each) do
13
+ @compiler = Cuesmash::AndroidCompiler.new
14
+ end
15
+
16
+ end # "when generating the command"
17
+
18
+ describe "when compiling" do
19
+
20
+ before(:each) do
21
+ wait = double
22
+ @value = double
23
+ wait.stub(:value){@value}
24
+ wait.stub(:join)
25
+ Open3.stub(:popen3).and_yield(nil, nil, nil, wait)
26
+
27
+ @compiler = Cuesmash::AndroidCompiler.new
28
+ end # before
29
+
30
+ it "should complete if all is well" do
31
+ @value.stub(:exitstatus){0}
32
+ @compiler.compile do |complete|
33
+ expect(complete).to equal(true)
34
+ end
35
+ end # "should complete if all is well"
36
+ end # "when compiling"
37
+ end # describe Cuesmash::AndroidCompiler
@@ -4,9 +4,11 @@ describe Cuesmash::AppiumText do
4
4
 
5
5
  describe "when creating a new instance" do
6
6
  before(:all) do
7
- @appiumtext = Cuesmash::AppiumText.new(platform_name: "iOS", device_name: "iPhone Simulator", platform_version: "7.1", app: "MyApp")
7
+ @appiumtext = Cuesmash::AppiumText.new(platform_name: "iOS", device_name: "iPhone Simulator", platform_version: "7.1", app: "MyApp", new_command_timeout: "90")
8
8
  end
9
9
 
10
+ expected = "[caps]\nplatformName = \"iOS\"\ndeviceName = \"iPhone Simulator\"\nplatformVersion = \"7.1\"\napp = \"MyApp\"\nnewCommandTimeout = \"90\"\n"
11
+
10
12
  it "should have a platform name" do
11
13
  expect(@appiumtext.platform_name).to match("iOS")
12
14
  end
@@ -22,5 +24,24 @@ describe Cuesmash::AppiumText do
22
24
  it "should have an app name" do
23
25
  expect(@appiumtext.app).to match("MyApp")
24
26
  end
27
+
28
+ it "should have an newCommandTimeout" do
29
+ expect(@appiumtext.new_command_timeout).to match("90")
30
+ end
31
+
32
+ it "should output this text" do
33
+ # TODO: we need to test that the text output is actually right. I'm putting this off until next week though.
34
+ # # IO.expects(:write).with("features/support/appium.txt", expected).once
35
+ # expect(IO).to recieve(:write).with("features/support/appium.txt", expected)
36
+
37
+ # @appiumtext.execute
38
+ # # expect(@appiumtext.appium_text_for_file).to match(expected)
39
+ # #
40
+ # #
41
+ # # expect(logger).to receive(:account_closed).with(account)
42
+
43
+ # # account.close
44
+ end
45
+
25
46
  end
26
47
  end
data/spec/command_spec.rb CHANGED
@@ -55,14 +55,9 @@ describe Cuesmash::Command do
55
55
  Cuesmash::Cucumber.stub(:new){@mock}
56
56
  end
57
57
 
58
- it "should set the cucumber ios version" do
59
- Cuesmash::Cucumber.should_receive(:new).with("ios", anything, anything, anything)
60
- Cuesmash::Command.run_tests(ios: "ios", tags: "tags", profile: "profile", quiet: true)
61
- end
62
-
63
58
  it "should set the cucumber tags" do
64
- Cuesmash::Cucumber.should_receive(:new).with(anything, "tags", anything, anything)
65
- Cuesmash::Command.run_tests(ios: "ios", tags: "tags", profile: "profile", quiet: true)
59
+ Cuesmash::Cucumber.should_receive(:new).with("tags", anything, anything)
60
+ Cuesmash::Command.run_tests(tags: "tags", profile: "profile", quiet: true)
66
61
  end
67
62
 
68
63
  it "should set the format" do
@@ -70,7 +65,7 @@ describe Cuesmash::Command do
70
65
  Cuesmash::Cucumber.stub(:new){@cucumber}
71
66
 
72
67
  @cucumber.should_receive(:format=)
73
- Cuesmash::Command.run_tests(ios: nil, tags: nil, profile: nil, format: "format", quiet: anything)
68
+ Cuesmash::Command.run_tests(tags: nil, profile: nil, format: "format", quiet: anything)
74
69
  end
75
70
 
76
71
  it "should set the output" do
@@ -78,12 +73,12 @@ describe Cuesmash::Command do
78
73
  Cuesmash::Cucumber.stub(:new){@cucumber}
79
74
 
80
75
  @cucumber.should_receive(:output=)
81
- Cuesmash::Command.run_tests(ios: nil, tags: nil, profile: nil, format: nil, output: "output", quiet: anything)
76
+ Cuesmash::Command.run_tests(tags: nil, profile: nil, format: nil, output: "output", quiet: anything)
82
77
  end
83
78
 
84
79
  it "should start the tests" do
85
80
  @mock.should_receive(:test)
86
- Cuesmash::Command.run_tests(ios: "ios", tags: "tags", profile: "profile", quiet: true)
81
+ Cuesmash::Command.run_tests(tags: "tags", profile: "profile", quiet: true)
87
82
  end
88
83
 
89
84
  end # describe "when running the cucumber tests"
@@ -15,7 +15,7 @@ describe Cuesmash::Cucumber do
15
15
  wait.stub(:join)
16
16
  Open3.stub(:popen3).and_yield(nil, nil, nil, wait)
17
17
 
18
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
18
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
19
19
  @cucumber.stub(:command)
20
20
  end
21
21
 
@@ -29,75 +29,75 @@ describe Cuesmash::Cucumber do
29
29
  describe "when generating the command" do
30
30
 
31
31
  it "should not add the ios version if missing" do
32
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
32
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
33
33
  @cucumber.stub(:tag_arguments)
34
34
 
35
35
  expect(@cucumber.instance_eval{command}).not_to match(/DEVICE_TARGET/)
36
36
  end
37
37
 
38
38
  it "should add the format" do
39
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
39
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
40
40
  @cucumber.format = "test-format"
41
41
 
42
42
  expect(@cucumber.instance_eval{command}).to match(/--format test-format/)
43
43
  end
44
44
 
45
45
  it "should not add the format if missing" do
46
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
46
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
47
47
 
48
48
  expect(@cucumber.instance_eval{command}).not_to match(/--format/)
49
49
  end
50
50
 
51
51
  it "should add the output" do
52
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
52
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
53
53
  @cucumber.output = "test-output"
54
54
 
55
55
  expect(@cucumber.instance_eval{command}).to match(/--out test-output/)
56
56
  end
57
57
 
58
58
  it "should not add the output if missing" do
59
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
59
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
60
60
 
61
61
  expect(@cucumber.instance_eval{command}).not_to match(/--out/)
62
62
  end
63
63
 
64
64
  it "should add the tags" do
65
- @cucumber = Cuesmash::Cucumber.new(nil, ["tag1", "tag2"], nil, nil)
65
+ @cucumber = Cuesmash::Cucumber.new(["tag1", "tag2"], nil, nil)
66
66
  expect(@cucumber.instance_eval{command}).to match(/--tags tag1 --tags tag2/)
67
67
  end
68
68
 
69
69
  it "should not add tags if missing" do
70
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
70
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
71
71
  expect(@cucumber.instance_eval{command}).not_to match(/--tags/)
72
72
  end
73
73
 
74
74
  it "should add the profile" do
75
- @cucumber = Cuesmash::Cucumber.new(nil, nil, "test", nil)
75
+ @cucumber = Cuesmash::Cucumber.new(nil, "test", nil)
76
76
  expect(@cucumber.instance_eval{command}).to match(/--profile test/)
77
77
  end
78
78
 
79
79
  it "should not add tags if missing" do
80
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
80
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
81
81
  expect(@cucumber.instance_eval{command}).not_to match(/--profile/)
82
82
  end
83
83
 
84
84
  it "should add the color flag" do
85
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
85
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
86
86
  expect(@cucumber.instance_eval{command}).to match(/-c/)
87
87
  end
88
88
 
89
89
  it "should not add quiet if missing" do
90
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, nil)
90
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, nil)
91
91
  expect(@cucumber.instance_eval{command}).not_to match(/--quiet/)
92
92
  end
93
93
 
94
94
  it "should not add quiet if false" do
95
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, false)
95
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, false)
96
96
  expect(@cucumber.instance_eval{command}).not_to match(/--quiet/)
97
97
  end
98
98
 
99
99
  it "should add the quiet flag" do
100
- @cucumber = Cuesmash::Cucumber.new(nil, nil, nil, true)
100
+ @cucumber = Cuesmash::Cucumber.new(nil, nil, true)
101
101
  expect(@cucumber.instance_eval{command}).to match(/--quiet/)
102
102
  end
103
103
 
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'cuesmash/ios_app'
3
+ require 'cuesmash/app'
4
+
5
+ describe Cuesmash::IosApp do
6
+ describe "when creating a new instance" do
7
+
8
+ it "should have an app_dir instance" do
9
+ stub_dir
10
+ @iosapp = Cuesmash::IosApp.new(file_name: "MyApp", build_configuration: "Debug")
11
+ expect(@iosapp.app_dir).to match("/tmp/Debug-iphonesimulator/")
12
+ end
13
+
14
+ it "should have an app_path instance" do
15
+ stub_dir
16
+ @iosapp = Cuesmash::IosApp.new(file_name: "MyApp", build_configuration: "Debug")
17
+ expect(@iosapp.app_path).to match("/tmp/Debug-iphonesimulator/MyApp.app")
18
+ end
19
+
20
+ it "should have a tmp_dir instance" do
21
+ stub_dir
22
+ @iosapp = Cuesmash::IosApp.new(file_name: "MyApp", build_configuration: "Debug")
23
+ expect(@iosapp.tmp_dir).to match("/tmp")
24
+ end
25
+
26
+ it "should have an app_name instance" do
27
+
28
+ @iosapp = Cuesmash::IosApp.new(file_name: "MyApp", build_configuration: "Debug")
29
+ expect(@iosapp.app_name).to match("MyApp.app")
30
+ end
31
+
32
+ def stub_dir
33
+ Dir.stub(:mktmpdir) { "/tmp" }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+ require 'cuesmash/ios_compiler'
3
+
4
+ describe Cuesmash::IosCompiler do
5
+
6
+ before(:each) do
7
+ Cuesmash::IosCompiler.any_instance.stub(:puts)
8
+ end
9
+
10
+ it "should have a scheme instance" do
11
+ compiler = Cuesmash::IosCompiler.new("scheme", "/tmp", "Debug")
12
+ expect(compiler.scheme).to match("scheme")
13
+ end
14
+
15
+ it "should have a tmp_dir instance" do
16
+ compiler = Cuesmash::IosCompiler.new("scheme", "/tmp", "Debug")
17
+ expect(compiler.tmp_dir).to match("/tmp")
18
+ end
19
+
20
+ it "should have a build config" do
21
+ compiler = Cuesmash::IosCompiler.new("scheme", "/tmp", "Debug")
22
+ expect(compiler.build_configuration).to match("Debug")
23
+ end
24
+
25
+ describe "when generating the command" do
26
+
27
+ before(:each) do
28
+ Cuesmash::IosCompiler.any_instance.stub(:workspace)
29
+ @compiler = Cuesmash::IosCompiler.new("test-scheme", "/tmp", "Debug")
30
+ end
31
+
32
+ it "should contain the scheme" do
33
+ expect(@compiler.instance_eval{command}).to match(/test-scheme/)
34
+ end
35
+
36
+ it "should contain the tmp path" do
37
+ expect(@compiler.instance_eval{command}).to match(/tmp/)
38
+ end
39
+
40
+ it "should contain the build configuration" do
41
+ expect(@compiler.instance_eval{command}).to match(/Debug/)
42
+ end
43
+ end
44
+
45
+ describe "when getting the workspacae" do
46
+
47
+ before(:each) do
48
+ @compiler = Cuesmash::IosCompiler.new(nil, "/tmp", "Debug")
49
+ Dir.stub(:[]){["workspace-file"]}
50
+ end
51
+
52
+ it "should get the workspace from the current directory" do
53
+ expect(@compiler.instance_eval{workspace}).to match(/workspace-file/)
54
+ end
55
+ end
56
+
57
+ describe "when compiling" do
58
+
59
+ before(:each) do
60
+ wait = double
61
+ @value = double
62
+ wait.stub(:value){@value}
63
+ wait.stub(:join)
64
+ Open3.stub(:popen3).and_yield(nil, nil, nil, wait)
65
+
66
+ @compiler = Cuesmash::IosCompiler.new(nil, "/tmp", "Debug")
67
+ end
68
+
69
+ it "should complete if all is well" do
70
+ @value.stub(:exitstatus){0}
71
+ @compiler.compile do |complete|
72
+ expect(complete).to equal(true)
73
+ end
74
+ end
75
+ end
76
+ end