why_test 0.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.
- data/.gitignore +11 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/README.markdown +24 -0
- data/Rakefile +13 -0
- data/TODO.markdown +32 -0
- data/bin/why_test +106 -0
- data/lib/version.rb +3 -0
- data/lib/why_test.rb +2 -0
- data/lib/why_test/generator.rb +70 -0
- data/lib/why_test/generators/riot/Rakefile +12 -0
- data/lib/why_test/generators/riot/test/sample_test.rb +8 -0
- data/lib/why_test/generators/riot/test/teststrap.rb +3 -0
- data/lib/why_test/generators/rspec/Rakefile +9 -0
- data/lib/why_test/generators/rspec/spec/sample_spec.rb +5 -0
- data/lib/why_test/generators/rspec/spec/spec_helper.rb +1 -0
- data/lib/why_test/generators/shindo/Rakefile +13 -0
- data/lib/why_test/generators/shindo/tests/sample_tests.rb +11 -0
- data/lib/why_test/generators/shindo/tests/test_helper.rb +3 -0
- data/lib/why_test/generators/testrocket/Rakefile +12 -0
- data/lib/why_test/generators/testrocket/test/sample_test.rb +20 -0
- data/lib/why_test/generators/testrocket/test/test_helper.rb +2 -0
- data/test/generator_test.rb +39 -0
- data/test/sample_test.rb +7 -0
- data/test/teststrap.rb +3 -0
- data/why_test.gemspec +28 -0
- data/why_test.rdoc +5 -0
- metadata +143 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
[](https://secure.travis-ci.org/charlietanksley/why_test.png)
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
# Why_test
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
Perhaps my least favorite part of setting up a new project is getting
|
10
|
+
the tests set up. I start projects infrequently enough (and play with
|
11
|
+
different test frameworks often enough), that I can never remember what
|
12
|
+
goes in the Rakefile for an Rspec test suite vs. one for Riot. If you
|
13
|
+
are using rails, you can often +rake rspec:install+ or whatever to get
|
14
|
+
everything set up. If you aren't using Rails, you have to resort to the
|
15
|
+
googles. Why_test takes the pain out of setting up your tests.
|
16
|
+
|
17
|
+
# Use
|
18
|
+
|
19
|
+
**Currently only works on Ruby 1.9.2.**
|
20
|
+
|
21
|
+
```
|
22
|
+
gem install why_test
|
23
|
+
gem why_test riot
|
24
|
+
```
|
data/Rakefile
ADDED
data/TODO.markdown
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# To do
|
2
|
+
|
3
|
+
* Add better tests (find a way to test the generated code).
|
4
|
+
* Add more frameworks.
|
5
|
+
* Consider adding some switches (like --no-sample for no sample code, or
|
6
|
+
--one for Ruby 1.8 (v. 1.9)).
|
7
|
+
|
8
|
+
# So many frameworks!
|
9
|
+
|
10
|
+
## For sure
|
11
|
+
|
12
|
+
* Lemon (really interesting linking of tests and methods)
|
13
|
+
* Testy (sample code doubles as a test suite)
|
14
|
+
|
15
|
+
## Projects I might want to include
|
16
|
+
|
17
|
+
* Bacon (negative: it's basically just rspec, right?)
|
18
|
+
* Micronaut (negative: it adds some to rspec, but looks mostly like an
|
19
|
+
rspec clone)
|
20
|
+
* Zebra (one-line tests without extra 'comments'; problem: last updated
|
21
|
+
2009?; second problem: depends on gems that don't exit or don't work
|
22
|
+
with 1.9.2.)
|
23
|
+
* https://github.com/rubyworks/microtest
|
24
|
+
* https://github.com/rubyworks/lime
|
25
|
+
* https://github.com/rubyworks/citron
|
26
|
+
|
27
|
+
|
28
|
+
## Done
|
29
|
+
|
30
|
+
* Shindo (clear focus on return value; also apparently has a good
|
31
|
+
interactive mode)
|
32
|
+
* https://github.com/peterc/testrocket.git
|
data/bin/why_test
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# 1.9 adds realpath to resolve symlinks; 1.8 doesn't
|
3
|
+
# have this method, so we add it so we get resolved symlinks
|
4
|
+
# and compatibility
|
5
|
+
unless File.respond_to? :realpath
|
6
|
+
class File #:nodoc:
|
7
|
+
def self.realpath path
|
8
|
+
return realpath(File.readlink(path)) if symlink?(path)
|
9
|
+
path
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
$: << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
|
14
|
+
require 'rubygems'
|
15
|
+
require 'gli'
|
16
|
+
#require 'version'
|
17
|
+
require 'why_test'
|
18
|
+
|
19
|
+
include GLI
|
20
|
+
|
21
|
+
program_desc 'Generate test setup files and rake tasks'
|
22
|
+
|
23
|
+
version WhyTest::VERSION
|
24
|
+
|
25
|
+
#desc 'Describe some switch here'
|
26
|
+
#switch [:s,:switch]
|
27
|
+
|
28
|
+
#desc 'Describe some flag here'
|
29
|
+
#default_value 'the default'
|
30
|
+
#arg_name 'The name of the argument'
|
31
|
+
#flag [:f,:flagname]
|
32
|
+
|
33
|
+
desc 'An extremely fast, expressive, and context-driven unit-testing framework. Protest the slow test.'
|
34
|
+
#arg_name 'Describe arguments to rspec here'
|
35
|
+
command :riot do |c|
|
36
|
+
#c.desc 'Describe a switch to rspec'
|
37
|
+
#c.switch :s
|
38
|
+
|
39
|
+
#c.desc 'Describe a flag to rspec'
|
40
|
+
#c.default_value 'default'
|
41
|
+
#c.flag :f
|
42
|
+
c.action do |global_options,options,args|
|
43
|
+
dir = Dir.pwd
|
44
|
+
g = Generator.new('riot')
|
45
|
+
g.write_files(dir)
|
46
|
+
|
47
|
+
# Your command logic here
|
48
|
+
|
49
|
+
# If you have any errors, just raise them
|
50
|
+
# raise "that command made no sense"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc 'BDD for Ruby.'
|
55
|
+
#arg_name 'Describe arguments to rspec here'
|
56
|
+
command :rspec do |c|
|
57
|
+
c.action do |global_options,options,args|
|
58
|
+
dir = Dir.pwd
|
59
|
+
g = Generator.new('rspec')
|
60
|
+
g.write_files(dir)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'Work with your tests, not against them.'
|
65
|
+
command :shindo do |c|
|
66
|
+
c.action do |global_options,options,args|
|
67
|
+
dir = Dir.pwd
|
68
|
+
g = Generator.new('shindo')
|
69
|
+
g.write_files(dir)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
desc 'Super simple Ruby testing library.'
|
74
|
+
command :testrocket do |c|
|
75
|
+
c.action do |global_options,options,args|
|
76
|
+
dir = Dir.pwd
|
77
|
+
g = Generator.new('testrocket')
|
78
|
+
g.write_files(dir)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
pre do |global,command,options,args|
|
86
|
+
# Pre logic here
|
87
|
+
# Return true to proceed; false to abourt and not call the
|
88
|
+
# chosen command
|
89
|
+
# Use skips_pre before a command to skip this block
|
90
|
+
# on that command only
|
91
|
+
true
|
92
|
+
end
|
93
|
+
|
94
|
+
post do |global,command,options,args|
|
95
|
+
# Post logic here
|
96
|
+
# Use skips_post before a command to skip this
|
97
|
+
# block on that command only
|
98
|
+
end
|
99
|
+
|
100
|
+
on_error do |exception|
|
101
|
+
# Error logic here
|
102
|
+
# return false to skip default error handling
|
103
|
+
true
|
104
|
+
end
|
105
|
+
|
106
|
+
exit GLI.run(ARGV)
|
data/lib/version.rb
ADDED
data/lib/why_test.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
class Generator
|
2
|
+
|
3
|
+
attr_reader :directory
|
4
|
+
|
5
|
+
def initialize(framework)
|
6
|
+
@details = create(framework)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Creates a hash with the relevant information for generating our
|
10
|
+
# testing files.
|
11
|
+
#
|
12
|
+
# @param [String] the name of a testing framework
|
13
|
+
# @return [Hash] hash with keys for framework name (:framework), files
|
14
|
+
# to be created (:files), and the rakefile (:rakfile).
|
15
|
+
def create(framework_name)
|
16
|
+
results = Hash[:framework => framework_name, :directories => [],
|
17
|
+
:files => [], :rakefile => 'Rakefile']
|
18
|
+
|
19
|
+
dir = File.join(File.dirname(File.expand_path(__FILE__)), 'generators', framework_name)
|
20
|
+
Dir.chdir dir
|
21
|
+
Dir["**/*"].each do |f|
|
22
|
+
results[:files].push f unless f == 'Rakefile' or File.directory? f
|
23
|
+
results[:directories].push f if File.directory? f
|
24
|
+
end
|
25
|
+
|
26
|
+
results
|
27
|
+
end
|
28
|
+
|
29
|
+
# Write the files.
|
30
|
+
#
|
31
|
+
# @param [String] the name of a root directory (default is current
|
32
|
+
# directory)
|
33
|
+
def write_files(root_directory='.')
|
34
|
+
base_dir = File.expand_path root_directory
|
35
|
+
@template_directory = File.join(File.dirname(__FILE__), 'generators', @details[:framework])
|
36
|
+
|
37
|
+
system "mkdir -p #{base_dir}" unless File.exists?(base_dir)
|
38
|
+
Dir.chdir base_dir
|
39
|
+
|
40
|
+
create_rakefile
|
41
|
+
create_directories
|
42
|
+
write_test_files
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def create_rakefile
|
49
|
+
rakefile_contents = File.open(File.join(@template_directory, @details[:rakefile])) { |f| f.read }
|
50
|
+
File.open('Rakefile', 'a') do |f|
|
51
|
+
f.write rakefile_contents
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_directories
|
56
|
+
@details[:directories].each do |d|
|
57
|
+
system "mkdir -p #{d}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def write_test_files
|
62
|
+
@details[:files].each do |f|
|
63
|
+
file_contents = File.open(File.join(@template_directory, f)) { |c| c.read }
|
64
|
+
File.open(f, 'w') do |f|
|
65
|
+
f.write file_contents
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'rspec'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# https://github.com/geemus/shindo
|
2
|
+
# try `shindo -array_tag` to ignore any tests with that tag, and
|
3
|
+
# `shindo +array_tag` to only run that test.
|
4
|
+
|
5
|
+
Shindo.tests('string manipulation', 'string_tag') do
|
6
|
+
returns('gnirts') { 'string'.reverse }
|
7
|
+
end
|
8
|
+
|
9
|
+
Shindo.tests('array manipulation', 'array_tag') do
|
10
|
+
returns(1) { [1].first }
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# https://github.com/peterc/testrocket
|
2
|
+
|
3
|
+
# # USAGE
|
4
|
+
# +-> { block that should succeed }
|
5
|
+
# --> { block that should fail }
|
6
|
+
#
|
7
|
+
## These two tests will deliberately fail
|
8
|
+
#+-> { raise }
|
9
|
+
#--> { true }
|
10
|
+
#
|
11
|
+
## A 'pending' test
|
12
|
+
#~-> { "this is a pending test" }
|
13
|
+
#
|
14
|
+
## A description
|
15
|
+
#!-> { "use this for descriptive output and to separate your test parts" }
|
16
|
+
|
17
|
+
require 'test_helper'
|
18
|
+
|
19
|
+
+-> { 'string'.reverse == 'gnirts' }
|
20
|
+
--> { 'string'.reverse == 'string' }
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#require 'tmpdir'
|
2
|
+
require 'teststrap'
|
3
|
+
require 'why_test/generator'
|
4
|
+
|
5
|
+
context "#create" do
|
6
|
+
setup { Generator.new('riot') }
|
7
|
+
|
8
|
+
asserts(:create, 'riot').equals Hash[:framework => 'riot', :directories => ['test'],
|
9
|
+
:files => ['test/sample_test.rb', 'test/teststrap.rb'], :rakefile => 'Rakefile']
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#write_files" do
|
13
|
+
helper(:tmp_dir) do
|
14
|
+
File.join(File.expand_path(File.dirname(__FILE__)), 'tmp', 'temp')
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
Generator.new('riot').write_files(tmp_dir)
|
19
|
+
tmp_dir
|
20
|
+
end
|
21
|
+
|
22
|
+
teardown { system "rm -r -f #{tmp_dir}" }
|
23
|
+
|
24
|
+
context "it creates the directories we need" do
|
25
|
+
asserts{ File.exists?(File.join(topic, 'test')) }.equals true
|
26
|
+
asserts{ File.directory?(File.join(topic, 'test')) }.equals true
|
27
|
+
end
|
28
|
+
|
29
|
+
context "it creates a Rakefile" do
|
30
|
+
asserts{ File.exists?(File.join(topic, 'Rakefile')) }.equals true
|
31
|
+
end
|
32
|
+
|
33
|
+
context "it creates the files we need" do
|
34
|
+
asserts{ File.exists?(File.join(topic, 'test', 'teststrap.rb')) }.equals true
|
35
|
+
asserts{ File.exists?(File.join(topic, 'test', 'sample_test.rb')) }.equals true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
data/test/sample_test.rb
ADDED
data/test/teststrap.rb
ADDED
data/why_test.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require File.join([File.dirname(__FILE__),'lib','version.rb'])
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "why_test"
|
7
|
+
s.version = WhyTest::VERSION
|
8
|
+
s.authors = ["Charlie Tanksley"]
|
9
|
+
s.email = ["charlie.tanksley@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/charlietanksley/why_test"
|
11
|
+
s.summary = %q{Test setup generation}
|
12
|
+
s.description = %q{why_test is a command line utility that generates basic test setups for a number of different test frameworks.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "why_test"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency('gli')
|
22
|
+
s.add_development_dependency('rake')
|
23
|
+
s.add_development_dependency('riot')
|
24
|
+
s.add_development_dependency('rspec')
|
25
|
+
s.add_development_dependency('shindo')
|
26
|
+
s.add_development_dependency('testrocket')
|
27
|
+
|
28
|
+
end
|
data/why_test.rdoc
ADDED
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: why_test
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Charlie Tanksley
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-07 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: gli
|
16
|
+
requirement: &2152972760 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2152972760
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2152972320 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152972320
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: riot
|
38
|
+
requirement: &2152971900 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2152971900
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &2152971420 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2152971420
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: shindo
|
60
|
+
requirement: &2152970980 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2152970980
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: testrocket
|
71
|
+
requirement: &2152970520 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2152970520
|
80
|
+
description: why_test is a command line utility that generates basic test setups for
|
81
|
+
a number of different test frameworks.
|
82
|
+
email:
|
83
|
+
- charlie.tanksley@gmail.com
|
84
|
+
executables:
|
85
|
+
- why_test
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- .gitignore
|
90
|
+
- .travis.yml
|
91
|
+
- Gemfile
|
92
|
+
- README.markdown
|
93
|
+
- Rakefile
|
94
|
+
- TODO.markdown
|
95
|
+
- bin/why_test
|
96
|
+
- lib/version.rb
|
97
|
+
- lib/why_test.rb
|
98
|
+
- lib/why_test/generator.rb
|
99
|
+
- lib/why_test/generators/riot/Rakefile
|
100
|
+
- lib/why_test/generators/riot/test/sample_test.rb
|
101
|
+
- lib/why_test/generators/riot/test/teststrap.rb
|
102
|
+
- lib/why_test/generators/rspec/Rakefile
|
103
|
+
- lib/why_test/generators/rspec/spec/sample_spec.rb
|
104
|
+
- lib/why_test/generators/rspec/spec/spec_helper.rb
|
105
|
+
- lib/why_test/generators/shindo/Rakefile
|
106
|
+
- lib/why_test/generators/shindo/tests/sample_tests.rb
|
107
|
+
- lib/why_test/generators/shindo/tests/test_helper.rb
|
108
|
+
- lib/why_test/generators/testrocket/Rakefile
|
109
|
+
- lib/why_test/generators/testrocket/test/sample_test.rb
|
110
|
+
- lib/why_test/generators/testrocket/test/test_helper.rb
|
111
|
+
- test/generator_test.rb
|
112
|
+
- test/sample_test.rb
|
113
|
+
- test/teststrap.rb
|
114
|
+
- why_test.gemspec
|
115
|
+
- why_test.rdoc
|
116
|
+
homepage: http://github.com/charlietanksley/why_test
|
117
|
+
licenses: []
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
requirements: []
|
135
|
+
rubyforge_project: why_test
|
136
|
+
rubygems_version: 1.8.8
|
137
|
+
signing_key:
|
138
|
+
specification_version: 3
|
139
|
+
summary: Test setup generation
|
140
|
+
test_files:
|
141
|
+
- test/generator_test.rb
|
142
|
+
- test/sample_test.rb
|
143
|
+
- test/teststrap.rb
|