analtester 0.0.1 → 0.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a07ccbbf6e2630d0d162ff267789005ca960310d
4
+ data.tar.gz: 7ad61f5804f7728144a305f12a167e457f3d5517
5
+ SHA512:
6
+ metadata.gz: d3d7c1c41e127183ebe5605559dfc929446ed1a7d40a3d26a1f2d10a618ea007c430169a422f989b3ed1948cd16078c1721aef7fbdcb819fa0a7651c4047faed
7
+ data.tar.gz: fcbf0c376d2d8efe33defc1737b7a42dce493d1e1437c61c3976b06e2cabe14fc0b4942d1939ecacc757fd26320e8634f48c0d78791f7ad654351882c7426b3f
data/.travis.yml ADDED
@@ -0,0 +1 @@
1
+ language: ruby
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Analtester
2
2
 
3
- A silly gem for generating minitest files
3
+ A silly gem for generating minitest files. If you have RSpec, it can use that,
4
+ too.
4
5
 
5
6
  ## Installation
6
7
 
@@ -9,10 +10,12 @@ A silly gem for generating minitest files
9
10
  ## Usage
10
11
 
11
12
  $ cd myproject
12
- $ analtest
13
+ $ analtest -h
13
14
 
14
15
  That's it.
15
16
 
17
+ [![Build Status](https://travis-ci.org/bjjb/analtester.svg?branch=master)](https://travis-ci.org/bjjb/analtester)
18
+
16
19
  ## Contributing
17
20
 
18
21
  1. Fork it
data/Rakefile CHANGED
@@ -4,6 +4,7 @@ require "rake/testtask"
4
4
  Rake::TestTask.new do |t|
5
5
  t.libs << "test"
6
6
  t.test_files = FileList["test/**/*_test.rb"]
7
+ t.verbose = false
7
8
  end
8
9
 
9
10
  task :default => :test
data/analtester.gemspec CHANGED
@@ -1,10 +1,11 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'analtester'
4
5
 
5
6
  Gem::Specification.new do |gem|
6
7
  gem.name = "analtester"
7
- gem.version = "0.0.1"
8
+ gem.version = Analtester::VERSION
8
9
  gem.authors = ["JJ Buckley"]
9
10
  gem.email = ["jj@dawandamail.com"]
10
11
  gem.description = %q{Makes some failing tests for you}
@@ -20,4 +21,8 @@ DESCRIPTION
20
21
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
22
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
23
  gem.require_paths = ["lib"]
24
+
25
+ gem.add_dependency 'minitest' if RUBY_VERSION < "2.0"
26
+ gem.add_development_dependency 'rake'
27
+ gem.add_development_dependency 'rspec'
23
28
  end
data/bin/analtester CHANGED
@@ -1,4 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+ require 'optparse'
3
3
  require 'analtester'
4
- Analtester.run
4
+
5
+ type = :minitest
6
+ OptionParser.new do |o|
7
+ o.on('-h', '--help', 'Print this message') do
8
+ puts o.to_s
9
+ exit(0)
10
+ end
11
+ o.on('-V', '--version', 'Show the version number') do
12
+ puts "Analtester v#{Analtester::VERSION}"
13
+ exit(0)
14
+ end
15
+ o.on('-t', '--type TYPE', 'Choose framework (minitest, minispec, rspec)') do |type|
16
+ unless %w[minitest minispec rspec].include?(type)
17
+ puts "Invalid type. Available types are minitest, minispec and rspec)"
18
+ exit(1)
19
+ end
20
+ type = type
21
+ end
22
+ end.parse!(ARGV)
23
+
24
+ Analtester.new(type).run
data/lib/analtester.rb CHANGED
@@ -1,116 +1,133 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ require 'pathname'
2
3
  require 'fileutils'
4
+ require 'forwardable'
5
+ require 'erb'
6
+
7
+ # An Analtester has a directory, and can scan the directory for library files,
8
+ # creating corresponding test files for them. It also makes sure there's a
9
+ # test helper file (like test/), and a make file (like Rakefile).
10
+ class Analtester < Pathname
11
+ VERSION = "0.0.2"
3
12
 
4
- class Analtester
5
13
  include FileUtils
6
- def self.run
7
- new.run
14
+ include Comparable
15
+
16
+ attr_accessor :verbose
17
+
18
+ def initialize(framework = :minitest)
19
+ super('.')
20
+ send("initialize_#{framework}")
8
21
  end
9
22
 
10
- def initialize(dir = nil)
11
- @dir = dir || Dir.pwd
23
+ def <=>(another)
24
+ Pathname.new(self).realpath <=> Pathname.new(another).realpath
12
25
  end
13
26
 
14
27
  def run
15
- ensure_test_helper
16
- tests.each { |test| ensure_test(test) }
28
+ make(runner, _runner)
29
+ make(helper, _helper)
30
+ tests.each { |test, template| make(test, template) }
17
31
  end
18
32
 
19
- def testfile(f)
20
- self.class.testfile(f)
33
+ def tests
34
+ libs.map { |f| [@test.call(f), _test] }
21
35
  end
22
36
 
23
- def self.testfile(f)
24
- f.sub('lib/', 'test/').sub!(/\.rb/, '_test.rb')
37
+ def libs
38
+ Dir[join(@_libs)].map { |f| join(f) }
25
39
  end
26
40
 
27
- def tests
28
- libraries.map { |f| testfile(f) }
41
+ def ext
42
+ @_ext
29
43
  end
30
44
 
31
- def libraries
32
- Dir["#{@dir}/lib/**/*.rb"]
45
+ def runner
46
+ join(@_runner)
33
47
  end
34
48
 
35
- def ensure_test_helper
36
- ensure_test_directory
37
- print test_helper + " "
38
- if File.file?(test_helper)
39
- puts "✓"
40
- else
41
- make_test_helper!
42
- puts "Created"
43
- end
49
+ def _runner
50
+ templates.join @__runner
44
51
  end
45
52
 
46
- def ensure_test_directory
47
- print test_dir, " "
48
- if File.directory?(test_dir)
49
- puts "✓"
50
- else
51
- make_test_directory!
52
- puts "Created"
53
- end
53
+ def helper
54
+ join @_helper
54
55
  end
55
56
 
56
- def test_helper
57
- File.join(test_dir, "test_helper.rb")
57
+ def _helper
58
+ templates.join @__helper
58
59
  end
59
60
 
60
- def make_test_helper!
61
- File.open(test_helper, 'w') do |f|
62
- f.puts <<-RUBY
63
- require 'minitest/autorun'
64
- RUBY
65
- end
61
+ def _test
62
+ templates.join @_test
66
63
  end
67
64
 
68
- def ensure_test(file)
69
- ensure_directory(File.dirname(file))
70
- print file, " "
71
- if File.file?(file)
72
- puts "✓"
73
- else
74
- make_test!(file)
75
- puts "Created"
76
- end
65
+ def templates
66
+ Pathname.new(__FILE__).parent.parent.join('templates').join(@_templates)
77
67
  end
78
68
 
79
- def ensure_directory(dir)
80
- print dir, " "
81
- if File.directory?(dir)
82
- puts "✓"
83
- else
84
- mkdir_p(dir)
85
- puts "Created"
69
+ def make(target, template)
70
+ return if target.exist?
71
+ subject = classify(target)
72
+ library = library(target)
73
+ target.parent.mkpath
74
+ target.open('w') do |f|
75
+ f << ERB.new(template.read).result(binding)
86
76
  end
87
77
  end
88
78
 
89
- def class_name(file)
90
- # TODO - modules
91
- basename = File.basename(file, File.extname(file))
92
- basename.split('_').map { |s| s.chars.first.upcase + s.chars.to_a[1..-1].join }.join
79
+ def translate(s, x, y)
80
+ s = "#$1#{y}#$2_#{y}#$3" if s.to_s =~ %r{^(.*/?)#{x}(/.*)(\.[^.]+)$}
81
+ Pathname.new(s)
93
82
  end
94
83
 
95
- def make_test!(file)
96
- File.open(file, 'w') do |f|
97
- f.puts <<-RUBY
98
- require 'test_helper'
84
+ def library(s)
85
+ s.to_s.split("#{@_type}/").last.split("_#{@_type}.rb").first
86
+ end
99
87
 
100
- class #{class_name(file)} < Minitest::Unit::TestCase
101
- def test_something
102
- flunk "Write me."
88
+ def classify(s)
89
+ library(s).split('/').map { |x| camelize(x) }.join('::')
103
90
  end
104
- end
105
- RUBY
106
- end
91
+
92
+ def camelize(s)
93
+ s.split('_').map { |x| x.capitalize }.join('')
94
+ end
95
+
96
+ def initialize_minitest
97
+ @_type = 'test'
98
+ @_runner = 'Rakefile'
99
+ @_helper = 'test/test_helper.rb'
100
+ @_templates = 'minitest'
101
+ @__runner = 'Rakefile'
102
+ @__helper = 'test_helper.rb'
103
+ @_libs = "lib/**/*.rb"
104
+ @test = lambda { |f| translate(f, 'lib', 'test') }
105
+ @_test = 'test.rb'
107
106
  end
108
107
 
109
- def make_test_directory!
110
- mkdir_p test_dir
108
+ def initialize_rspec
109
+ @_type = 'spec'
110
+ @_runner = 'Rakefile'
111
+ @_helper = 'spec/spec_helper.rb'
112
+ @_templates = 'rspec'
113
+ @__runner = 'Rakefile'
114
+ @__helper = 'spec_helper.rb'
115
+ @_lib = 'lib'
116
+ @_libs = "lib/**/*.rb"
117
+ @test = lambda { |f| translate(f, 'lib', 'spec') }
118
+ @_test = 'spec.rb'
111
119
  end
112
120
 
113
- def test_dir
114
- File.join(@dir, "test")
121
+ def initialize_minispec
122
+ @_type = 'spec'
123
+ @_runner = 'Rakefile'
124
+ @_helper = 'spec/spec_helper.rb'
125
+ @_templates = 'minispec'
126
+ @__runner = 'Rakefile'
127
+ @__helper = 'spec_helper.rb'
128
+ @_lib = 'lib'
129
+ @_libs = "lib/**/*.rb"
130
+ @test = lambda { |f| translate(f, 'lib', 'spec') }
131
+ @_test = 'spec.rb'
115
132
  end
116
133
  end
@@ -0,0 +1,6 @@
1
+ require 'rake/testtask'
2
+ Rake::TestTask.new(:spec) do |t|
3
+ t.libs << 'spec'
4
+ t.test_files = FileList["spec/**/*_spec.rb"]
5
+ end
6
+ task default: :spec
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+ require '<%= library %>'
3
+
4
+ describe <%= subject %> do
5
+ it "is tested"
6
+ end
@@ -0,0 +1 @@
1
+ require 'minitest/autorun'
@@ -0,0 +1,6 @@
1
+ require 'rake/testtask'
2
+ Rake::TestTask.new do |t|
3
+ t.libs << 'test'
4
+ t.test_files = FileList["test/**/*_test.rb"]
5
+ end
6
+ task default: :test
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+ require '<%= library %>'
3
+
4
+ class <%= subject %>Test < Minitest::Test
5
+ def setup
6
+ # Set me up
7
+ end
8
+
9
+ def teardown
10
+ # Tear me down
11
+ end
12
+
13
+ def test_something
14
+ skip "Write some tests!"
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ require 'minitest/autorun'
@@ -0,0 +1,3 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new(:spec)
3
+ task default: :spec
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+ require '<%= library %>'
3
+
4
+ describe <%= subject %> do
5
+ it "is tested"
6
+ end
@@ -0,0 +1 @@
1
+ require 'rspec'
@@ -1,27 +1,94 @@
1
1
  require 'test_helper'
2
+ require 'pathname'
2
3
  require 'tmpdir'
3
4
  require 'fileutils'
4
5
 
5
- class AnaltesterTest < MiniTest::Unit::TestCase
6
+ class AnaltesterTest < Minitest::Test
6
7
  include FileUtils
7
8
 
8
9
  def setup
9
10
  @home = pwd
10
- @test_directory = Dir.mktmpdir
11
- Dir.chdir(@test_directory)
11
+ dir = Dir.mktmpdir
12
+ Dir.chdir(dir)
13
+ @dir = Pathname.new(dir).realpath
14
+ touchfiles('lib/foo.rb', 'lib/foo/bar.rb')
15
+ @dir.join("lib/foo.rb").open('w') do |f|
16
+ f.write <<-EOF
17
+ module Foo
18
+ VERSION = "0.0.1"
19
+ end
20
+ EOF
21
+ end
22
+ @dir.join('lib/foo/bar.rb').open('w') do |f|
23
+ f.write <<-EOF
24
+ module Foo
25
+ class Bar
26
+ def hello
27
+ puts "Hello!"
28
+ end
12
29
  end
13
-
14
- def test_creation_of_tests
15
- mkdir_p 'lib/foo/bar'
16
- touch %w(lib/foo.rb lib/foo/bar.rb lib/foo/bar/baz.rb)
17
- Analtester.new(@test_directory).run
18
- assert File.exists?('test/foo/bar/baz_test.rb')
19
- assert File.exists?('test/foo/bar_test.rb')
20
- assert File.exists?('test/foo_test.rb')
30
+ end
31
+ EOF
32
+ end
21
33
  end
22
34
 
23
35
  def teardown
24
36
  Dir.chdir(@home)
25
- rm_rf @test_directory
37
+ rm_rf @dir
38
+ end
39
+
40
+ def test_minitest
41
+ Analtester.new.run
42
+ assert @dir.join("Rakefile").exist?
43
+ assert @dir.join("test/test_helper.rb").exist?
44
+ assert @dir.join("test/foo_test.rb").exist?
45
+ t = @dir.join("test/foo/bar_test.rb")
46
+ assert t.exist?
47
+ assert_match %r{require ['"]foo/bar["']}, t.read
48
+ assert_match %r{class Foo::BarTest}, t.read
49
+ out, err = capture_subprocess_io { system("rake") }
50
+ assert_empty err
51
+ assert_match /2 runs/, out
52
+ assert_match /2 skips/, out
53
+ end
54
+
55
+ def test_minispec
56
+ touchfiles('lib/foo.rb', 'lib/foo/bar.rb')
57
+ Analtester.new(:minispec).run
58
+ assert @dir.join("Rakefile").exist?
59
+ assert @dir.join("spec/spec_helper.rb").exist?
60
+ assert @dir.join("spec/foo_spec.rb").exist?
61
+ t = @dir.join("spec/foo/bar_spec.rb")
62
+ assert t.exist?
63
+ assert_match %r{require ['"]foo/bar["']}, t.read
64
+ assert_match %r{describe Foo::Bar}, t.read
65
+ out, err = capture_subprocess_io { system("rake") }
66
+ assert_empty err
67
+ assert_match /2 runs/, out
68
+ assert_match /2 skips/, out
69
+ end
70
+
71
+ def test_rspec
72
+ touchfiles('lib/foo.rb', 'lib/foo/bar.rb')
73
+ Analtester.new(:rspec).run
74
+ assert @dir.join("Rakefile").exist?
75
+ assert @dir.join("spec/spec_helper.rb").exist?
76
+ assert @dir.join("spec/foo_spec.rb").exist?
77
+ t = @dir.join("spec/foo/bar_spec.rb")
78
+ assert t.exist?
79
+ assert_match %r{require ['"]foo/bar["']}, t.read
80
+ assert_match %r{describe Foo::Bar}, t.read
81
+ out, err = capture_subprocess_io { system("rake") }
82
+ assert_empty err
83
+ assert_match /2 examples/, out
84
+ assert_match /2 pending/, out
85
+ end
86
+
87
+ private
88
+ def touchfiles(*files)
89
+ files.each do |f|
90
+ @dir.join(f).parent.mkpath
91
+ touch @dir.join(f)
92
+ end
26
93
  end
27
94
  end
metadata CHANGED
@@ -1,35 +1,53 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: analtester
3
- version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - JJ Buckley
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-11-27 00:00:00 -08:00
19
- default_executable:
20
- dependencies: []
21
-
11
+ date: 2014-03-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
22
41
  description: Makes some failing tests for you
23
- email:
42
+ email:
24
43
  - jj@dawandamail.com
25
- executables:
44
+ executables:
26
45
  - analtester
27
46
  extensions: []
28
-
29
47
  extra_rdoc_files: []
30
-
31
- files:
32
- - .gitignore
48
+ files:
49
+ - ".gitignore"
50
+ - ".travis.yml"
33
51
  - Gemfile
34
52
  - LICENSE.txt
35
53
  - README.md
@@ -37,42 +55,43 @@ files:
37
55
  - analtester.gemspec
38
56
  - bin/analtester
39
57
  - lib/analtester.rb
58
+ - templates/minispec/Rakefile
59
+ - templates/minispec/spec.rb
60
+ - templates/minispec/spec_helper.rb
61
+ - templates/minitest/Rakefile
62
+ - templates/minitest/test.rb
63
+ - templates/minitest/test_helper.rb
64
+ - templates/rspec/Rakefile
65
+ - templates/rspec/spec.rb
66
+ - templates/rspec/spec_helper.rb
40
67
  - test/analtester_test.rb
41
68
  - test/test_helper.rb
42
- has_rdoc: true
43
69
  homepage: http://github.com/jjbuckley/analtester
44
70
  licenses: []
45
-
71
+ metadata: {}
46
72
  post_install_message:
47
73
  rdoc_options: []
48
-
49
- require_paths:
74
+ require_paths:
50
75
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
54
78
  - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
60
- required_rubygems_version: !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
63
83
  - - ">="
64
- - !ruby/object:Gem::Version
65
- hash: 3
66
- segments:
67
- - 0
68
- version: "0"
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
69
86
  requirements: []
70
-
71
87
  rubyforge_project:
72
- rubygems_version: 1.3.7
88
+ rubygems_version: 2.2.0
73
89
  signing_key:
74
- specification_version: 3
75
- summary: analtester will look through your ./lib directory and create corresponding tests in test/. They will all fail, until you write them. Use it to quickly populate an untested library with tests. Just run `analtester` from the command-line in your project's root. Requires minitest.
76
- test_files:
90
+ specification_version: 4
91
+ summary: analtester will look through your ./lib directory and create corresponding
92
+ tests in test/. They will all fail, until you write them. Use it to quickly populate
93
+ an untested library with tests. Just run `analtester` from the command-line in your
94
+ project's root. Requires minitest.
95
+ test_files:
77
96
  - test/analtester_test.rb
78
97
  - test/test_helper.rb