ci-syntax-tool 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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/LICENSE +27 -0
  4. data/README.md +109 -0
  5. data/Rakefile +43 -0
  6. data/bin/ci-syntax-tool +12 -0
  7. data/ci-syntax-tool.gemspec +27 -0
  8. data/lib/ci-syntax-tool.rb +6 -0
  9. data/lib/ci-syntax-tool/checker.rb +63 -0
  10. data/lib/ci-syntax-tool/command_line.rb +229 -0
  11. data/lib/ci-syntax-tool/format/base.rb +50 -0
  12. data/lib/ci-syntax-tool/format/junit.rb +54 -0
  13. data/lib/ci-syntax-tool/format/progress.rb +60 -0
  14. data/lib/ci-syntax-tool/format_factory.rb +55 -0
  15. data/lib/ci-syntax-tool/language/base.rb +56 -0
  16. data/lib/ci-syntax-tool/language/yaml.rb +41 -0
  17. data/lib/ci-syntax-tool/language_factory.rb +41 -0
  18. data/lib/ci-syntax-tool/result.rb +134 -0
  19. data/lib/ci-syntax-tool/version.rb +10 -0
  20. data/rubocop.yml +11 -0
  21. data/test/features/.keep +0 -0
  22. data/test/features/command-line-help.feature +15 -0
  23. data/test/features/format-junit.feature +29 -0
  24. data/test/features/language-yaml.feature +34 -0
  25. data/test/features/pluggable-formatters.feature +42 -0
  26. data/test/features/pluggable-languages.feature +15 -0
  27. data/test/features/require-ruby.feature +38 -0
  28. data/test/features/step_definitions/cli_steps.rb +46 -0
  29. data/test/features/step_definitions/format_steps.rb +63 -0
  30. data/test/features/step_definitions/junit_steps.rb +57 -0
  31. data/test/features/step_definitions/language_steps.rb +39 -0
  32. data/test/features/step_definitions/require_steps.rb +38 -0
  33. data/test/features/support/feature_helper.rb +142 -0
  34. data/test/fixtures/.keep +0 -0
  35. data/test/fixtures/files/clean/README.md +6 -0
  36. data/test/fixtures/files/clean/ansiblish.yaml +12 -0
  37. data/test/fixtures/files/clean/kitchenish.yml +17 -0
  38. data/test/fixtures/files/clean/rubocopish.yaml +11 -0
  39. data/test/fixtures/files/error/bad-indentation.yaml +5 -0
  40. data/test/fixtures/files/error/missing-array-element.yaml +5 -0
  41. data/test/fixtures/files/error/unquoted-jinja-template.yaml +3 -0
  42. data/test/fixtures/files/error/very-high-yaml-version.yaml +3 -0
  43. data/test/fixtures/require/invalid.rb +6 -0
  44. data/test/fixtures/require/mock_format.rb +10 -0
  45. data/test/fixtures/require/second.rb +10 -0
  46. data/test/fixtures/require/valid.rb +10 -0
  47. data/test/unit/.keep +0 -0
  48. data/test/unit/format_factory_spec.rb +46 -0
  49. data/test/unit/language_factory_spec.rb +46 -0
  50. data/test/unit/result_spec.rb +18 -0
  51. data/test/unit/spec_helper.rb +31 -0
  52. metadata +201 -0
@@ -0,0 +1,142 @@
1
+ require_relative '../../../lib/ci-syntax-tool'
2
+ require 'minitest'
3
+
4
+ require 'byebug'
5
+
6
+ module CI
7
+ module Syntax
8
+ module Tool
9
+ module FeatureHelpers
10
+
11
+ include MiniTest::Assertions
12
+
13
+ attr_writer :assertions
14
+ def assertions
15
+ @assertions ||= 0
16
+ end
17
+
18
+ def run_check(command_line_args)
19
+
20
+ # puts "RAW CLI: " + command_line_args.inspect # DEBUG
21
+
22
+ # Capture any stdout and stderr
23
+ sio_out = StringIO.new
24
+ old_stdout = $stdout
25
+ $stdout = sio_out
26
+ sio_err = StringIO.new
27
+ old_stderr = $stderr
28
+ $stderr = sio_err
29
+
30
+ overall_result = nil
31
+ cli_opts = CI::Syntax::Tool::CommandLine.new(command_line_args)
32
+ # puts "COOKED CLI: " + cli_opts.options.inspect # DEBUG
33
+ if cli_opts.runnable?
34
+ checker = CI::Syntax::Tool::Checker.new(cli_opts)
35
+ exit_status = checker.run()
36
+ overall_result = checker.overall_result
37
+ else
38
+ exit_status = cli_opts.non_runnable_exit_status
39
+ end
40
+
41
+ $stdout = old_stdout
42
+ $stderr = old_stderr
43
+
44
+ result = {
45
+ stdout: sio_out.string,
46
+ stderr: sio_err.string,
47
+ exit_status: exit_status,
48
+ overall_result: overall_result,
49
+ }
50
+ # puts "Results: " + result.inspect # DEBUG
51
+ return result
52
+
53
+ end
54
+
55
+ def list_cli_opts
56
+ return [
57
+ {s: 'V', l: 'version', d: 'Show ci-syntax-tool version'},
58
+ {s: 'h', l: 'help', d: 'Show this help message'},
59
+ {s: 'l', l: 'lang LANG', d: 'Select this language for checking. Repeatable. Default, all languages.'},
60
+ { l: 'list-languages', d: 'List available languages and exit.'},
61
+ {s: 'f', l: 'format FORMAT', d: 'Use this format for output. Repeatable, but if repeated, must have an equal number of --output options.'},
62
+ {s: 'o', l: 'output PATH', d: 'Write formatted output to this location. Use "-" to represent STDOUT. Defaults to STDOUT if zero or one --format option used. Repeatable with an equal number of --format options.'},
63
+ { l: 'list-formats', d: 'List available formats and exit.'},
64
+ {s: 'r', l: 'require RUBYFILE', d: 'Load additional Ruby code, perhaps for a custom language or format. Repeatable.'},
65
+ {s: 'd', l: 'debug', d: 'Provide debug-level output to STDOUT.'},
66
+ ]
67
+ end
68
+
69
+ def list_core_languages
70
+ return [
71
+ 'YAML',
72
+ ]
73
+ end
74
+
75
+ def list_core_formats
76
+ return [
77
+ 'JUnit',
78
+ 'Progress',
79
+ ]
80
+ end
81
+
82
+ def assert_usage_message
83
+ list_cli_opts.each do |opt|
84
+ re = '\s+'
85
+ re += '-' if opt[:s]
86
+ re += opt[:s] if opt[:s]
87
+ re += ',' if opt[:s]
88
+ re += '\s+'
89
+ re += '--' + opt[:l]
90
+ re += '\s+'
91
+ re += opt[:d]
92
+ re += '\s+'
93
+ assert_match(Regexp.new(re), @run_result[:stdout], "The '#{opt[:l]}' option should be present")
94
+ end
95
+ # TODO - check for spurious options?
96
+ end
97
+
98
+ def assert_language_list
99
+ seen = @run_result[:stdout].split("\n").sort
100
+ expected = list_core_languages.sort
101
+ assert_equal(expected, seen, 'The list of supported languages should match')
102
+ end
103
+
104
+ def assert_format_list
105
+ seen = @run_result[:stdout].split("\n").sort
106
+ expected = list_core_formats.sort
107
+ assert_equal(expected, seen, 'The list of supported formats should match')
108
+ end
109
+
110
+ def assert_class_loaded(klass)
111
+ begin
112
+ Kernel.const_get(klass)
113
+ rescue NameError => e
114
+ flunk("Expected Class #{klass} to have been loaded")
115
+ rescue StandardError => e
116
+ raise
117
+ end
118
+ end
119
+
120
+ def files_matching_language(files, lang_name)
121
+ globs = LanguageFactory.create(lang_name).combined_globs
122
+ matches = []
123
+ globs.each do |glob|
124
+ re = glob.gsub('.', '\.')
125
+ re = glob.gsub('**/', '.+')
126
+ re = re.gsub('*', '.+')
127
+ re += '$'
128
+ re = Regexp.new(re)
129
+ files.select {|fn1| fn1.match(re) }.each do |fn2|
130
+ matches << fn2
131
+ end
132
+ end
133
+ matches
134
+ end
135
+
136
+ end
137
+ end
138
+ end
139
+ end
140
+
141
+
142
+ World(CI::Syntax::Tool::FeatureHelpers)
File without changes
@@ -0,0 +1,6 @@
1
+ # A Test Markdown File
2
+
3
+ ## With a section
4
+
5
+ and some block
6
+ quotes
@@ -0,0 +1,12 @@
1
+ ---
2
+ - name: A pretend play
3
+ hosts: the_mostest
4
+ tasks:
5
+ - name: Do something
6
+ command: tap-dance to stardom
7
+
8
+ - name: touch something
9
+ file:
10
+ path: /tmp/hearts-and-minds-of-our-nations-youth
11
+ action: touch
12
+
@@ -0,0 +1,17 @@
1
+ ---
2
+ driver:
3
+ name: vagrant
4
+
5
+ provisioner:
6
+ name: chef_zero
7
+
8
+ platforms:
9
+ - name: ubuntu-14.04
10
+ driver_config:
11
+ network:
12
+ - ["forwarded_port", {guest: 80, host: 8080, auto_correct: true}]
13
+
14
+ suites:
15
+ - name: default
16
+ run_list:
17
+ - recipe[awesomesauce::default]
@@ -0,0 +1,11 @@
1
+ Style/FileName:
2
+ Enabled: False
3
+
4
+ Metrics/MethodLength:
5
+ Max: 25
6
+
7
+ Style/TrailingWhitespace:
8
+ Enabled: False
9
+
10
+ Style/TrailingComma:
11
+ Enabled: False
@@ -0,0 +1,5 @@
1
+ ---
2
+ name: Indented zero spaces
3
+ name: indented two spaces
4
+ name: indented three spaces
5
+ name: indented one space, wth
@@ -0,0 +1,5 @@
1
+ ---
2
+ Here:
3
+ -
4
+ name: foo
5
+ - nope
@@ -0,0 +1,3 @@
1
+ ---
2
+ - name: A typical rookie ansible mistake
3
+ value: {{ this_will_bite_it }}
@@ -0,0 +1,3 @@
1
+ %YAML 9.9
2
+ ---
3
+ name: Yeah right
@@ -0,0 +1,6 @@
1
+ module CI
2
+ module Syntax
3
+ module Tool
4
+ module Test
5
+ class InvalidRequire
6
+ # Intentionally syntactically bad
@@ -0,0 +1,10 @@
1
+ module CI
2
+ module Syntax
3
+ module Tool
4
+ module Format
5
+ class MockFormat < Format::Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module CI
2
+ module Syntax
3
+ module Tool
4
+ module Test
5
+ class SecondRequire
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module CI
2
+ module Syntax
3
+ module Tool
4
+ module Test
5
+ class ValidRequire
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
File without changes
@@ -0,0 +1,46 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe CI::Syntax::Tool::FormatFactory, "#all_format_classes" do
4
+
5
+ it "should return a list of Classes" do
6
+ langs = CI::Syntax::Tool::FormatFactory.all_format_classes
7
+ langs.each do |lang|
8
+ expect(lang).to be_kind_of(Class)
9
+ end
10
+ end
11
+
12
+ end
13
+
14
+ RSpec.describe CI::Syntax::Tool::FormatFactory, "#all_format_names" do
15
+
16
+ it "should return a list of Strings" do
17
+ lang_names = CI::Syntax::Tool::FormatFactory.all_format_names
18
+ lang_names.each do |lang|
19
+ expect(lang).to be_kind_of(String)
20
+ end
21
+ end
22
+
23
+ it "should not return Base among the format names" do
24
+ lang_names = CI::Syntax::Tool::FormatFactory.all_format_names
25
+ expect(lang_names).not_to include('Base')
26
+ end
27
+
28
+ it "should include the expected format names" do
29
+ lang_names = CI::Syntax::Tool::FormatFactory.all_format_names
30
+ [
31
+ 'Progress',
32
+ ].each do |lang|
33
+ expect(lang_names).to include(lang)
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ RSpec.describe CI::Syntax::Tool::FormatFactory, "#create" do
40
+ it "should be able to create one of each format with a single arg" do
41
+ CI::Syntax::Tool::FormatFactory.all_format_names.each do |fmt_name|
42
+ lang_obj = CI::Syntax::Tool::FormatFactory.create(fmt_name, 'test/tmp/dest-unit-0')
43
+ expect(lang_obj).to be_kind_of CI::Syntax::Tool::Format::Base
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe CI::Syntax::Tool::LanguageFactory, "#all_language_classes" do
4
+
5
+ it "should return a list of Classes" do
6
+ langs = CI::Syntax::Tool::LanguageFactory.all_language_classes
7
+ langs.each do |lang|
8
+ expect(lang).to be_kind_of(Class)
9
+ end
10
+ end
11
+
12
+ end
13
+
14
+ RSpec.describe CI::Syntax::Tool::LanguageFactory, "#all_language_names" do
15
+
16
+ it "should return a list of Strings" do
17
+ lang_names = CI::Syntax::Tool::LanguageFactory.all_language_names
18
+ lang_names.each do |lang|
19
+ expect(lang).to be_kind_of(String)
20
+ end
21
+ end
22
+
23
+ it "should not return Base among the language names" do
24
+ lang_names = CI::Syntax::Tool::LanguageFactory.all_language_names
25
+ expect(lang_names).not_to include('Base')
26
+ end
27
+
28
+ it "should include the expected language names" do
29
+ lang_names = CI::Syntax::Tool::LanguageFactory.all_language_names
30
+ [
31
+ 'YAML',
32
+ ].each do |lang|
33
+ expect(lang_names).to include(lang)
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ RSpec.describe CI::Syntax::Tool::LanguageFactory, "#create" do
40
+ it "should be able to create one of each language with no args" do
41
+ CI::Syntax::Tool::LanguageFactory.all_language_names.each do |lang_name|
42
+ lang_obj = CI::Syntax::Tool::LanguageFactory.create(lang_name)
43
+ expect(lang_obj).to be_kind_of CI::Syntax::Tool::Language::Base
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,18 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe CI::Syntax::Tool::Issue, "#constructor" do
4
+
5
+ it "should be an error-level issue by default" do
6
+ issue = CI::Syntax::Tool::Issue.new
7
+ expect(issue.level).to be :error
8
+ end
9
+
10
+ end
11
+
12
+ RSpec.describe CI::Syntax::Tool::Result::FileResult, "#issue counting" do
13
+ it "should have zero issues by default" do
14
+ fr = CI::Syntax::Tool::Result::FileResult.new('fake.yaml')
15
+ expect(fr.warning_count).to eq 0
16
+ expect(fr.error_count).to eq 0
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../../lib/ci-syntax-tool'
2
+
3
+ require 'rspec'
4
+ require 'rspec/core'
5
+
6
+ RSpec.configure do |config|
7
+
8
+ config.expect_with :rspec do |expectations|
9
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
10
+ end
11
+
12
+ config.mock_with :rspec do |mocks|
13
+ mocks.verify_partial_doubles = true
14
+ end
15
+
16
+ config.disable_monkey_patching!
17
+
18
+ config.warnings = true
19
+
20
+
21
+ if config.files_to_run.one?
22
+ config.default_formatter = 'doc'
23
+ end
24
+
25
+ config.profile_examples = 10
26
+
27
+ config.order = :random
28
+
29
+ Kernel.srand config.seed
30
+
31
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ci-syntax-tool
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Clinton Wolfe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.28'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.28'
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.6'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.6'
83
+ description: Checks YAML, JSON, Ruby, ERB, and other syntaxes, then reports errors
84
+ and OKs in a nice way for your CI system.
85
+ email:
86
+ - clinton@omniti.com
87
+ executables:
88
+ - ci-syntax-tool
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - bin/ci-syntax-tool
97
+ - ci-syntax-tool.gemspec
98
+ - lib/ci-syntax-tool.rb
99
+ - lib/ci-syntax-tool/checker.rb
100
+ - lib/ci-syntax-tool/command_line.rb
101
+ - lib/ci-syntax-tool/format/base.rb
102
+ - lib/ci-syntax-tool/format/junit.rb
103
+ - lib/ci-syntax-tool/format/progress.rb
104
+ - lib/ci-syntax-tool/format_factory.rb
105
+ - lib/ci-syntax-tool/language/base.rb
106
+ - lib/ci-syntax-tool/language/yaml.rb
107
+ - lib/ci-syntax-tool/language_factory.rb
108
+ - lib/ci-syntax-tool/result.rb
109
+ - lib/ci-syntax-tool/version.rb
110
+ - rubocop.yml
111
+ - test/features/.keep
112
+ - test/features/command-line-help.feature
113
+ - test/features/format-junit.feature
114
+ - test/features/language-yaml.feature
115
+ - test/features/pluggable-formatters.feature
116
+ - test/features/pluggable-languages.feature
117
+ - test/features/require-ruby.feature
118
+ - test/features/step_definitions/cli_steps.rb
119
+ - test/features/step_definitions/format_steps.rb
120
+ - test/features/step_definitions/junit_steps.rb
121
+ - test/features/step_definitions/language_steps.rb
122
+ - test/features/step_definitions/require_steps.rb
123
+ - test/features/support/feature_helper.rb
124
+ - test/fixtures/.keep
125
+ - test/fixtures/files/clean/README.md
126
+ - test/fixtures/files/clean/ansiblish.yaml
127
+ - test/fixtures/files/clean/kitchenish.yml
128
+ - test/fixtures/files/clean/rubocopish.yaml
129
+ - test/fixtures/files/error/bad-indentation.yaml
130
+ - test/fixtures/files/error/missing-array-element.yaml
131
+ - test/fixtures/files/error/unquoted-jinja-template.yaml
132
+ - test/fixtures/files/error/very-high-yaml-version.yaml
133
+ - test/fixtures/require/invalid.rb
134
+ - test/fixtures/require/mock_format.rb
135
+ - test/fixtures/require/second.rb
136
+ - test/fixtures/require/valid.rb
137
+ - test/tmp/.keep
138
+ - test/unit/.keep
139
+ - test/unit/format_factory_spec.rb
140
+ - test/unit/language_factory_spec.rb
141
+ - test/unit/result_spec.rb
142
+ - test/unit/spec_helper.rb
143
+ homepage: https://github.com/clintoncwolfe/ci-syntax-tool
144
+ licenses:
145
+ - BSD (3-clause)
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.4.8
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: A Rubygem implementing a suite of source code syntax checkers, with well-behaved
167
+ output fo use with CI engines.
168
+ test_files:
169
+ - test/features/.keep
170
+ - test/features/command-line-help.feature
171
+ - test/features/format-junit.feature
172
+ - test/features/language-yaml.feature
173
+ - test/features/pluggable-formatters.feature
174
+ - test/features/pluggable-languages.feature
175
+ - test/features/require-ruby.feature
176
+ - test/features/step_definitions/cli_steps.rb
177
+ - test/features/step_definitions/format_steps.rb
178
+ - test/features/step_definitions/junit_steps.rb
179
+ - test/features/step_definitions/language_steps.rb
180
+ - test/features/step_definitions/require_steps.rb
181
+ - test/features/support/feature_helper.rb
182
+ - test/fixtures/.keep
183
+ - test/fixtures/files/clean/README.md
184
+ - test/fixtures/files/clean/ansiblish.yaml
185
+ - test/fixtures/files/clean/kitchenish.yml
186
+ - test/fixtures/files/clean/rubocopish.yaml
187
+ - test/fixtures/files/error/bad-indentation.yaml
188
+ - test/fixtures/files/error/missing-array-element.yaml
189
+ - test/fixtures/files/error/unquoted-jinja-template.yaml
190
+ - test/fixtures/files/error/very-high-yaml-version.yaml
191
+ - test/fixtures/require/invalid.rb
192
+ - test/fixtures/require/mock_format.rb
193
+ - test/fixtures/require/second.rb
194
+ - test/fixtures/require/valid.rb
195
+ - test/tmp/.keep
196
+ - test/unit/.keep
197
+ - test/unit/format_factory_spec.rb
198
+ - test/unit/language_factory_spec.rb
199
+ - test/unit/result_spec.rb
200
+ - test/unit/spec_helper.rb
201
+ has_rdoc: