uispecrunner 0.2.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.
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Blake Watters
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # UISpecRunner
2
+ ### By Blake Watters <blake@twotoasters.com>
3
+ ### [http://github.com/twotoasters/UISpecRunner]()
4
+
5
+ A flexible CLI test runner for use with the UISpec iOS BDD framework.
6
+
7
+ Install the gem and run: `uispec -h` for details.
8
+
9
+ ## Requirements
10
+ To utilize the uispec utility, you must add the UISpecRunner category
11
+ to your project. This category provides support for running specs by
12
+ Protocol and provides a general environment variable based runner. The
13
+ category header and implementation file as well as a main.m are available
14
+ in the src/ directory with this gem. Use `gem edit uispecrunner` or pull
15
+ them from Github.
16
+
17
+ ## Provides support for:
18
+ - Running all specs
19
+ - Running all specs in a class
20
+ - Running a specific spec class and method
21
+ - Switches for targeting different iOS SDK versions, project files,
22
+ configurations and targets
23
+ - Starting securityd daemon to allow interaction with the keychain
24
+ - Support for reading configuration settings from
25
+ - A Ruby API for configuring your own spec runners
26
+ - Will read common arguments from uispec.opts file for easy per project configuration
27
+
28
+ ## TODO
29
+ - Auto-detect SDK versions available
30
+ - Rake file template
31
+ - Support for running specific files
32
+ - Support for running non-headless (either via AppleScript or iphonesim)
33
+ - Generate a Kicker script
34
+
35
+ ## Copyright
36
+
37
+ Copyright (c) 2010 Blake Watters. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "uispecrunner"
8
+ gem.summary = %Q{Flexible spec runner for UISpec on iOS}
9
+ gem.description = %Q{Provides a simple Ruby interface for running UISpec iPhone tests}
10
+ gem.email = "blake@twotoasters.com"
11
+ gem.homepage = "http://github.com/twotoasters/UISpecRunner"
12
+ gem.authors = ["Blake Watters"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ require 'spec/rake/spectask'
22
+ Spec::Rake::SpecTask.new(:spec) do |spec|
23
+ spec.libs << 'lib' << 'spec'
24
+ spec.spec_files = FileList['spec/**/*_spec.rb']
25
+ end
26
+
27
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.pattern = 'spec/**/*_spec.rb'
30
+ spec.rcov = true
31
+ end
32
+
33
+ task :spec => :check_dependencies
34
+
35
+ task :default => :spec
36
+
37
+ require 'rake/rdoctask'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "UISpecRunner #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.1
data/bin/uispec ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+ require 'uispecrunner/application'
4
+ exit UISpecRunner::Application.run!(*ARGV)
@@ -0,0 +1,31 @@
1
+ require 'uispecrunner'
2
+ require 'uispecrunner/options'
3
+
4
+ class UISpecRunner
5
+ class Application
6
+ def self.run!(*arguments)
7
+ options = UISpecRunner::Options.new(arguments)
8
+
9
+ if options[:invalid_argument]
10
+ $stderr.puts options[:invalid_argument]
11
+ options[:show_help] = true
12
+ end
13
+
14
+ if options[:show_help]
15
+ $stderr.puts options.opts
16
+ return 1
17
+ end
18
+
19
+ # Read standard arguments from uispec.opts
20
+ options_file = 'uispec.opts'
21
+ if File.exists?(options_file)
22
+ option_file_args = File.readlines(options_file).map {|l| l.chomp.split " "}.flatten
23
+ options = options.merge(UISpecRunner::Options.new(option_file_args))
24
+ end
25
+
26
+ runner = UISpecRunner.new(options)
27
+ runner.run!
28
+ return 0
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,101 @@
1
+ class UISpecRunner
2
+ class Options < Hash
3
+ attr_reader :opts, :orig_args
4
+
5
+ def initialize(args)
6
+ super()
7
+
8
+ @orig_args = args.clone
9
+
10
+ # Configure default settings
11
+ self[:run_mode] = :all
12
+ self[:target] = 'UISpec'
13
+ self[:configuration] = 'Debug'
14
+ self[:build_dir] = './build'
15
+ self[:verbose] = false
16
+ self[:sdk_version] = '3.0'
17
+
18
+ require 'optparse'
19
+ @opts = OptionParser.new do |o|
20
+ o.banner = "Usage: #{File.basename($0)} [options]\ne.g. #{File.basename($0)}"
21
+
22
+ o.separator ""
23
+ o.separator "Run Modes:"
24
+
25
+ o.on('-s', '--spec [CLASS]', 'Run the specified UISpec class') do |spec|
26
+ self[:spec] = spec
27
+ self[:run_mode] = :spec
28
+ end
29
+
30
+ o.on('-e', '--example [METHOD]', 'Run the specified example method (requires --spec)') do |example|
31
+ self[:example] = example
32
+ self[:run_mode] = :example
33
+ # TODO: Need to raise exception if method is specified without class
34
+ end
35
+
36
+ o.on('-p', '--protocol [PROTOCOL]', 'Run all UISpec classes implementing the Objective-C protocol') do |protocol|
37
+ self[:protocol] = protocol
38
+ self[:run_mode] = :protocol
39
+ end
40
+
41
+ o.separator ""
42
+ o.separator "Environment options:"
43
+
44
+ o.on('--project [PROJECT_FILE]',
45
+ 'Run the UISpec target in specified project',
46
+ 'Default: auto-detect project in current directory') do |project|
47
+ self[:project] = project
48
+ end
49
+
50
+ o.on('--sdk [VERSION]',
51
+ 'Run the UISpec target against the iPhone SDK version',
52
+ 'Default: 3.0') do |sdk_version|
53
+ self[:sdk_version] = sdk_version
54
+ end
55
+
56
+ o.on('-c', '--configuration [CONFIGURATION]',
57
+ 'Build with specified XCode configuration.',
58
+ 'Default: Debug') do |configuration|
59
+ self[:configuration] = configuration
60
+ end
61
+
62
+ o.on('-t', '--target [TARGET]',
63
+ 'Run the specified XCode target.',
64
+ 'Default: UISpec') do |target|
65
+ self[:target] = target
66
+ end
67
+
68
+ o.on('--builddir [BUILD_DIR]',
69
+ 'Run app in the build directory.',
70
+ 'Default: ./build') do |build_dir|
71
+ self[:build_dir] = build_dir
72
+ end
73
+
74
+ o.on('--securityd',
75
+ 'Start the securityd daemon before running specs. This allow interaction with the keychain.') do |securityd|
76
+ self[:securityd] = securityd
77
+ end
78
+
79
+ o.on('-v', '--[no-]verbose', "Run verbosely") do |v|
80
+ self[:verbose] = v
81
+ end
82
+
83
+ o.on_tail('-h', '--help', 'display this help and exit') do
84
+ self[:show_help] = true
85
+ end
86
+ end
87
+
88
+ begin
89
+ @opts.parse!(args)
90
+ # TODO: Support running specific files
91
+ #self[:project_name] = args.shift
92
+ rescue OptionParser::InvalidOption => e
93
+ self[:invalid_argument] = e.message
94
+ end
95
+ end
96
+
97
+ def merge(other)
98
+ self.class.new(@orig_args + other.orig_args)
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,129 @@
1
+ # UISpec Runner
2
+ # By: Blake Watters <blake@twotoasters.com>
3
+ # Portions borrowed from Eloy Duran's Kicker script (http://github.com/alloy/UISpec)
4
+
5
+ require 'tmpdir'
6
+
7
+ class UISpecRunner
8
+ attr_accessor :project, :target, :configuration, :sdk_version, :build_dir, :verbose, :securityd
9
+
10
+ # private
11
+ attr_accessor :run_mode, :spec, :example, :protocol
12
+
13
+ def initialize(options = {})
14
+ options.each { |k,v| self.send("#{k}=", v) }
15
+ self.target ||= 'UISpec'
16
+ self.configuration ||= 'Debug'
17
+ self.build_dir ||= './build'
18
+ self.run_mode ||= :all
19
+ end
20
+
21
+ def run!
22
+ case run_mode
23
+ when :all
24
+ run_all!
25
+ when :spec
26
+ run_spec!(self.spec)
27
+ when :example
28
+ run_spec_example!(self.spec, self.example)
29
+ when :protocol
30
+ run_protocol!(self.protocol_name)
31
+ else
32
+ raise ArgumentError, "Unknown run mode: #{run_mode}"
33
+ end
34
+ end
35
+
36
+ def run_all!
37
+ run_specs
38
+ end
39
+
40
+ def run_protocol!(protocol_name)
41
+ run_specs('UISPEC_PROTOCOL' => protocol_name)
42
+ end
43
+
44
+ def run_spec!(spec_name)
45
+ run_specs('UISPEC_SPEC' => spec_name)
46
+ end
47
+
48
+ def run_spec_example!(spec_name, example_name)
49
+ run_specs('UISPEC_SPEC' => spec_name, 'UISPEC_EXAMPLE' => example_name)
50
+ end
51
+
52
+ def verbose?
53
+ self.verbose
54
+ end
55
+
56
+ private
57
+ def run_command(command)
58
+ puts "Executing: #{command}" if verbose?
59
+ system(command)
60
+ end
61
+
62
+ def path_to_securityd
63
+ "#{sdk_dir}/usr/libexec/securityd"
64
+ end
65
+
66
+ def start_securityd
67
+ run_command("launchctl submit -l UISpecRunnerDaemons -- #{path_to_securityd}")
68
+ @securityd_running = true
69
+ Signal.trap("INT") { stop_securityd }
70
+ Signal.trap("TERM") { stop_securityd }
71
+ Signal.trap("EXIT") { stop_securityd }
72
+ end
73
+
74
+ def stop_securityd
75
+ run_command("launchctl remove UISpecRunnerDaemons") if @securityd_running
76
+ @securityd_running = false
77
+ end
78
+
79
+ def run_specs(env = {})
80
+ if build_project!
81
+ env.merge!('DYLD_ROOT_PATH' => sdk_dir, 'IPHONE_SIMULATOR_ROOT' => sdk_dir, 'CFFIXED_USER_HOME' => tmpdir)
82
+ puts "Setting environment variables: #{env.inspect}" if verbose?
83
+ with_env(env) do
84
+ start_securityd if securityd
85
+ command = "#{build_dir}/#{configuration}-iphonesimulator/#{target}.app/#{target} -RegisterForSystemEvents"
86
+ puts "Executing: #{command}" if verbose?
87
+ output = `#{command}`
88
+ exit_code = $?
89
+ unless exit_code == 0
90
+ puts "[!] Failed to run UISpec target: #{output}"
91
+ exit 1
92
+ end
93
+ end
94
+ else
95
+ puts "[!] Failed to build UISpecs.app"
96
+ exit 1
97
+ end
98
+ end
99
+
100
+ def sdk_dir
101
+ "/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator#{sdk_version}.sdk"
102
+ end
103
+
104
+ def tmpdir
105
+ Dir.tmpdir
106
+ end
107
+
108
+ def project_switch
109
+ "-project #{project}" if project
110
+ end
111
+
112
+ def sdk_switch
113
+ "-sdk #{sdk_dir}" if sdk_version
114
+ end
115
+
116
+ def build_project!
117
+ command = "xcodebuild #{project_switch} -target #{target} -configuration #{configuration} #{sdk_switch} > /dev/null"
118
+ puts "Building project with: #{command}" if verbose?
119
+ system(command)
120
+ end
121
+
122
+ def with_env(env)
123
+ before = env.inject({}) { |h, (k, _)| h[k] = ENV[k]; h }
124
+ env.each { |k, v| ENV[k] = v }
125
+ yield
126
+ ensure
127
+ before.each { |k, v| ENV[k] = v }
128
+ end
129
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe UISpecRunner::Options do
4
+ it "should set the command to run_protocol" do
5
+ options = UISpecRunner::Options.new('-p UISpecIntegration')
6
+ options[:command].should == :run_protocol
7
+ end
8
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'UISpecRunner'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "UISpecRunner" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ //
2
+ // UISpec+UISpecRunner.h
3
+ // UISpecRunner
4
+ //
5
+ // Created by Blake Watters on 7/15/10.
6
+ // Copyright 2010 Two Toasters. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "UISpec.h"
11
+
12
+ @interface UISpec (UISpecRunner)
13
+
14
+ /**
15
+ * Run all UISpec classes conforming to a given protocol
16
+ */
17
+ +(void)runSpecsConformingToProtocol:(Protocol *)protocol afterDelay:(NSTimeInterval)delay;
18
+
19
+ /**
20
+ * Infers which set of UISpec classes to run from the following environment variables:
21
+ * UISPEC_PROTOCOL - Specifies a protocol to run
22
+ * UISPEC_SPEC - Specifies a spec class to run
23
+ * UISPEC_METHOD - Specifies an example to run (requires UISPEC_SPEC to be set)
24
+ */
25
+ +(void)runSpecsFromEnvironmentAfterDelay:(int)seconds;
26
+
27
+ @end
@@ -0,0 +1,68 @@
1
+ //
2
+ // UISpec+UISpecRunner.m
3
+ // UISpecRunner
4
+ //
5
+ // Created by Blake Watters on 7/15/10.
6
+ // Copyright 2010 Two Toasters. All rights reserved.
7
+ //
8
+
9
+ #import "UISpec+UISpecRunner.h"
10
+
11
+ @implementation UISpec (UISpecRunner)
12
+
13
+ +(BOOL)class:(Class)class conformsToProtocol:(Protocol *)protocol {
14
+ while (class) {
15
+ if (class_conformsToProtocol(class, protocol)) {
16
+ return YES;
17
+ }
18
+ class = class_getSuperclass(class);
19
+ }
20
+ return NO;
21
+ }
22
+
23
+ +(NSArray*)specClassesConformingToProtocol:(Protocol *)protocol {
24
+ NSMutableArray *array = [NSMutableArray array];
25
+ int numClasses = objc_getClassList(NULL, 0);
26
+ if (numClasses > 0) {
27
+ Class *classes = malloc(sizeof(Class) * numClasses);
28
+ (void) objc_getClassList (classes, numClasses);
29
+ int i;
30
+ for (i = 0; i < numClasses; i++) {
31
+ Class c = classes[i];
32
+ if ([self isASpec:c] && [self class:c conformsToProtocol:protocol]) {
33
+ [array addObject:c];
34
+ }
35
+ }
36
+ free(classes);
37
+ }
38
+ return array;
39
+ }
40
+
41
+ +(void)runSpecsConformingToProtocol:(Protocol *)protocol afterDelay:(NSTimeInterval)delay {
42
+ NSArray* specClasses = [self specClassesConformingToProtocol:protocol];
43
+ [self performSelector:@selector(runSpecClasses:) withObject:specClasses afterDelay:delay];
44
+ }
45
+
46
+ +(void)runSpecsFromEnvironmentAfterDelay:(int)seconds {
47
+ char* protocolName = getenv("UISPEC_PROTOCOL");
48
+ char* specName = getenv("UISPEC_SPEC");
49
+ char* exampleName = getenv("UISPEC_EXAMPLE");
50
+ if (protocolName) {
51
+ Protocol* protocol = NSProtocolFromString([NSString stringWithUTF8String:protocolName]);
52
+ NSLog(@"[UISpecRunner] Running Specs conforming to Protocol: %@", [NSString stringWithUTF8String:protocolName]);
53
+ [UISpec runSpecsConformingToProtocol:protocol afterDelay:seconds];
54
+ } else if (exampleName) {
55
+ if (nil == specName) {
56
+ [NSException raise:nil format:@"UISPEC_EXAMPLE cannot be specified without providing UISPEC_SPEC"];
57
+ }
58
+ NSLog(@"[UISpecRunner] Running Examples %s on Spec %s", exampleName, specName);
59
+ [UISpec runSpec:[NSString stringWithUTF8String:specName] example:[NSString stringWithUTF8String:exampleName] afterDelay:seconds];
60
+ } else if (specName) {
61
+ NSLog(@"[UISpecRunner] Running Spec %s", specName);
62
+ [UISpec runSpec:[NSString stringWithUTF8String:specName] afterDelay:seconds];
63
+ } else {
64
+ [UISpec runSpecsAfterDelay:seconds];
65
+ }
66
+ }
67
+
68
+ @end
data/src/main.m ADDED
@@ -0,0 +1,23 @@
1
+ //
2
+ // main.m
3
+ // UISpecRunner
4
+ //
5
+ // Created by Blake Watters on 4/20/10.
6
+ // Copyright 2010 Two Toasters. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+ #import <UISpec.h>
11
+ #import "UISpec+UISpecRunner.h"
12
+
13
+ int main(int argc, char *argv[]) {
14
+
15
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
16
+
17
+ // Run the specs
18
+ [UISpec runSpecsFromEnvironmentAfterDelay:0.5];
19
+
20
+ int retVal = UIApplicationMain(argc, argv, nil, nil);
21
+ [pool release];
22
+ return retVal;
23
+ }
@@ -0,0 +1,64 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{uispecrunner}
8
+ s.version = "0.2.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Blake Watters"]
12
+ s.date = %q{2010-07-15}
13
+ s.default_executable = %q{uispec}
14
+ s.description = %q{Provides a simple Ruby interface for running UISpec iPhone tests}
15
+ s.email = %q{blake@twotoasters.com}
16
+ s.executables = ["uispec"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".gitignore",
23
+ "LICENSE",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/uispec",
28
+ "lib/uispecrunner.rb",
29
+ "lib/uispecrunner/application.rb",
30
+ "lib/uispecrunner/options.rb",
31
+ "spec/options_spec.rb",
32
+ "spec/spec.opts",
33
+ "spec/spec_helper.rb",
34
+ "spec/uispecrunner_spec.rb",
35
+ "src/UISpec+UISpecRunner.h",
36
+ "src/UISpec+UISpecRunner.m",
37
+ "src/main.m",
38
+ "uispecrunner.gemspec"
39
+ ]
40
+ s.homepage = %q{http://github.com/twotoasters/UISpecRunner}
41
+ s.rdoc_options = ["--charset=UTF-8"]
42
+ s.require_paths = ["lib"]
43
+ s.rubygems_version = %q{1.3.6}
44
+ s.summary = %q{Flexible spec runner for UISpec on iOS}
45
+ s.test_files = [
46
+ "spec/options_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/uispecrunner_spec.rb"
49
+ ]
50
+
51
+ if s.respond_to? :specification_version then
52
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
+ s.specification_version = 3
54
+
55
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
56
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
57
+ else
58
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
62
+ end
63
+ end
64
+
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uispecrunner
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 1
9
+ version: 0.2.1
10
+ platform: ruby
11
+ authors:
12
+ - Blake Watters
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-15 00:00:00 -04:00
18
+ default_executable: uispec
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
31
+ version: 1.2.9
32
+ type: :development
33
+ version_requirements: *id001
34
+ description: Provides a simple Ruby interface for running UISpec iPhone tests
35
+ email: blake@twotoasters.com
36
+ executables:
37
+ - uispec
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - LICENSE
42
+ - README.md
43
+ files:
44
+ - .gitignore
45
+ - LICENSE
46
+ - README.md
47
+ - Rakefile
48
+ - VERSION
49
+ - bin/uispec
50
+ - lib/uispecrunner.rb
51
+ - lib/uispecrunner/application.rb
52
+ - lib/uispecrunner/options.rb
53
+ - spec/options_spec.rb
54
+ - spec/spec.opts
55
+ - spec/spec_helper.rb
56
+ - spec/uispecrunner_spec.rb
57
+ - src/UISpec+UISpecRunner.h
58
+ - src/UISpec+UISpecRunner.m
59
+ - src/main.m
60
+ - uispecrunner.gemspec
61
+ has_rdoc: true
62
+ homepage: http://github.com/twotoasters/UISpecRunner
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options:
67
+ - --charset=UTF-8
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 1.3.6
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: Flexible spec runner for UISpec on iOS
91
+ test_files:
92
+ - spec/options_spec.rb
93
+ - spec/spec_helper.rb
94
+ - spec/uispecrunner_spec.rb