gemdev 0.1.0
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/README +0 -0
- data/lib/gemdev.rb +27 -0
- data/lib/test/unit/subsets.rb +168 -0
- data/test/gemdev_test_helper.rb +1 -0
- data/test/gemdev_test_suite.rb +4 -0
- metadata +52 -0
data/README
ADDED
File without changes
|
data/lib/gemdev.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Kernel
|
5
|
+
alias development_gem_orginal_require require
|
6
|
+
|
7
|
+
def require(path)
|
8
|
+
development_gem_orginal_require path
|
9
|
+
rescue LoadError => load_error
|
10
|
+
raise load_error unless Gem.require_development(path)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Gem
|
15
|
+
def self.require_development(path)
|
16
|
+
#File.touch(config_file) if !File.exists?(config_file)
|
17
|
+
|
18
|
+
config = YAML.load_file(config_file)
|
19
|
+
return false unless config.kind_of?(Hash)
|
20
|
+
|
21
|
+
development = config['development']
|
22
|
+
return false if development.nil? || !development.has_key?(path)
|
23
|
+
|
24
|
+
require development[path]
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
# These subsets facilitate testing by using the ENV variables specified on the command line
|
6
|
+
# to indicate which tests to run. The ENV variables are set by rake, so this code implicitly
|
7
|
+
# assumes that you're running your tests through rake.
|
8
|
+
#
|
9
|
+
class Test::Unit::TestCase
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def require_platform(*platforms)
|
13
|
+
@platforms = platforms
|
14
|
+
end
|
15
|
+
|
16
|
+
def match_platform?(*platforms)
|
17
|
+
platforms.each do |platform|
|
18
|
+
platform.to_s =~ /^(non_)?(.*)/
|
19
|
+
|
20
|
+
non = true if $1
|
21
|
+
match_platform = !RUBY_PLATFORM.index($2).nil?
|
22
|
+
return false unless (non && !match_platform) || (!non && match_platform)
|
23
|
+
end
|
24
|
+
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
alias :original_suite :suite
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.suite
|
32
|
+
if match_platform?(*@platforms)
|
33
|
+
original_suite
|
34
|
+
else
|
35
|
+
method_names = public_instance_methods(true)
|
36
|
+
suite = Test::Unit::TestSuite.new(name)
|
37
|
+
method_names.each do |method_name|
|
38
|
+
catch(:invalid_test) do
|
39
|
+
suite << new('on_test_skipped') if method_name =~ /^test/
|
40
|
+
end
|
41
|
+
end
|
42
|
+
suite
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def platform_test(*platforms, &block)
|
47
|
+
if self.class.match_platform?(*platforms)
|
48
|
+
block.call
|
49
|
+
else
|
50
|
+
print ' '
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Subset test declaration for extended tests -- type: EXTENDED
|
55
|
+
# Prints 'x' unless run.
|
56
|
+
def extended_test(&block)
|
57
|
+
subset_test("EXTENDED", "x", &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Subset test declaration for benchmard tests -- type: BENCHMARK
|
61
|
+
# Prints 'b' unless run.
|
62
|
+
def benchmark_test(&block)
|
63
|
+
subset_test("BENCHMARK") do
|
64
|
+
puts calling_method
|
65
|
+
block.call
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Case tests take a hash of testcases and expected values. Each pair in the hash will
|
70
|
+
# be passed to the block if type CASE_TEST is specified. Individual cases tests can be
|
71
|
+
# specified by providing a regexp in CASE; the testcase will run if the pretty-print of
|
72
|
+
# the testcase matches the provided regexp. Example:
|
73
|
+
#
|
74
|
+
# case_test(
|
75
|
+
# [1,2,3] => 'an array testcase',
|
76
|
+
# '[1, 2, 3]' => 'the pretty print of the array',
|
77
|
+
# 'another testcase' => 'some third testcase'
|
78
|
+
# ).do |testcase, expected|
|
79
|
+
# ...your test code...
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
# ENV['CASE_TEST']=true => all tests run
|
83
|
+
# ENV['CASE']='1, 2, 3' => first two tests run
|
84
|
+
# ENV['CASE']='another' => only last test runs
|
85
|
+
def case_test(hash, &block)
|
86
|
+
if match_regexp?("CASE_TEST", calling_method)
|
87
|
+
hash.each_pair do |testcase, expected|
|
88
|
+
yield(testcase, expected) if match_regexp?("CASE", testcase)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def prompt_test(*array, &block)
|
94
|
+
subset_test("PROMPT", "p") do
|
95
|
+
puts "This test requires your input.\nEnter 'exit' to skip the test."
|
96
|
+
|
97
|
+
config = {}
|
98
|
+
array.each do |key|
|
99
|
+
print "#{key}: "
|
100
|
+
value = gets.strip
|
101
|
+
flunk "exited test" if value =~ /exit/i
|
102
|
+
|
103
|
+
config[key] = value
|
104
|
+
end
|
105
|
+
|
106
|
+
yield(config)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
protected
|
111
|
+
|
112
|
+
def on_test_skipped
|
113
|
+
print ' '
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns true if the ENV[var] is set and matches /^true%/i
|
117
|
+
def env_true?(var)
|
118
|
+
ENV[var] && ENV[var] =~ /^true$/i
|
119
|
+
end
|
120
|
+
|
121
|
+
# Returns true if the subset type or 'ALL' is specified in ENV
|
122
|
+
def run_subset?(type)
|
123
|
+
env_true?(type) || env_true?("ALL")
|
124
|
+
end
|
125
|
+
|
126
|
+
# Returns true if the pretty-print string for obj matches the regexp specified in ENV[type].
|
127
|
+
# Returns the default value if 'ALL' is specified in ENV or type is not specified in ENV.
|
128
|
+
def match_regexp?(type, obj, default=true)
|
129
|
+
return default if env_true?("ALL")
|
130
|
+
return default unless ENV[type]
|
131
|
+
|
132
|
+
str = ""
|
133
|
+
PP.singleline_pp(obj, str)
|
134
|
+
str =~ Regexp.new(ENV[type])
|
135
|
+
end
|
136
|
+
|
137
|
+
# Calling method iterates over the call stack, and returns the first calling
|
138
|
+
# method name that matches the input pattern (by default /^test/)
|
139
|
+
def calling_method(pattern=/^test/)
|
140
|
+
0.upto(caller.length) do |i|
|
141
|
+
caller[i] =~ /:in `(.*)'$/
|
142
|
+
method_name = $1
|
143
|
+
return method_name if method_name =~ pattern
|
144
|
+
end
|
145
|
+
|
146
|
+
''
|
147
|
+
end
|
148
|
+
|
149
|
+
# Basic method for a subset test. The provided block will run if:
|
150
|
+
# - The subset type or 'ALL' is specified in ENV
|
151
|
+
# - The calling method matches the regexp provided in the "TYPE_TEST" ENV variable
|
152
|
+
#
|
153
|
+
# Otherwise the block will be skipped and +skip+ will be printed. By default skip
|
154
|
+
# is the first letter of +type+.
|
155
|
+
def subset_test(type, skip=type[0..0].downcase, &block)
|
156
|
+
type = type.upcase
|
157
|
+
type_test = "#{type}_TEST"
|
158
|
+
if run_subset?(type) || ENV[type_test]
|
159
|
+
if match_regexp?(type_test, calling_method)
|
160
|
+
block.call
|
161
|
+
else
|
162
|
+
print skip
|
163
|
+
end
|
164
|
+
else
|
165
|
+
print skip
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'extensions/test/unit/subsets'
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: gemdev
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2007-03-21 00:00:00 -06:00
|
8
|
+
summary: Making gem development a bit easier.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: simon.chiang@uchsc.edu
|
12
|
+
homepage: http://rubyforge.org/projects/gemdev/
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire: gemdev
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Simon Chiang
|
31
|
+
files:
|
32
|
+
- test/gemdev_test_helper.rb
|
33
|
+
- test/gemdev_test_suite.rb
|
34
|
+
- lib/gemdev.rb
|
35
|
+
- lib/test
|
36
|
+
- lib/test/unit
|
37
|
+
- lib/test/unit/subsets.rb
|
38
|
+
- README
|
39
|
+
test_files:
|
40
|
+
- test/gemdev_test_suite.rb
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README
|
45
|
+
executables: []
|
46
|
+
|
47
|
+
extensions: []
|
48
|
+
|
49
|
+
requirements: []
|
50
|
+
|
51
|
+
dependencies: []
|
52
|
+
|