generator_spec 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.
- data/README.md +31 -0
- data/lib/generator_spec/generator_example_group.rb +2 -0
- data/lib/generator_spec/matcher.rb +108 -0
- data/lib/generator_spec/version.rb +1 -1
- data/spec/generator_spec/matcher_spec.rb +30 -0
- metadata +23 -2
data/README.md
CHANGED
@@ -23,4 +23,35 @@ Add 'generator_spec' to Gemfile and use just like you would test generators in t
|
|
23
23
|
it "creates a test initializer" do
|
24
24
|
assert_file "config/initializers/test.rb", "# Initializer"
|
25
25
|
end
|
26
|
+
end
|
27
|
+
|
28
|
+
An RSpec file matching DSL is also provided, taken with permission from [beard](https://github.com/carlhuda/beard/blob/master/spec/support/matcher.rb) by [carlhuda](https://github.com/carlhuda).
|
29
|
+
|
30
|
+
describe TestGenerator, "using custom matcher" do
|
31
|
+
include GeneratorSpec::GeneratorExampleGroup
|
32
|
+
|
33
|
+
destination File.expand_path("../../tmp", __FILE__)
|
34
|
+
|
35
|
+
before do
|
36
|
+
prepare_destination
|
37
|
+
run_generator
|
38
|
+
end
|
39
|
+
|
40
|
+
specify do
|
41
|
+
destination_root.should have_structure {
|
42
|
+
no_file "test.rb"
|
43
|
+
directory "config" do
|
44
|
+
directory "initializers" do
|
45
|
+
file "test.rb" do
|
46
|
+
contains "# Initializer"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
directory "db" do
|
51
|
+
directory "migrate" do
|
52
|
+
file "123_create_tests.rb"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
26
57
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require "rspec/rails"
|
2
2
|
require "rails/generators/test_case"
|
3
3
|
require "fileutils"
|
4
|
+
require "generator_spec/matcher"
|
4
5
|
|
5
6
|
# Adapted from Rails::Generators::TestCase
|
6
7
|
# https://github.com/rails/rails/blob/master/railties/lib/rails/generators/test_case.rb
|
@@ -9,6 +10,7 @@ module GeneratorSpec
|
|
9
10
|
module GeneratorExampleGroup
|
10
11
|
extend ActiveSupport::Concern
|
11
12
|
include RSpec::Rails::RailsExampleGroup
|
13
|
+
include Matcher
|
12
14
|
include FileUtils
|
13
15
|
|
14
16
|
included do
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module GeneratorSpec
|
2
|
+
module Matcher
|
3
|
+
# Author: Yahuda Katz
|
4
|
+
# Taken (with permission) from beard:
|
5
|
+
# https://github.com/carlhuda/beard
|
6
|
+
|
7
|
+
class File
|
8
|
+
def initialize(name, &block)
|
9
|
+
@contents = []
|
10
|
+
@name = name
|
11
|
+
|
12
|
+
if block_given?
|
13
|
+
instance_eval(&block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def contains(text)
|
18
|
+
@contents << text
|
19
|
+
end
|
20
|
+
|
21
|
+
def matches?(root)
|
22
|
+
unless root.join(@name).exist?
|
23
|
+
throw :failure, root.join(@name)
|
24
|
+
end
|
25
|
+
|
26
|
+
contents = ::File.read(root.join(@name))
|
27
|
+
|
28
|
+
@contents.each do |string|
|
29
|
+
unless contents.include?(string)
|
30
|
+
throw :failure, [root.join(@name), string, contents]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Directory
|
37
|
+
attr_reader :tree
|
38
|
+
|
39
|
+
def initialize(root = nil, &block)
|
40
|
+
@tree = {}
|
41
|
+
@negative_tree = []
|
42
|
+
@root = root
|
43
|
+
instance_eval(&block) if block_given?
|
44
|
+
end
|
45
|
+
|
46
|
+
def directory(name, &block)
|
47
|
+
@tree[name] = block_given? && Directory.new(location(name), &block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def file(name, &block)
|
51
|
+
@tree[name] = File.new(location(name), &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def no_file(name)
|
55
|
+
@negative_tree << name
|
56
|
+
end
|
57
|
+
|
58
|
+
def location(name)
|
59
|
+
[@root, name].compact.join("/")
|
60
|
+
end
|
61
|
+
|
62
|
+
def matches?(root)
|
63
|
+
@tree.each do |file, value|
|
64
|
+
unless value
|
65
|
+
unless root.join(location(file)).exist?
|
66
|
+
throw :failure, "#{root}/#{location(file)}"
|
67
|
+
end
|
68
|
+
else
|
69
|
+
value.matches?(root)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
@negative_tree.each do |file|
|
74
|
+
if root.join(location(file)).exist?
|
75
|
+
throw :failure, [:not, "unexpected #{root}/#{location(file)}"]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class Root < Directory
|
84
|
+
def failure_message
|
85
|
+
if @failure.is_a?(Array) && @failure[0] == :not
|
86
|
+
"Structure should not have had #{@failure[1]}, but it did"
|
87
|
+
elsif @failure.is_a?(Array)
|
88
|
+
"Structure should have #{@failure[0]} with #{@failure[1]}. It had:\n#{@failure[2]}"
|
89
|
+
else
|
90
|
+
"Structure should have #{@failure}, but it didn't"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def matches?(root)
|
95
|
+
root = Pathname.new(root) unless root.is_a?(Pathname)
|
96
|
+
@failure = catch :failure do
|
97
|
+
super
|
98
|
+
end
|
99
|
+
|
100
|
+
!@failure
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def have_structure(&block)
|
105
|
+
Root.new(&block)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe TestGenerator, "using custom matcher" do
|
4
|
+
include GeneratorSpec::GeneratorExampleGroup
|
5
|
+
|
6
|
+
destination File.expand_path("../../tmp", __FILE__)
|
7
|
+
|
8
|
+
before do
|
9
|
+
prepare_destination
|
10
|
+
run_generator
|
11
|
+
end
|
12
|
+
|
13
|
+
specify do
|
14
|
+
destination_root.should have_structure {
|
15
|
+
no_file "test.rb"
|
16
|
+
directory "config" do
|
17
|
+
directory "initializers" do
|
18
|
+
file "test.rb" do
|
19
|
+
contains "# Initializer"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
directory "db" do
|
24
|
+
directory "migrate" do
|
25
|
+
file "123_create_tests.rb"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: generator_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Steve Hodgkiss
|
@@ -21,6 +26,10 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ~>
|
23
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 7
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
24
33
|
version: "3.0"
|
25
34
|
type: :runtime
|
26
35
|
version_requirements: *id001
|
@@ -32,6 +41,9 @@ dependencies:
|
|
32
41
|
requirements:
|
33
42
|
- - ">="
|
34
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
35
47
|
version: "0"
|
36
48
|
type: :runtime
|
37
49
|
version_requirements: *id002
|
@@ -54,8 +66,10 @@ files:
|
|
54
66
|
- generator_spec.gemspec
|
55
67
|
- lib/generator_spec.rb
|
56
68
|
- lib/generator_spec/generator_example_group.rb
|
69
|
+
- lib/generator_spec/matcher.rb
|
57
70
|
- lib/generator_spec/version.rb
|
58
71
|
- spec/generator_spec/generator_example_group_spec.rb
|
72
|
+
- spec/generator_spec/matcher_spec.rb
|
59
73
|
- spec/spec_helper.rb
|
60
74
|
- spec/support/test_generator/templates/initializer.rb
|
61
75
|
- spec/support/test_generator/templates/migration.rb
|
@@ -74,22 +88,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
74
88
|
requirements:
|
75
89
|
- - ">="
|
76
90
|
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
77
94
|
version: "0"
|
78
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
96
|
none: false
|
80
97
|
requirements:
|
81
98
|
- - ">="
|
82
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
83
103
|
version: "0"
|
84
104
|
requirements: []
|
85
105
|
|
86
106
|
rubyforge_project: generator_spec
|
87
|
-
rubygems_version: 1.5.
|
107
|
+
rubygems_version: 1.5.3
|
88
108
|
signing_key:
|
89
109
|
specification_version: 3
|
90
110
|
summary: Test Rails generators with RSpec
|
91
111
|
test_files:
|
92
112
|
- spec/generator_spec/generator_example_group_spec.rb
|
113
|
+
- spec/generator_spec/matcher_spec.rb
|
93
114
|
- spec/spec_helper.rb
|
94
115
|
- spec/support/test_generator/templates/initializer.rb
|
95
116
|
- spec/support/test_generator/templates/migration.rb
|