methadone 1.9.5 → 2.0.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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +2 -5
- data/README.rdoc +75 -47
- data/Rakefile +25 -29
- data/bin/methadone +13 -5
- data/lib/methadone.rb +1 -1
- data/lib/methadone/cli_logger.rb +0 -1
- data/lib/methadone/cli_logging.rb +1 -1
- data/lib/methadone/cucumber.rb +4 -0
- data/lib/methadone/main.rb +4 -1
- data/lib/methadone/test/base_integration_test.rb +29 -0
- data/lib/methadone/test/integration_test_assertions.rb +63 -0
- data/lib/methadone/version.rb +1 -1
- data/methadone.gemspec +3 -5
- data/templates/full/Rakefile.erb +9 -12
- data/templates/full/bin/executable.erb +2 -0
- data/templates/rspec/spec/something_spec.rb.erb +1 -1
- data/templates/test_unit/test/integration/test_cli.rb.erb +11 -0
- data/templates/test_unit/test/{tc_something.rb.erb → unit/test_something.rb.erb} +0 -0
- data/test/integration/base_integration_test.rb +60 -0
- data/test/integration/test_bootstrap.rb +150 -0
- data/test/integration/test_cli.rb +21 -0
- data/test/integration/test_license.rb +56 -0
- data/test/integration/test_readme.rb +53 -0
- data/test/integration/test_rspec.rb +28 -0
- data/test/integration/test_version.rb +21 -0
- data/test/{base_test.rb → unit/base_test.rb} +0 -0
- data/test/{command_for_tests.sh → unit/command_for_tests.sh} +0 -0
- data/test/{execution_strategy → unit/execution_strategy}/test_base.rb +0 -0
- data/test/{execution_strategy → unit/execution_strategy}/test_jvm.rb +4 -4
- data/test/{execution_strategy → unit/execution_strategy}/test_mri.rb +0 -0
- data/test/{execution_strategy → unit/execution_strategy}/test_open_3.rb +5 -5
- data/test/{execution_strategy → unit/execution_strategy}/test_open_4.rb +5 -5
- data/test/{execution_strategy → unit/execution_strategy}/test_rbx_open_4.rb +0 -0
- data/test/unit/test/test_integration_test_assertions.rb +211 -0
- data/test/{test_cli_logger.rb → unit/test_cli_logger.rb} +17 -17
- data/test/{test_cli_logging.rb → unit/test_cli_logging.rb} +12 -12
- data/test/{test_exit_now.rb → unit/test_exit_now.rb} +4 -4
- data/test/{test_main.rb → unit/test_main.rb} +48 -48
- data/test/{test_sh.rb → unit/test_sh.rb} +37 -37
- metadata +61 -93
- data/features/bootstrap.feature +0 -153
- data/features/license.feature +0 -43
- data/features/readme.feature +0 -26
- data/features/rspec_support.feature +0 -27
- data/features/step_definitions/bootstrap_steps.rb +0 -47
- data/features/step_definitions/license_steps.rb +0 -30
- data/features/step_definitions/readme_steps.rb +0 -26
- data/features/step_definitions/version_steps.rb +0 -4
- data/features/support/env.rb +0 -26
- data/features/version.feature +0 -17
- data/templates/full/features/executable.feature.erb +0 -13
- data/templates/full/features/step_definitions/executable_steps.rb.erb +0 -1
- data/templates/full/features/support/env.rb.erb +0 -16
data/lib/methadone/version.rb
CHANGED
data/methadone.gemspec
CHANGED
@@ -20,12 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_dependency("bundler")
|
21
21
|
s.add_development_dependency("rake")
|
22
22
|
s.add_development_dependency("rdoc","~> 5.0")
|
23
|
-
s.add_development_dependency("cucumber")
|
24
|
-
s.add_development_dependency("aruba", "0.5.1")
|
25
23
|
s.add_development_dependency("simplecov", "~> 0.5")
|
26
24
|
s.add_development_dependency("clean_test")
|
27
|
-
s.add_development_dependency("mocha"
|
25
|
+
s.add_development_dependency("mocha")
|
28
26
|
s.add_development_dependency("sdoc", "1.0.0.rc1")
|
29
|
-
s.add_development_dependency("rspec"
|
30
|
-
s.add_development_dependency("i18n"
|
27
|
+
s.add_development_dependency("rspec") # needed for testing the generated tests
|
28
|
+
s.add_development_dependency("i18n")
|
31
29
|
end
|
data/templates/full/Rakefile.erb
CHANGED
@@ -35,8 +35,6 @@ end
|
|
35
35
|
<% else %>
|
36
36
|
require 'rake/testtask'
|
37
37
|
<% end %>
|
38
|
-
require 'cucumber'
|
39
|
-
require 'cucumber/rake/task'
|
40
38
|
gem 'rdoc' # we need the installed RDoc gem, not the system one
|
41
39
|
require 'rdoc/task'
|
42
40
|
|
@@ -50,25 +48,24 @@ RSpec::Core::RakeTask.new do |t|
|
|
50
48
|
end
|
51
49
|
<% else %>
|
52
50
|
Rake::TestTask.new do |t|
|
53
|
-
t.pattern = 'test/
|
51
|
+
t.pattern = 'test/unit/test_*.rb'
|
54
52
|
end
|
55
|
-
<% end %>
|
56
53
|
|
57
|
-
|
58
|
-
|
59
|
-
Cucumber::Rake::Task.new(:features) do |t|
|
60
|
-
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
61
|
-
t.fork = false
|
54
|
+
Rake::TestTask.new("test:integration") do |t|
|
55
|
+
t.pattern = 'test/integration/test_*.rb'
|
62
56
|
end
|
57
|
+
<% end %>
|
63
58
|
|
64
59
|
Rake::RDocTask.new do |rd|
|
65
60
|
<% if using_readme %>
|
66
61
|
rd.main = "README.rdoc"
|
67
|
-
<% end %>
|
68
62
|
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
63
|
+
<% else %>
|
64
|
+
rd.rdoc_files.include("lib/**/*.rb","bin/**/*")
|
65
|
+
<% end %>
|
69
66
|
end
|
70
67
|
<% if rspec %>
|
71
|
-
task :default => [:spec
|
68
|
+
task :default => [:spec]
|
72
69
|
<% else %>
|
73
|
-
task :default => [:test
|
70
|
+
task :default => [:test,"test:integration"]
|
74
71
|
<% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "methadone/test/base_integration_test"
|
2
|
+
|
3
|
+
class TestSomething < Methadone::BaseIntegrationTest
|
4
|
+
def test_truth
|
5
|
+
stdout,stderr,results = run_app("<%= gemname %>","--help")
|
6
|
+
assert_banner(stdout, "<%= gemname %>", takes_options: true, takes_arguments: false)
|
7
|
+
assert_option(stdout,"-h", "--help")
|
8
|
+
assert_option(stdout,"--version")
|
9
|
+
assert_oneline_summary(stdout)
|
10
|
+
end
|
11
|
+
end
|
File without changes
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "methadone/test/base_integration_test"
|
2
|
+
require "clean_test/test_case"
|
3
|
+
|
4
|
+
class BaseIntegrationTest < Methadone::BaseIntegrationTest
|
5
|
+
include Clean::Test::GivenWhenThen
|
6
|
+
include Clean::Test::TestThat
|
7
|
+
include Clean::Test::Any
|
8
|
+
def setup
|
9
|
+
root = (Pathname(__FILE__).dirname / ".." / "..").expand_path
|
10
|
+
ENV["PATH"] = (root / "bin").to_s + File::PATH_SEPARATOR + ENV["PATH"]
|
11
|
+
ENV["RUBYLIB"] = (root / "lib").to_s + File::PATH_SEPARATOR + ENV["RUBYLIB"]
|
12
|
+
@pwd = pwd
|
13
|
+
@tmdir = Dir.mktmpdir
|
14
|
+
chdir @tmdir
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
chdir @pwd
|
19
|
+
rm_rf @tmdir
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def methadone(args, allow_failure: false)
|
25
|
+
command = "methadone #{args}"
|
26
|
+
stdout, stderr, status = Open3.capture3(command)
|
27
|
+
if !status.success? && !allow_failure
|
28
|
+
raise "'#{command}' failed: #{status.inspect}\n\nSTDOUT:\n\n#{stdout}\n\nSTDERR:\n\n#{stderr}\nEND"
|
29
|
+
end
|
30
|
+
[ stdout, stderr, status ]
|
31
|
+
end
|
32
|
+
|
33
|
+
def run_app(gemname,args="")
|
34
|
+
run_in_gem(gemname, "bin/#{gemname}", args)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Runs rake inside the app for an integration test, returning stdout and stderr as strings
|
38
|
+
def rake(gemname,args="")
|
39
|
+
run_in_gem(gemname, "rake", args)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Runs an arbitrary command inside the gem, returning stdout and stderr as strings.
|
43
|
+
def run_in_gem(gemname, command, args)
|
44
|
+
stdout = nil
|
45
|
+
stderr = nil
|
46
|
+
original_rubylib = ENV["RUBYLIB"]
|
47
|
+
chdir gemname do
|
48
|
+
ENV["RUBYLIB"] = "lib" + File::PATH_SEPARATOR + original_rubylib
|
49
|
+
stdout, stderr, result = Open3.capture3("#{command} #{args}")
|
50
|
+
unless result.success?
|
51
|
+
raise "#{stdout}\n#{stderr}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
[ stdout, stderr ]
|
55
|
+
ensure
|
56
|
+
ENV["RUBYLIB"] = original_rubylib
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require_relative "base_integration_test"
|
2
|
+
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
class TestBootstrap < BaseIntegrationTest
|
6
|
+
test_that "bootstrapping a new app generates basic boilerplate" do
|
7
|
+
When { methadone "newgem" }
|
8
|
+
Then {
|
9
|
+
[
|
10
|
+
"bin/newgem",
|
11
|
+
"lib/newgem.rb",
|
12
|
+
"lib/newgem/version.rb",
|
13
|
+
"newgem.gemspec",
|
14
|
+
"README.rdoc",
|
15
|
+
"Rakefile",
|
16
|
+
].each do |file|
|
17
|
+
assert File.exist?("newgem/#{file}"), "Expected newgem/#{file} to exist"
|
18
|
+
end
|
19
|
+
}
|
20
|
+
And {
|
21
|
+
assert_all_files_staged_in_git
|
22
|
+
}
|
23
|
+
When { @stdout, _ = run_app("newgem", "--help") }
|
24
|
+
Then {
|
25
|
+
assert_banner(@stdout, "newgem", takes_options: true, takes_arguments: false)
|
26
|
+
assert_standard_options(@stdout)
|
27
|
+
}
|
28
|
+
When { @stdout, _ = rake("newgem", "-T") }
|
29
|
+
Then {
|
30
|
+
assert_supports_basic_rake_tasks(@stdout)
|
31
|
+
}
|
32
|
+
When { @stdout, _ = rake("newgem", "") }
|
33
|
+
Then {
|
34
|
+
assert_match(/1 tests, 1 assertions, 0 failures, 0 errors/,@stdout)
|
35
|
+
assert_match(/1 tests, 8 assertions, 0 failures, 0 errors/,@stdout) # integration test
|
36
|
+
}
|
37
|
+
And {
|
38
|
+
gemspec = File.read("newgem/newgem.gemspec")
|
39
|
+
refute_match(/TODO/,gemspec)
|
40
|
+
refute_match(/FIXME/,gemspec)
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
test_that "bootstrapping a new app with a dash in its name works" do
|
45
|
+
When { methadone "new-gem" }
|
46
|
+
Then {
|
47
|
+
[
|
48
|
+
"bin/new-gem",
|
49
|
+
"lib/new/gem.rb",
|
50
|
+
"lib/new/gem/version.rb",
|
51
|
+
"new-gem.gemspec",
|
52
|
+
"README.rdoc",
|
53
|
+
"Rakefile",
|
54
|
+
].each do |file|
|
55
|
+
assert File.exist?("new-gem/#{file}"), "Expected new-gem/#{file} to exist: #{`ls -ltR new-gem`}}"
|
56
|
+
end
|
57
|
+
}
|
58
|
+
When { @stdout, _ = run_app("new-gem", "--help") }
|
59
|
+
Then {
|
60
|
+
assert_banner(@stdout, "new-gem", takes_options: true, takes_arguments: false)
|
61
|
+
assert_standard_options(@stdout)
|
62
|
+
}
|
63
|
+
When { @stdout, _ = rake("new-gem", "-T") }
|
64
|
+
Then {
|
65
|
+
assert_supports_basic_rake_tasks(@stdout)
|
66
|
+
}
|
67
|
+
When { @stdout, _ = rake("new-gem", "") }
|
68
|
+
Then {
|
69
|
+
assert_match(/1 tests, 1 assertions, 0 failures, 0 errors/,@stdout)
|
70
|
+
assert_match(/1 tests, 8 assertions, 0 failures, 0 errors/,@stdout) # integration test
|
71
|
+
}
|
72
|
+
And {
|
73
|
+
gemspec = File.read("new-gem/new-gem.gemspec")
|
74
|
+
refute_match(/TODO/,gemspec)
|
75
|
+
refute_match(/FIXME/,gemspec)
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
test_that "won't overwrite an existing dir" do
|
80
|
+
Given { methadone "newgem" }
|
81
|
+
And {
|
82
|
+
File.open("newgem/new_file.txt","w") do |file|
|
83
|
+
file.puts "Creating a file to verify it doesn't get blown away"
|
84
|
+
end
|
85
|
+
}
|
86
|
+
When { @stdout, @stderr, @status = methadone "newgem", allow_failure: true }
|
87
|
+
Then {
|
88
|
+
assert File.exist?("newgem/new_file.txt")
|
89
|
+
}
|
90
|
+
And {
|
91
|
+
refute @status.success?
|
92
|
+
}
|
93
|
+
And {
|
94
|
+
assert_match(/#{Regexp.escape("error: newgem exists, use --force to override")}/,@stderr)
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
test_that "will overwrite an existing dir with --force" do
|
99
|
+
Given { methadone "newgem" }
|
100
|
+
And {
|
101
|
+
File.open("newgem/new_file.txt","w") do |file|
|
102
|
+
file.puts "Creating a file to verify it doesn't get blown away"
|
103
|
+
end
|
104
|
+
}
|
105
|
+
When { @stdout, @stderr, @status = methadone "newgem --force", allow_failure: true }
|
106
|
+
Then {
|
107
|
+
refute File.exist?("newgem/new_file.txt")
|
108
|
+
}
|
109
|
+
And {
|
110
|
+
assert @status.success?
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
test_that "must supply a gem name" do
|
115
|
+
When { _, @stderr, @status = methadone "", allow_failure: true }
|
116
|
+
Then {
|
117
|
+
refute @status.success?
|
118
|
+
}
|
119
|
+
And {
|
120
|
+
assert_match(/\'app_name\' is required/,@stderr)
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
def assert_standard_options(stdout)
|
125
|
+
assert_option(stdout,"--version")
|
126
|
+
assert_option(stdout,"--help")
|
127
|
+
assert_option(stdout,"--log-level")
|
128
|
+
end
|
129
|
+
|
130
|
+
def assert_supports_basic_rake_tasks(stdout)
|
131
|
+
[
|
132
|
+
:clean,
|
133
|
+
:clobber,
|
134
|
+
:clobber_rdoc,
|
135
|
+
:rdoc,
|
136
|
+
:release,
|
137
|
+
:rerdoc,
|
138
|
+
:test,
|
139
|
+
:install,
|
140
|
+
:build,
|
141
|
+
].each do |rake_task|
|
142
|
+
assert_match(/rake #{rake_task}/,stdout)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def assert_all_files_staged_in_git
|
147
|
+
stdout, _, __ = run_in_gem("newgem", "git", "ls-files --others --deleted")
|
148
|
+
assert_match(/\A\Z/, stdout)
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative "base_integration_test"
|
2
|
+
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
class TestCli < BaseIntegrationTest
|
6
|
+
test_that "methadone CLI is properly documented" do
|
7
|
+
When { @stdout, _, __ = methadone "--help" }
|
8
|
+
Then {
|
9
|
+
assert_banner(@stdout, "methadone", takes_options: true, takes_arguments: { app_name: :required })
|
10
|
+
}
|
11
|
+
And {
|
12
|
+
assert_option(@stdout, "--force")
|
13
|
+
assert_option(@stdout, "--[no-]readme")
|
14
|
+
assert_option(@stdout, "-l", "--license")
|
15
|
+
assert_option(@stdout, "--log-level")
|
16
|
+
}
|
17
|
+
And {
|
18
|
+
assert_oneline_summary(@stdout)
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative "base_integration_test"
|
2
|
+
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
class TestLicense < BaseIntegrationTest
|
6
|
+
test_that "omitting a license generates a warning" do
|
7
|
+
When { _, @stderr, __ = methadone "newgem" }
|
8
|
+
Then {
|
9
|
+
assert_match(/warning: your app has no license/,@stderr)
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
test_that "explicitly omitting a license does not generate a warning" do
|
14
|
+
When { _, @stderr, __ = methadone "newgem -l NONE" }
|
15
|
+
Then {
|
16
|
+
refute_match(/warning: your app has no license/,@stderr)
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
[
|
21
|
+
"apache",
|
22
|
+
"mit",
|
23
|
+
"gplv2",
|
24
|
+
"gplv3",
|
25
|
+
].each do |license|
|
26
|
+
test_that "the #{license} license can be included" do
|
27
|
+
When { methadone "newgem -l #{license}" }
|
28
|
+
Then {
|
29
|
+
assert File.exist?("newgem/LICENSE.txt")
|
30
|
+
}
|
31
|
+
And {
|
32
|
+
assert_file("newgem/newgem.gemspec", contains: /#{license.upcase}/)
|
33
|
+
}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
test_that "a custom license can be included" do
|
38
|
+
When { methadone "newgem -l custom" }
|
39
|
+
Then {
|
40
|
+
assert File.exist?("newgem/LICENSE.txt")
|
41
|
+
}
|
42
|
+
And {
|
43
|
+
assert_equal "", File.read("newgem/LICENSE.txt").strip
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
test_that "a non-custom non-supported license causes an error" do
|
48
|
+
When { _, @stderr, @result = methadone "newgem -l foobar", allow_failure: true }
|
49
|
+
Then {
|
50
|
+
refute @result.success?
|
51
|
+
}
|
52
|
+
And {
|
53
|
+
assert_match(/invalid argument: -l foobar/,@stderr)
|
54
|
+
}
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative "base_integration_test"
|
2
|
+
class TestReadme < BaseIntegrationTest
|
3
|
+
test_that "a reasonable README is created" do
|
4
|
+
When {
|
5
|
+
methadone "newgem --readme"
|
6
|
+
}
|
7
|
+
Then {
|
8
|
+
assert File.exist?("newgem/README.rdoc")
|
9
|
+
}
|
10
|
+
And {
|
11
|
+
readmes = Dir["newgem/README*"].to_a
|
12
|
+
assert_equal 1, readmes.size,"Found more than one README: #{readmes.inspect}"
|
13
|
+
}
|
14
|
+
And {
|
15
|
+
rakefile_contents = File.read("newgem/Rakefile")
|
16
|
+
assert_match(/README.rdoc/,rakefile_contents)
|
17
|
+
assert_match(/rd.main = ["']README.rdoc["']/,rakefile_contents)
|
18
|
+
}
|
19
|
+
And {
|
20
|
+
assert_file("newgem/README.rdoc",
|
21
|
+
contains: [
|
22
|
+
/newgem/,
|
23
|
+
/Author:: YOUR NAME \(YOUR EMAIL\)/,
|
24
|
+
/\* \{Source on Github\}\[LINK TO GITHUB\]/,
|
25
|
+
/RDoc\[LINK TO RDOC.INFO\]/,
|
26
|
+
/^== Install/,
|
27
|
+
/^== Examples/,
|
28
|
+
/^== Contributing/,
|
29
|
+
])
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
test_that "a readme is created by default" do
|
34
|
+
When {
|
35
|
+
methadone "newgem"
|
36
|
+
}
|
37
|
+
Then {
|
38
|
+
assert File.exist?("newgem/README.rdoc")
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
test_that "we can omit a README" do
|
43
|
+
When {
|
44
|
+
methadone "--no-readme newgem"
|
45
|
+
}
|
46
|
+
Then {
|
47
|
+
refute File.exist?("newgem/README.rdoc")
|
48
|
+
}
|
49
|
+
And {
|
50
|
+
refute_match(/README/,File.read("newgem/Rakefile"))
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative "base_integration_test"
|
2
|
+
|
3
|
+
include FileUtils
|
4
|
+
|
5
|
+
class TestRSpec < BaseIntegrationTest
|
6
|
+
test_that "we can generate an app using RSpec instead of Test::Unit" do
|
7
|
+
When { methadone "--rspec newgem" }
|
8
|
+
Then {
|
9
|
+
refute Dir.exist?("newgem/test")
|
10
|
+
assert Dir.exist?("newgem/spec")
|
11
|
+
assert File.exist?("newgem/spec/something_spec.rb")
|
12
|
+
}
|
13
|
+
And {
|
14
|
+
assert_file("newgem/newgem.gemspec", contains: /add_development_dependency\(["']rspec["']/)
|
15
|
+
}
|
16
|
+
And {
|
17
|
+
stdout,_ = rake("newgem", "-T")
|
18
|
+
assert_match(/rake spec/,stdout)
|
19
|
+
refute_match(/rake testa/,stdout)
|
20
|
+
}
|
21
|
+
When {
|
22
|
+
@stdout, _ = rake("newgem","spec")
|
23
|
+
}
|
24
|
+
Then {
|
25
|
+
assert_match(/1 example,.*0 failures/,@stdout)
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|