ruby-lint 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +43 -29
  3. data/LICENSE +1 -1
  4. data/README.md +0 -1
  5. data/bin/ruby-lint +91 -3
  6. data/checksum/ruby-lint-1.1.0.gem.sha512 +1 -0
  7. data/doc/changelog.md +30 -0
  8. data/doc/code_analysis.md +13 -0
  9. data/doc/configuration.md +5 -24
  10. data/lib/ruby-lint.rb +7 -10
  11. data/lib/ruby-lint/analysis/argument_amount.rb +2 -0
  12. data/lib/ruby-lint/analysis/base.rb +12 -0
  13. data/lib/ruby-lint/analysis/pedantics.rb +2 -0
  14. data/lib/ruby-lint/analysis/shadowing_variables.rb +2 -0
  15. data/lib/ruby-lint/analysis/undefined_methods.rb +5 -2
  16. data/lib/ruby-lint/analysis/undefined_variables.rb +2 -0
  17. data/lib/ruby-lint/analysis/unused_variables.rb +2 -0
  18. data/lib/ruby-lint/analysis/useless_equality_checks.rb +2 -0
  19. data/lib/ruby-lint/ast/node.rb +0 -15
  20. data/lib/ruby-lint/command.rb +100 -0
  21. data/lib/ruby-lint/configuration.rb +35 -66
  22. data/lib/ruby-lint/constant_path.rb +7 -2
  23. data/lib/ruby-lint/definition/ruby_object.rb +20 -6
  24. data/lib/ruby-lint/definitions/core/argf.rb +3 -3
  25. data/lib/ruby-lint/definitions/gems/minitest.rb +792 -0
  26. data/lib/ruby-lint/file_list.rb +1 -1
  27. data/lib/ruby-lint/file_loader.rb +2 -20
  28. data/lib/ruby-lint/file_scanner.rb +11 -2
  29. data/lib/ruby-lint/method_evaluation.rb +21 -0
  30. data/lib/ruby-lint/presenter/base.rb +18 -0
  31. data/lib/ruby-lint/presenter/json.rb +3 -1
  32. data/lib/ruby-lint/presenter/syntastic.rb +3 -1
  33. data/lib/ruby-lint/presenter/text.rb +3 -1
  34. data/lib/ruby-lint/runner.rb +6 -63
  35. data/lib/ruby-lint/variable_predicates.rb +3 -3
  36. data/lib/ruby-lint/version.rb +1 -1
  37. data/lib/ruby-lint/virtual_machine.rb +4 -1
  38. data/ruby-lint.gemspec +13 -4
  39. metadata +12 -187
  40. data/.editorconfig +0 -15
  41. data/.gitignore +0 -6
  42. data/.ruby-version +0 -1
  43. data/.travis.yml +0 -19
  44. data/Gemfile +0 -15
  45. data/MANIFEST +0 -469
  46. data/Rakefile +0 -25
  47. data/benchmark/bootup.rb +0 -13
  48. data/benchmark/virtual_machine.rb +0 -17
  49. data/checksum/.gitkeep +0 -0
  50. data/doc/.gitkeep +0 -0
  51. data/doc/css/.gitkeep +0 -0
  52. data/doc/images/.gitkeep +0 -0
  53. data/gen/rails/constants.txt +0 -12
  54. data/gen/rails/requires.rb +0 -2
  55. data/gen/stdlib/constants.rb +0 -30
  56. data/gen/stdlib/constants.txt +0 -214
  57. data/gen/stdlib/requires.rb +0 -64
  58. data/lib/ruby-lint/benchmark/average.rb +0 -115
  59. data/lib/ruby-lint/cache.rb +0 -121
  60. data/lib/ruby-lint/cache_entry.rb +0 -44
  61. data/lib/ruby-lint/cli.rb +0 -4
  62. data/lib/ruby-lint/cli/analyze.rb +0 -209
  63. data/lib/ruby-lint/cli/base.rb +0 -103
  64. data/lib/ruby-lint/cli/cache.rb +0 -60
  65. data/lib/ruby-lint/default_names.rb +0 -19
  66. data/lib/ruby-lint/definitions/gems/.gitkeep +0 -0
  67. data/lib/ruby-lint/node_hash.rb +0 -105
  68. data/misc/stdlib.rb +0 -66
  69. data/profiling/virtual_machine.rb +0 -20
  70. data/ruby-lint.yml +0 -7
  71. data/spec/fixtures/associating.rb +0 -7
  72. data/spec/fixtures/complex/rails/basic_controller.rb +0 -9
  73. data/spec/fixtures/complex/rcap.rb +0 -67
  74. data/spec/fixtures/complex/slop.rb +0 -701
  75. data/spec/fixtures/config.yml +0 -8
  76. data/spec/fixtures/deeply/nested/file.rb +0 -1
  77. data/spec/fixtures/file_scanner/lib/example/recursive/source.rb +0 -6
  78. data/spec/fixtures/file_scanner/lib/example/recursive/target.rb +0 -8
  79. data/spec/fixtures/file_scanner/lib/example/user.rb +0 -6
  80. data/spec/fixtures/file_scanner/lib/ruby-lint/definition/constant_proxy.rb +0 -6
  81. data/spec/fixtures/file_scanner/lib/ruby-lint/global_scope.rb +0 -6
  82. data/spec/fixtures/file_scanner/lib/test-dashes/foo.rb +0 -4
  83. data/spec/fixtures/file_scanner/rails/app/models/example/user.rb +0 -6
  84. data/spec/fixtures/file_scanner/rails/app/models/user.rb +0 -4
  85. data/spec/fixtures/invalid.rb +0 -3
  86. data/spec/fixtures/invalid_2.rb +0 -3
  87. data/spec/fixtures/syntax_error.rb +0 -1
  88. data/spec/fixtures/uses_external.rb +0 -1
  89. data/spec/fixtures/uses_external_invalid.rb +0 -3
  90. data/spec/fixtures/uses_external_namespace.rb +0 -1
  91. data/spec/fixtures/valid.rb +0 -3
  92. data/spec/ruby-lint/analysis/argument_amount_spec.rb +0 -131
  93. data/spec/ruby-lint/analysis/base_spec.rb +0 -24
  94. data/spec/ruby-lint/analysis/pedantics_spec.rb +0 -63
  95. data/spec/ruby-lint/analysis/shadowing_variables_spec.rb +0 -85
  96. data/spec/ruby-lint/analysis/undefined_methods_spec.rb +0 -337
  97. data/spec/ruby-lint/analysis/undefined_variables_spec.rb +0 -138
  98. data/spec/ruby-lint/analysis/unused_variables_spec.rb +0 -270
  99. data/spec/ruby-lint/analysis/useless_equality_checks_spec.rb +0 -107
  100. data/spec/ruby-lint/ast/node_spec.rb +0 -39
  101. data/spec/ruby-lint/cache_entry_spec.rb +0 -25
  102. data/spec/ruby-lint/cache_spec.rb +0 -53
  103. data/spec/ruby-lint/cli/analyze_spec.rb +0 -52
  104. data/spec/ruby-lint/configuration_spec.rb +0 -126
  105. data/spec/ruby-lint/constant_loader_spec.rb +0 -79
  106. data/spec/ruby-lint/constant_path.rb +0 -63
  107. data/spec/ruby-lint/definition/constant_proxy_spec.rb +0 -85
  108. data/spec/ruby-lint/definition/dsl_spec.rb +0 -135
  109. data/spec/ruby-lint/definition/registry_spec.rb +0 -106
  110. data/spec/ruby-lint/definition/ruby_method_spec.rb +0 -106
  111. data/spec/ruby-lint/definition/ruby_object_spec.rb +0 -264
  112. data/spec/ruby-lint/definition_builder/primitive_spec.rb +0 -62
  113. data/spec/ruby-lint/definition_builder/ruby_class_spec.rb +0 -107
  114. data/spec/ruby-lint/definition_builder/ruby_method_spec.rb +0 -53
  115. data/spec/ruby-lint/definition_builder/ruby_module_spec.rb +0 -52
  116. data/spec/ruby-lint/definitions/argv_spec.rb +0 -18
  117. data/spec/ruby-lint/definitions/env_spec.rb +0 -13
  118. data/spec/ruby-lint/definitions/file_spec.rb +0 -17
  119. data/spec/ruby-lint/definitions/fixnum_spec.rb +0 -18
  120. data/spec/ruby-lint/definitions/io_spec.rb +0 -15
  121. data/spec/ruby-lint/definitions/kernel_spec.rb +0 -18
  122. data/spec/ruby-lint/definitions/range_spec.rb +0 -21
  123. data/spec/ruby-lint/definitions/string_spec.rb +0 -20
  124. data/spec/ruby-lint/docstring/mapping.rb +0 -27
  125. data/spec/ruby-lint/docstring/parser_spec.rb +0 -88
  126. data/spec/ruby-lint/extensions/string_spec.rb +0 -7
  127. data/spec/ruby-lint/file_list_spec.rb +0 -25
  128. data/spec/ruby-lint/file_loader_spec.rb +0 -69
  129. data/spec/ruby-lint/file_scanner_spec.rb +0 -84
  130. data/spec/ruby-lint/inspector_spec.rb +0 -224
  131. data/spec/ruby-lint/iterator_spec.rb +0 -151
  132. data/spec/ruby-lint/method_call/.gitkeep +0 -0
  133. data/spec/ruby-lint/nested_stack_spec.rb +0 -23
  134. data/spec/ruby-lint/node_hash_spec.rb +0 -56
  135. data/spec/ruby-lint/parser_spec.rb +0 -38
  136. data/spec/ruby-lint/presenter/json_spec.rb +0 -58
  137. data/spec/ruby-lint/presenter/syntastic_spec.rb +0 -49
  138. data/spec/ruby-lint/presenter/text_spec.rb +0 -49
  139. data/spec/ruby-lint/report/entry_spec.rb +0 -58
  140. data/spec/ruby-lint/report_spec.rb +0 -39
  141. data/spec/ruby-lint/runner_spec.rb +0 -74
  142. data/spec/ruby-lint/variable_predicates_spec.rb +0 -30
  143. data/spec/ruby-lint/virtual_machine/alias_spec.rb +0 -55
  144. data/spec/ruby-lint/virtual_machine/assignments/arrays_spec.rb +0 -87
  145. data/spec/ruby-lint/virtual_machine/assignments/assignment_arguments_spec.rb +0 -14
  146. data/spec/ruby-lint/virtual_machine/assignments/constants_spec.rb +0 -23
  147. data/spec/ruby-lint/virtual_machine/assignments/hashes_spec.rb +0 -52
  148. data/spec/ruby-lint/virtual_machine/assignments/optional_spec.rb +0 -41
  149. data/spec/ruby-lint/virtual_machine/assignments/range_spec.rb +0 -28
  150. data/spec/ruby-lint/virtual_machine/assignments/return_values_spec.rb +0 -78
  151. data/spec/ruby-lint/virtual_machine/assignments/variables_spec.rb +0 -130
  152. data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +0 -61
  153. data/spec/ruby-lint/virtual_machine/autoloading_spec.rb +0 -18
  154. data/spec/ruby-lint/virtual_machine/blocks_spec.rb +0 -90
  155. data/spec/ruby-lint/virtual_machine/classes/class_methods_spec.rb +0 -21
  156. data/spec/ruby-lint/virtual_machine/classes/extending_spec.rb +0 -109
  157. data/spec/ruby-lint/virtual_machine/classes/redefining_spec.rb +0 -51
  158. data/spec/ruby-lint/virtual_machine/classes/sclass_spec.rb +0 -96
  159. data/spec/ruby-lint/virtual_machine/classes/scoping_spec.rb +0 -60
  160. data/spec/ruby-lint/virtual_machine/complex/rails_spec.rb +0 -21
  161. data/spec/ruby-lint/virtual_machine/complex/rcap_spec.rb +0 -15
  162. data/spec/ruby-lint/virtual_machine/complex/slop_spec.rb +0 -16
  163. data/spec/ruby-lint/virtual_machine/constants_spec.rb +0 -31
  164. data/spec/ruby-lint/virtual_machine/for_spec.rb +0 -16
  165. data/spec/ruby-lint/virtual_machine/freeze_spec.rb +0 -13
  166. data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +0 -15
  167. data/spec/ruby-lint/virtual_machine/inherit_kernel_spec.rb +0 -15
  168. data/spec/ruby-lint/virtual_machine/interpolation_spec.rb +0 -12
  169. data/spec/ruby-lint/virtual_machine/location_spec.rb +0 -64
  170. data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +0 -57
  171. data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +0 -182
  172. data/spec/ruby-lint/virtual_machine/methods/calls_spec.rb +0 -25
  173. data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +0 -41
  174. data/spec/ruby-lint/virtual_machine/methods/defining_spec.rb +0 -40
  175. data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +0 -80
  176. data/spec/ruby-lint/virtual_machine/methods/exporting_spec.rb +0 -19
  177. data/spec/ruby-lint/virtual_machine/methods/kernel_spec.rb +0 -25
  178. data/spec/ruby-lint/virtual_machine/methods/parameters_spec.rb +0 -89
  179. data/spec/ruby-lint/virtual_machine/methods/patching_spec.rb +0 -20
  180. data/spec/ruby-lint/virtual_machine/methods/scoping_spec.rb +0 -63
  181. data/spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb +0 -32
  182. data/spec/ruby-lint/virtual_machine/methods/visibility_spec.rb +0 -64
  183. data/spec/ruby-lint/virtual_machine/modules_spec.rb +0 -205
  184. data/spec/ruby-lint/virtual_machine/reference_amount_spec.rb +0 -81
  185. data/spec/ruby-lint/virtual_machine/self_spec.rb +0 -37
  186. data/spec/ruby-lint/virtual_machine/unused_spec.rb +0 -17
  187. data/spec/spec_helper.rb +0 -28
  188. data/spec/support/building.rb +0 -50
  189. data/spec/support/coveralls.rb +0 -5
  190. data/spec/support/definitions.rb +0 -39
  191. data/spec/support/fixtures.rb +0 -20
  192. data/spec/support/parsing.rb +0 -30
  193. data/spec/support/simplecov.rb +0 -18
  194. data/spec/support/versions.rb +0 -9
  195. data/task/build.rake +0 -4
  196. data/task/checksum.rake +0 -13
  197. data/task/coverage.rake +0 -6
  198. data/task/doc.rake +0 -16
  199. data/task/generate.rake +0 -77
  200. data/task/graphviz.rake +0 -12
  201. data/task/manifest.rake +0 -8
  202. data/task/tag.rake +0 -6
  203. data/task/test.rake +0 -4
  204. data/task/todo.rake +0 -6
  205. data/task/travis.rake +0 -8
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::Docstring::Parser do
4
- let(:parser) { RubyLint::Docstring::Parser.new }
5
-
6
- context '@param tags' do
7
- example 'parse a tag with just the parameter name' do
8
- comments = ['# @param number']
9
- tag = parser.parse(comments)[0]
10
-
11
- tag.is_a?(RubyLint::Docstring::ParamTag).should == true
12
-
13
- tag.name.should == 'number'
14
- end
15
-
16
- example 'parse a tag with a parameter name and description' do
17
- comments = ['# @param number The number.']
18
- tag = parser.parse(comments)[0]
19
-
20
- tag.name.should == 'number'
21
- tag.description.should == 'The number.'
22
- end
23
-
24
- example 'parse a tag with a type' do
25
- comments = ['# @param [Numeric] number']
26
- tag = parser.parse(comments)[0]
27
-
28
- tag.name.should == 'number'
29
- tag.types.should == ['Numeric']
30
- end
31
-
32
- example 'parse a tag with a type and description' do
33
- comments = ['# @param [Numeric] number The number.']
34
- tag = parser.parse(comments)[0]
35
-
36
- tag.name.should == 'number'
37
- tag.types.should == ['Numeric']
38
- tag.description.should == 'The number.'
39
- end
40
-
41
- example 'parse a tag with a compound type' do
42
- comments = ['# @param [Array<String>] names The names']
43
- tag = parser.parse(comments)[0]
44
-
45
- tag.name.should == 'names'
46
- tag.description.should == 'The names'
47
- tag.types.should == ['Array']
48
- end
49
-
50
- example 'should parse a tag with a namespace in it' do
51
- comments = ['# @param [Foo::Bar] baz']
52
- tag = parser.parse(comments)[0]
53
-
54
- tag.name.should == 'baz'
55
- tag.types.should == ['Foo::Bar']
56
- end
57
- end
58
-
59
- context '@return tags' do
60
- example 'parse a tag with just the type' do
61
- comments = ['# @return [Numeric]']
62
- tag = parser.parse(comments)[0]
63
-
64
- tag.is_a?(RubyLint::Docstring::ReturnTag).should == true
65
-
66
- tag.description.nil?.should == true
67
- tag.types.should == ['Numeric']
68
- end
69
-
70
- example 'parse a tag with the type and description' do
71
- comments = ['# @return [Numeric] The number.']
72
- tag = parser.parse(comments)[0]
73
-
74
- tag.is_a?(RubyLint::Docstring::ReturnTag).should == true
75
-
76
- tag.types.should == ['Numeric']
77
- tag.description.should == 'The number.'
78
- end
79
-
80
- example 'parse a tag with the description' do
81
- comments = ['# @return Hello']
82
- tag = parser.parse(comments)[0]
83
-
84
- tag.types.should == []
85
- tag.description.should == 'Hello'
86
- end
87
- end
88
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'RubyLint String extensions' do
4
- example 'snake_case a String' do
5
- 'HelloWorld::Foo::Bar'.snake_case.should == 'hello_world_foo_bar'
6
- end
7
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::FileList do
4
- before :all do
5
- @list = RubyLint::FileList.new
6
- end
7
-
8
- example 'list a set of files' do
9
- path = fixture_path('valid.rb')
10
-
11
- @list.process([path]).should == [path]
12
- end
13
-
14
- example 'list a set of directories' do
15
- @list.process([fixture_path('deeply')]).should == [
16
- fixture_path('deeply/nested/file.rb')
17
- ]
18
- end
19
-
20
- example 'raise for non existing files' do
21
- block = lambda { @list.process(['yeah-right']) }
22
-
23
- block.should raise_error(Errno::ENOENT)
24
- end
25
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::FileLoader do
4
- before :all do
5
- @rails_dir = fixture_path('file_scanner/rails')
6
- @lib_dir = fixture_path('file_scanner/lib')
7
- end
8
-
9
- context 'rails projects' do
10
- example 'finding a class' do
11
- loader = RubyLint::FileLoader.new(:directories => [@rails_dir])
12
- ast = parse('User')
13
-
14
- loader.iterate(ast)
15
-
16
- loader.nodes.empty?.should == false
17
-
18
- const = loader.nodes[1][0].children[0]
19
-
20
- const.file
21
- .should == fixture_path('file_scanner/rails/app/models/user.rb')
22
- end
23
-
24
- example 'finding a namespaced class' do
25
- loader = RubyLint::FileLoader.new(:directories => [@rails_dir])
26
- ast = parse('Example::User')
27
-
28
- loader.iterate(ast)
29
-
30
- loader.nodes.empty?.should == false
31
-
32
- const = loader.nodes[1][0].children[0]
33
-
34
- const.file
35
- .should == fixture_path('file_scanner/rails/app/models/example/user.rb')
36
- end
37
- end
38
-
39
- context 'regular Ruby projects' do
40
- example 'finding a class' do
41
- loader = RubyLint::FileLoader.new(:directories => [@lib_dir])
42
- ast = parse('Example::User')
43
-
44
- loader.iterate(ast)
45
-
46
- loader.nodes.empty?.should == false
47
-
48
- const = loader.nodes[0][0].children[0]
49
-
50
- const.file.should == fixture_path('file_scanner/lib/example/user.rb')
51
- end
52
-
53
- example 'recursively find dependencies' do
54
- loader = RubyLint::FileLoader.new(:directories => [@lib_dir])
55
- ast = parse('Example::Recursive::Source')
56
-
57
- loader.iterate(ast)
58
-
59
- nodes = loader.nodes.map do |pair|
60
- pair[0].children[0]
61
- end
62
-
63
- nodes.length.should == 2
64
-
65
- File.basename(nodes[0].file).should == 'target.rb'
66
- File.basename(nodes[1].file).should == 'source.rb'
67
- end
68
- end
69
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::FileScanner do
4
- before :all do
5
- @rails_dir = fixture_path('file_scanner/rails')
6
- @lib_dir = fixture_path('file_scanner/lib')
7
- end
8
-
9
- example 'raise when a non enumerable argument is given' do
10
- lambda { RubyLint::FileScanner.new(10) }.should raise_error(TypeError)
11
- end
12
-
13
- example 'set the default directories' do
14
- scanner = RubyLint::FileScanner.new
15
-
16
- scanner.directories.empty?.should == false
17
- end
18
-
19
- example 'do not include non existing directories' do
20
- app = File.join(Dir.pwd, 'app')
21
- scanner = RubyLint::FileScanner.new
22
-
23
- scanner.directories.include?(app).should == false
24
- end
25
-
26
- example 'glob Ruby source files in a single directory' do
27
- scanner = RubyLint::FileScanner.new([@lib_dir])
28
-
29
- scanner.glob_ruby_files.empty?.should == false
30
- end
31
-
32
- example 'glob Ruby source files in multiple directories' do
33
- scanner = RubyLint::FileScanner.new([@lib_dir, @rails_dir])
34
-
35
- scanner.glob_ruby_files.empty?.should == false
36
- end
37
-
38
- example 'finding a class' do
39
- scanner = RubyLint::FileScanner.new([@lib_dir])
40
- paths = scanner.scan('Example::User')
41
-
42
- paths.should == [fixture_path('file_scanner/lib/example/user.rb')]
43
- end
44
-
45
- example 'finding a class using dashes for the directory names' do
46
- scanner = RubyLint::FileScanner.new([@lib_dir])
47
- paths = scanner.scan('TestDashes::Foo')
48
-
49
- paths.should == [fixture_path('file_scanner/lib/test-dashes/foo.rb')]
50
- end
51
-
52
- example 'finding a class using a Rails structure' do
53
- scanner = RubyLint::FileScanner.new([@rails_dir])
54
- paths = scanner.scan('User')
55
-
56
- paths.should == [
57
- fixture_path('file_scanner/rails/app/models/user.rb'),
58
- fixture_path('file_scanner/rails/app/models/example/user.rb')
59
- ]
60
- end
61
-
62
- example 'finding a namespaced class using a Rails structure' do
63
- scanner = RubyLint::FileScanner.new([@rails_dir])
64
- paths = scanner.scan('Example::User')
65
-
66
- paths.should == [
67
- fixture_path('file_scanner/rails/app/models/example/user.rb')
68
- ]
69
- end
70
-
71
- example 'ignoring directories' do
72
- scanner = RubyLint::FileScanner.new([@lib_dir], [@lib_dir])
73
-
74
- scanner.scan('Example::User').empty?.should == true
75
- end
76
-
77
- example 'do not scan when there are no directories' do
78
- scanner = RubyLint::FileScanner.new([])
79
-
80
- scanner.should_not receive(:glob_ruby_files)
81
-
82
- scanner.scan('Foo')
83
- end
84
- end
@@ -1,224 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::Inspector do
4
- context 'inspecting constants' do
5
- before :all do
6
- inspector = RubyLint::Inspector.new(Encoding)
7
- @constants = inspector.inspect_constants
8
- end
9
-
10
- example 'include the source constant' do
11
- @constants.include?('Encoding').should == true
12
- end
13
-
14
- example 'include the child constants' do
15
- @constants.include?('Encoding::BINARY').should == true
16
- @constants.include?('Encoding::ASCII_8BIT').should == true
17
- end
18
- end
19
-
20
- context 'ignoring duplicates' do
21
- before :all do
22
- inspector = RubyLint::Inspector.new(Encoding)
23
- @constants = inspector.inspect_constants(
24
- inspector.constant,
25
- ['Encoding::BINARY']
26
- )
27
- end
28
-
29
- example 'ignore duplicates' do
30
- @constants.include?('Encoding::BINARY').should == false
31
- end
32
-
33
- example 'include other constants' do
34
- @constants.include?('Encoding::ASCII_8BIT').should == true
35
- end
36
- end
37
-
38
- context 'dealing with recursive constant lists' do
39
- before :all do
40
- # This ignores all constants except those defined on the right hand side
41
- # of the subtraction. This speeds up the tests quite a bit (we don't care
42
- # about constants such as CGI and Parser in this case).
43
- ignore = Object.constants.map(&:to_s) - %w{Object Class Module Encoding}
44
-
45
- inspector = RubyLint::Inspector.new(Object)
46
- @constants = inspector.inspect_constants(inspector.constant, ignore)
47
- end
48
-
49
- example 'include Class and Module' do
50
- @constants.include?('Class').should == true
51
- @constants.include?('Module').should == true
52
- end
53
-
54
- example 'exclude recursive constants' do
55
- @constants.include?('Class::Object').should == false
56
- @constants.include?('Module::Object').should == false
57
- end
58
-
59
- example 'include other regular constants' do
60
- @constants.include?('Encoding').should == true
61
- @constants.include?('Encoding::BINARY').should == true
62
- end
63
- end
64
-
65
- context 'Ruby implementation shenanigans' do
66
- before :all do
67
- mod = Module.new { include Enumerable }
68
-
69
- inspector = RubyLint::Inspector.new(mod)
70
- @constants = inspector.inspect_constants
71
- end
72
-
73
- # This test was added since Rubinius defines `Range::Enumerator` which is
74
- # an alias of `Enumerable::Enumerator`.
75
- example 'ignore constants from a different root constant' do
76
- @constants.include?('Enumerable::Enumerator').should == false
77
- end
78
- end
79
-
80
- context 'inspecting parent classes' do
81
- before :all do
82
- @inspector = RubyLint::Inspector.new(Object)
83
- end
84
-
85
- example 'return the parent class' do
86
- @inspector.inspect_superclass.should == BasicObject
87
- end
88
- end
89
-
90
- context 'inspecting anonymous parent classes' do
91
- before :all do
92
- parent = Class.new
93
- klass = Class.new(parent)
94
-
95
- @inspector = RubyLint::Inspector.new(klass)
96
- end
97
-
98
- example 'ignore anonymous parent classes' do
99
- @inspector.inspect_superclass.nil?.should == true
100
- end
101
- end
102
-
103
- context 'inspecting included modules' do
104
- before :all do
105
- klass = Class.new { include Enumerable }
106
- child = Class.new(klass) { include Enumerable }
107
-
108
- @modules = RubyLint::Inspector.new(klass).inspect_modules
109
- @child_modules = RubyLint::Inspector.new(child).inspect_modules
110
- end
111
-
112
- example 'include Enumerable' do
113
- @modules.include?(Enumerable).should == true
114
- end
115
-
116
- example 'ignore modules that are already included in the parent' do
117
- @child_modules.empty?.should == true
118
- end
119
- end
120
-
121
- context 'inspecing included modules with anonymous modules' do
122
- before :all do
123
- mod = Module.new { def foo; end }
124
- klass = Class.new { include mod }
125
-
126
- @modules = RubyLint::Inspector.new(klass).inspect_modules
127
- end
128
-
129
- example 'ignore anonymous modules' do
130
- @modules.empty?.should == true
131
- end
132
- end
133
-
134
- context 'inspecting class methods' do
135
- before :all do
136
- inspector = RubyLint::Inspector.new(Encoding)
137
- @methods = inspector.inspect_methods.map(&:name)
138
- end
139
-
140
- example 'include a method' do
141
- @methods.include?(:find).should == true
142
- end
143
- end
144
-
145
- context 'inspecting instance methods' do
146
- before :all do
147
- inspector = RubyLint::Inspector.new(Encoding)
148
- @methods = inspector.inspect_instance_methods.map(&:name)
149
- end
150
-
151
- example 'include a method' do
152
- @methods.include?(:to_s).should == true
153
- end
154
- end
155
-
156
- context 'exclude methods defined in a parent class' do
157
- before :all do
158
- parent = Class.new { def foo; end }
159
- child = Class.new(parent) { def bar; end }
160
- inspector = RubyLint::Inspector.new(child)
161
- @methods = inspector.inspect_instance_methods.map(&:name)
162
- end
163
-
164
- example 'exclude parent methods' do
165
- @methods.include?(:foo).should == false
166
- end
167
-
168
- example 'include the instance methods of the source' do
169
- @methods.include?(:bar).should == true
170
- end
171
- end
172
-
173
- context 'exclude methods defined in an included module' do
174
- before :all do
175
- mod = Module.new { def foo; end }
176
- klass = Class.new { include(mod); def bar; end }
177
- inspector = RubyLint::Inspector.new(klass)
178
- @methods = inspector.inspect_instance_methods.map(&:name)
179
- end
180
-
181
- example 'do not include methods from included modules' do
182
- @methods.include?(:foo).should == false
183
- end
184
-
185
- example 'include methods defined directly in the class' do
186
- @methods.include?(:bar).should == true
187
- end
188
- end
189
-
190
- context 'excluding parent methods when extending Object' do
191
- before :all do
192
- child = Class.new(Object) { def foo; end }
193
- inspector = RubyLint::Inspector.new(child)
194
- @methods = inspector.inspect_instance_methods.map(&:name)
195
- end
196
-
197
- example 'only include methods of the sub class' do
198
- @methods.should == [:foo]
199
- end
200
- end
201
-
202
- context 'including initialize methods' do
203
- before :all do
204
- @no_init = Class.new
205
- @init = Class.new { def initialize; end }
206
-
207
- @no_init_methods = RubyLint::Inspector.new(@no_init)
208
- .inspect_instance_methods
209
- .map(&:name)
210
-
211
- @init_methods = RubyLint::Inspector.new(@init)
212
- .inspect_instance_methods
213
- .map(&:name)
214
- end
215
-
216
- example 'exclude initialize if it is not defined directly' do
217
- @no_init_methods.include?(:initialize).should == false
218
- end
219
-
220
- example 'include initialize if it is defined directly' do
221
- @init_methods.include?(:initialize).should == true
222
- end
223
- end
224
- end