mdl 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mdl/doc.rb +1 -1
  3. data/lib/mdl/version.rb +1 -1
  4. data/mdl.gemspec +3 -3
  5. metadata +4 -266
  6. data/.github/ISSUE_TEMPLATE/BUG_TEMPLATE.md +0 -22
  7. data/.github/ISSUE_TEMPLATE/DESIGN_PROPOSAL.md +0 -40
  8. data/.github/ISSUE_TEMPLATE/ENHANCEMENT_REQUEST.md +0 -20
  9. data/.github/ISSUE_TEMPLATE/RULE_REQUEST.md +0 -20
  10. data/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  11. data/.gitignore +0 -13
  12. data/.pre-commit-hooks.yaml +0 -6
  13. data/.travis.yml +0 -12
  14. data/CHANGELOG.md +0 -218
  15. data/CONTRIBUTING.md +0 -76
  16. data/MAINTAINERS.md +0 -21
  17. data/README.md +0 -87
  18. data/Rakefile +0 -8
  19. data/docs/RULES.md +0 -1089
  20. data/docs/configuration.md +0 -99
  21. data/docs/creating_rules.md +0 -90
  22. data/docs/creating_styles.md +0 -47
  23. data/docs/rolling_a_release.md +0 -51
  24. data/example/markdown_spec.md +0 -897
  25. data/test/fixtures/default_mdlrc +0 -1
  26. data/test/fixtures/dir_with_md_and_markdown/bar.markdown +0 -1
  27. data/test/fixtures/dir_with_md_and_markdown/foo.md +0 -1
  28. data/test/fixtures/front_matter/jekyll_post.md +0 -16
  29. data/test/fixtures/front_matter/jekyll_post_2.md +0 -17
  30. data/test/fixtures/mdlrc_disable_rules +0 -1
  31. data/test/fixtures/mdlrc_disable_tags +0 -1
  32. data/test/fixtures/mdlrc_enable_rules +0 -1
  33. data/test/fixtures/mdlrc_enable_tags +0 -1
  34. data/test/fixtures/my_ruleset.rb +0 -6
  35. data/test/rule_tests/alternate_top_level_header.md +0 -3
  36. data/test/rule_tests/alternate_top_level_header_style.rb +0 -4
  37. data/test/rule_tests/atx_closed_header_spacing.md +0 -17
  38. data/test/rule_tests/atx_header_spacing.md +0 -5
  39. data/test/rule_tests/blockquote_blank_lines.md +0 -31
  40. data/test/rule_tests/blockquote_spaces.md +0 -23
  41. data/test/rule_tests/bulleted_list_2_space_indent.md +0 -6
  42. data/test/rule_tests/bulleted_list_2_space_indent_style.rb +0 -3
  43. data/test/rule_tests/bulleted_list_4_space_indent.md +0 -3
  44. data/test/rule_tests/bulleted_list_not_at_beginning_of_line.md +0 -14
  45. data/test/rule_tests/code_block_consistency.md +0 -11
  46. data/test/rule_tests/code_block_consistency_style.rb +0 -1
  47. data/test/rule_tests/code_block_dollar.md +0 -33
  48. data/test/rule_tests/code_block_dollar_fence.md +0 -29
  49. data/test/rule_tests/code_block_fenced.md +0 -17
  50. data/test/rule_tests/code_block_fenced_style.rb +0 -1
  51. data/test/rule_tests/code_block_indented.md +0 -17
  52. data/test/rule_tests/code_block_indented_style.rb +0 -1
  53. data/test/rule_tests/consecutive_blank_lines.md +0 -11
  54. data/test/rule_tests/consistent_bullet_styles_asterisk.md +0 -3
  55. data/test/rule_tests/consistent_bullet_styles_dash.md +0 -3
  56. data/test/rule_tests/consistent_bullet_styles_plus.md +0 -3
  57. data/test/rule_tests/default_test_style.rb +0 -5
  58. data/test/rule_tests/emphasis_instead_of_headers.md +0 -42
  59. data/test/rule_tests/empty_doc.md +0 -0
  60. data/test/rule_tests/fenced_code_blocks.md +0 -27
  61. data/test/rule_tests/fenced_code_with_nesting.md +0 -73
  62. data/test/rule_tests/fenced_code_without_blank_lines.md +0 -42
  63. data/test/rule_tests/fenced_code_without_blank_lines_style.rb +0 -3
  64. data/test/rule_tests/first_header_bad_atx.md +0 -1
  65. data/test/rule_tests/first_header_bad_setext.md +0 -2
  66. data/test/rule_tests/first_header_good_atx.md +0 -1
  67. data/test/rule_tests/first_header_good_setext.md +0 -2
  68. data/test/rule_tests/first_line_top_level_header_atx.md +0 -3
  69. data/test/rule_tests/first_line_top_level_header_atx_style.rb +0 -2
  70. data/test/rule_tests/first_line_top_level_header_setext.md +0 -4
  71. data/test/rule_tests/first_line_top_level_header_setext_style.rb +0 -2
  72. data/test/rule_tests/fix_102_extra_nodes_in_link_text.md +0 -8
  73. data/test/rule_tests/header_duplicate_content.md +0 -11
  74. data/test/rule_tests/header_duplicate_content_different_nesting.md +0 -11
  75. data/test/rule_tests/header_duplicate_content_different_nesting_style.rb +0 -1
  76. data/test/rule_tests/header_duplicate_content_no_different_nesting.md +0 -13
  77. data/test/rule_tests/header_multiple_toplevel.md +0 -3
  78. data/test/rule_tests/header_mutliple_h1_no_toplevel.md +0 -5
  79. data/test/rule_tests/header_trailing_punctuation.md +0 -11
  80. data/test/rule_tests/header_trailing_punctuation_customized.md +0 -14
  81. data/test/rule_tests/header_trailing_punctuation_customized_style.rb +0 -2
  82. data/test/rule_tests/headers_bad.md +0 -7
  83. data/test/rule_tests/headers_good.md +0 -5
  84. data/test/rule_tests/headers_good_setext_with_atx.md +0 -7
  85. data/test/rule_tests/headers_good_setext_with_atx_style.rb +0 -2
  86. data/test/rule_tests/headers_good_with_issue_numbers.md +0 -12
  87. data/test/rule_tests/headers_surrounding_space_atx.md +0 -12
  88. data/test/rule_tests/headers_surrounding_space_setext.md +0 -15
  89. data/test/rule_tests/headers_with_spaces_at_the_beginning.md +0 -20
  90. data/test/rule_tests/hr_style_dashes.md +0 -22
  91. data/test/rule_tests/hr_style_dashes_style.rb +0 -3
  92. data/test/rule_tests/hr_style_inconsistent.md +0 -22
  93. data/test/rule_tests/hr_style_long.md +0 -22
  94. data/test/rule_tests/hr_style_long_style.rb +0 -3
  95. data/test/rule_tests/hr_style_stars.md +0 -22
  96. data/test/rule_tests/hr_style_stars_style.rb +0 -3
  97. data/test/rule_tests/inconsistent_bullet_indent_same_level.md +0 -4
  98. data/test/rule_tests/inconsistent_bullet_styles_asterisk.md +0 -3
  99. data/test/rule_tests/inconsistent_bullet_styles_dash.md +0 -3
  100. data/test/rule_tests/inconsistent_bullet_styles_plus.md +0 -3
  101. data/test/rule_tests/incorrect_bullet_style_asterisk.md +0 -3
  102. data/test/rule_tests/incorrect_bullet_style_asterisk_style.rb +0 -3
  103. data/test/rule_tests/incorrect_bullet_style_dash.md +0 -3
  104. data/test/rule_tests/incorrect_bullet_style_dash_style.rb +0 -3
  105. data/test/rule_tests/incorrect_bullet_style_plus.md +0 -3
  106. data/test/rule_tests/incorrect_bullet_style_plus_style.rb +0 -3
  107. data/test/rule_tests/incorrect_header_atx.md +0 -6
  108. data/test/rule_tests/incorrect_header_atx_closed.md +0 -6
  109. data/test/rule_tests/incorrect_header_atx_closed_style.rb +0 -2
  110. data/test/rule_tests/incorrect_header_atx_style.rb +0 -2
  111. data/test/rule_tests/incorrect_header_setext.md +0 -6
  112. data/test/rule_tests/incorrect_header_setext_style.rb +0 -2
  113. data/test/rule_tests/inline_html.md +0 -13
  114. data/test/rule_tests/links.md +0 -9
  115. data/test/rule_tests/lists_without_blank_lines.md +0 -75
  116. data/test/rule_tests/long_lines.md +0 -3
  117. data/test/rule_tests/long_lines_100.md +0 -7
  118. data/test/rule_tests/long_lines_100_style.rb +0 -3
  119. data/test/rule_tests/long_lines_code.md +0 -45
  120. data/test/rule_tests/long_lines_code_style.rb +0 -3
  121. data/test/rule_tests/mixed_header_types_atx.md +0 -6
  122. data/test/rule_tests/mixed_header_types_atx_closed.md +0 -6
  123. data/test/rule_tests/mixed_header_types_setext.md +0 -6
  124. data/test/rule_tests/no_first_line_header.md +0 -1
  125. data/test/rule_tests/no_first_line_header_style.rb +0 -1
  126. data/test/rule_tests/no_first_line_top_level_header.md +0 -1
  127. data/test/rule_tests/no_first_line_top_level_header_style.rb +0 -1
  128. data/test/rule_tests/ordered_list_item_prefix.md +0 -13
  129. data/test/rule_tests/ordered_list_item_prefix_ordered.md +0 -13
  130. data/test/rule_tests/ordered_list_item_prefix_ordered_style.rb +0 -3
  131. data/test/rule_tests/reversed_link.md +0 -7
  132. data/test/rule_tests/spaces_after_list_marker.md +0 -74
  133. data/test/rule_tests/spaces_after_list_marker_style.rb +0 -5
  134. data/test/rule_tests/spaces_inside_codespan_elements.md +0 -7
  135. data/test/rule_tests/spaces_inside_emphasis_markers.md +0 -35
  136. data/test/rule_tests/spaces_inside_link_text.md +0 -28
  137. data/test/rule_tests/trailing_spaces_br.md +0 -4
  138. data/test/rule_tests/trailing_spaces_br_style.rb +0 -3
  139. data/test/rule_tests/whitespace_issues.md +0 -3
  140. data/test/setup_tests.rb +0 -5
  141. data/test/test_cli.rb +0 -301
  142. data/test/test_ruledocs.rb +0 -52
  143. data/test/test_rules.rb +0 -58
  144. data/tools/README.md +0 -3
  145. data/tools/docker/Dockerfile +0 -13
  146. data/tools/docker/README.md +0 -19
  147. data/tools/test_location.rb +0 -20
  148. data/tools/view_markdown.rb +0 -11
@@ -1,301 +0,0 @@
1
- require_relative 'setup_tests'
2
- require 'open3'
3
- require 'set'
4
- require 'fileutils'
5
-
6
- class TestCli < Minitest::Test
7
- def test_help_text
8
- result = run_cli("--help")
9
- assert_match(/Usage: \S+ \[options\]/, result[:stdout])
10
- assert_equal(0, result[:status])
11
- end
12
-
13
- def test_default_ruleset_loading
14
- result = run_cli("-l")
15
- assert_ran_ok(result)
16
- assert_rules_enabled(result, ["MD001"])
17
- end
18
-
19
- def test_show_alias_rule_list
20
- result = run_cli("-al")
21
- assert_ran_ok(result)
22
- assert_rules_enabled(result, ["header-increment"])
23
- end
24
-
25
- def test_show_alias_processing_file
26
- result = run_cli_with_input("-a -r MD002", "## header2")
27
- assert_equal(1, result[:status])
28
- assert_equal("", result[:stderr])
29
- assert_match(/^\(stdin\):1: first-header-h1/, result[:stdout])
30
- end
31
-
32
- def test_running_on_unicode_input
33
- result = run_cli_with_file_and_ascii_env("## header2 🚀")
34
- assert_equal(1, result[:status])
35
- assert_equal("", result[:stderr])
36
- assert_match(/MD002 First header should be a top level header/,
37
- result[:stdout])
38
- end
39
-
40
- def test_skipping_default_ruleset_loading
41
- result = run_cli("-ld")
42
- assert_rules_enabled(result, [], true)
43
- end
44
-
45
- def test_custom_ruleset_loading
46
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
47
- result = run_cli("-ldu #{my_ruleset}")
48
- assert_rules_enabled(result, ["MY001"], true)
49
- assert_ran_ok(result)
50
- end
51
-
52
- def test_show_alias_rule_without_alias
53
- # Tests that when -a is given, but the rule doesn't have an alias, it
54
- # prints the rule ID instead.
55
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
56
- result = run_cli("-ladu #{my_ruleset}")
57
- assert_rules_enabled(result, ["MY001"], true)
58
- assert_ran_ok(result)
59
- end
60
-
61
- def test_custom_ruleset_processing_success
62
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
63
- result = run_cli_with_input("-du #{my_ruleset}", "Hello World")
64
- assert_equal("", result[:stdout])
65
- assert_ran_ok(result)
66
- end
67
-
68
- def test_custom_ruleset_processing_failure
69
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
70
- result = run_cli_with_input("-du #{my_ruleset}", "Goodbye world")
71
- assert_equal(1, result[:status])
72
- assert_match(/^\(stdin\):1: MY001/, result[:stdout])
73
- assert_equal("", result[:stderr])
74
- end
75
-
76
- def test_custom_ruleset_processing_failure_with_show_alias
77
- # The custom rule doesn't have an alias, so the output should be identical
78
- # to that without show_alias enabled.
79
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
80
- result = run_cli_with_input("-dau #{my_ruleset}", "Goodbye world")
81
- assert_equal(1, result[:status])
82
- assert_match(/^\(stdin\):1: MY001/, result[:stdout])
83
- assert_equal("", result[:stderr])
84
- end
85
-
86
- def test_custom_ruleset_loading_with_default
87
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
88
- result = run_cli("-lu #{my_ruleset}")
89
- assert_rules_enabled(result, ["MD001", "MY001"])
90
- assert_ran_ok(result)
91
- end
92
-
93
- def test_rule_inclusion_cli
94
- result = run_cli("-r MD001 -l")
95
- assert_rules_enabled(result, ["MD001"], true)
96
- assert_ran_ok(result)
97
- end
98
-
99
- def test_rule_exclusion_cli
100
- result = run_cli("-r ~MD001 -l")
101
- assert_rules_disabled(result, ["MD001"])
102
- assert_ran_ok(result)
103
- end
104
-
105
- def test_rule_inclusion_with_exclusion_cli
106
- result = run_cli("-r ~MD001,MD039 -l")
107
- assert_rules_enabled(result, ["MD039"], true)
108
- assert_ran_ok(result)
109
- end
110
-
111
- def test_tag_inclusion_cli
112
- result = run_cli("-t headers -l")
113
- assert_rules_enabled(result, ["MD001", "MD002", "MD003"])
114
- assert_rules_disabled(result, ["MD004", "MD005", "MD006"])
115
- assert_ran_ok(result)
116
- end
117
-
118
- def test_tag_exclusion_cli
119
- result = run_cli("-t ~headers -l")
120
- assert_ran_ok(result)
121
- assert_rules_disabled(result, ["MD001", "MD002", "MD003"])
122
- assert_rules_enabled(result, ["MD004", "MD005", "MD006"])
123
- end
124
-
125
- def test_rule_inclusion_config
126
- result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_rules")
127
- assert_ran_ok(result)
128
- assert_rules_enabled(result, ["MD001", "MD002"], true)
129
- end
130
-
131
- def test_rule_exclusion_config
132
- result = run_cli_with_custom_rc_file("-l", "mdlrc_disable_rules")
133
- assert_correctly_disabled(result)
134
- end
135
-
136
- def test_mdlrc_loading_from_current_dir_by_default
137
- inside_tmp_dir do |dir|
138
- with_mdlrc("mdlrc_disable_rules", dir) do
139
- result = run_cli_without_rc_flag("-l")
140
- assert_correctly_disabled(result)
141
- end
142
- end
143
- end
144
-
145
- def test_mdlrc_loading_ascends_until_it_finds_an_rc_file
146
- Dir.mktmpdir do |parent_dir|
147
- inside_tmp_dir(parent_dir) do
148
- with_mdlrc("mdlrc_disable_rules", parent_dir) do
149
- result = run_cli_without_rc_flag("-l")
150
- assert_correctly_disabled(result)
151
- end
152
- end
153
- end
154
- end
155
-
156
- def test_tag_inclusion_config
157
- result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_tags")
158
- assert_ran_ok(result)
159
- assert_rules_enabled(result, ["MD001", "MD002", "MD009", "MD010"])
160
- assert_rules_disabled(result, ["MD004", "MD005"])
161
- end
162
-
163
- def test_tag_exclusion_config
164
- result = run_cli_with_custom_rc_file("-l", "mdlrc_disable_tags")
165
- assert_ran_ok(result)
166
- assert_rules_enabled(result, ["MD004", "MD030", "MD032"])
167
- assert_rules_disabled(result, ["MD001", "MD005"])
168
- end
169
-
170
- def test_rule_inclusion_alias_cli
171
- result = run_cli("-l -r header-increment")
172
- assert_ran_ok(result)
173
- assert_rules_enabled(result, ["MD001"], true)
174
- end
175
-
176
- def test_rule_exclusion_alias_cli
177
- result = run_cli("-l -r ~header-increment")
178
- assert_ran_ok(result)
179
- assert_rules_disabled(result, ["MD001"])
180
- assert_rules_enabled(result, ["MD002"])
181
- end
182
-
183
- def test_directory_scanning
184
- path = File.expand_path("./fixtures/dir_with_md_and_markdown", File.dirname(__FILE__))
185
- result = run_cli("#{path}")
186
- lines_output = result[:stdout].lines
187
- interested_lines = lines_output[0..(lines_output.count - 3)]
188
- files_with_issues = interested_lines.map { |l| l.split(":")[0] }.sort
189
- assert_equal(files_with_issues, ["#{path}/bar.markdown", "#{path}/foo.md"])
190
- end
191
-
192
- def test_ignore_front_matter
193
- path = File.expand_path("./fixtures/front_matter", File.dirname(__FILE__))
194
- result = run_cli("-i -r MD001,MD041,MD034 #{path}")
195
-
196
- expected = \
197
- "#{path}/jekyll_post.md:16: MD001 Header levels should only increment by one level at a time\n"\
198
- "#{path}/jekyll_post_2.md:16: MD001 Header levels should only increment by one level at a time\n"\
199
- "\nA detailed description of the rules is available at https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md\n"
200
-
201
- assert_equal(result[:stdout], expected)
202
- end
203
-
204
- private
205
-
206
- def run_cli_with_input(args, stdin)
207
- run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", stdin)
208
- end
209
-
210
- def run_cli_without_rc_flag(args)
211
- run_cmd("#{mdl_script} #{args}", "")
212
- end
213
-
214
- def run_cli(args)
215
- run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", "")
216
- end
217
-
218
- def run_cli_with_custom_rc_file(args, filename)
219
- run_cmd("#{mdl_script} -c #{fixture_rc(filename)} #{args}", "")
220
- end
221
-
222
- def run_cli_with_file_and_ascii_env(content)
223
- Tempfile.create('foo') do |f|
224
- f.write(content)
225
- f.close
226
-
227
- run_cmd("ruby -E ASCII #{mdl_script} -c #{default_rc_file} #{f.path}", "")
228
- end
229
- end
230
-
231
- def run_cmd(command, stdin)
232
- result = {}
233
- result[:stdout], result[:stderr], result[:status] = \
234
- Open3.capture3("bundle", "exec", *command.split, :stdin_data => stdin)
235
- result[:status] = result[:status].exitstatus
236
- result
237
- end
238
-
239
- def mdl_script
240
- File.expand_path("../../bin/mdl", __FILE__)
241
- end
242
-
243
- def fixture_rc(filename)
244
- File.expand_path("../fixtures/#{filename}", __FILE__)
245
- end
246
-
247
- def default_rc_file
248
- fixture_rc("default_mdlrc")
249
- end
250
-
251
- def inside_tmp_dir(base_dir = Dir.tmpdir)
252
- Dir.mktmpdir(nil, base_dir) do |dir|
253
- Dir.chdir(dir) { yield(dir) }
254
- end
255
- end
256
-
257
- def assert_rules_enabled(result, rules, only_these_rules=false)
258
- # Asserts that the given rules are enabled given the output of mdl -l
259
- # If only_these_rules is set, then it asserts that the given rules and no
260
- # others are enabled.
261
- lines = result[:stdout].split("\n")
262
- assert_equal("Enabled rules:", lines.first)
263
- lines.shift
264
- rules = rules.to_set
265
- enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
266
- if only_these_rules
267
- assert_equal(rules, enabled_rules)
268
- else
269
- assert_equal(Set.new, rules - enabled_rules)
270
- end
271
- end
272
-
273
- def assert_rules_disabled(result, rules)
274
- # Asserts that the given rules are _not_ enabled given the output of mdl -l
275
- lines = result[:stdout].split("\n")
276
- assert_equal("Enabled rules:", lines.first)
277
- lines.shift
278
- rules = rules.to_set
279
- enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
280
- assert_equal(Set.new, rules & enabled_rules)
281
- end
282
-
283
- def assert_ran_ok(result)
284
- assert_equal(0, result[:status])
285
- assert_equal("", result[:stderr])
286
- end
287
-
288
- def assert_correctly_disabled(result)
289
- assert_ran_ok(result)
290
- assert_rules_disabled(result, ["MD001", "MD002"])
291
- assert_rules_enabled(result, ["MD003", "MD004"])
292
- end
293
-
294
- def with_mdlrc(filename, dest_dir = Dir.pwd)
295
- rc_path = File.join(dest_dir, ".mdlrc")
296
- FileUtils.cp(fixture_rc(filename), rc_path)
297
- yield
298
- ensure
299
- File.delete(rc_path)
300
- end
301
- end
@@ -1,52 +0,0 @@
1
- require_relative 'setup_tests'
2
-
3
- # Ensures there is documentation for every rule, and that the
4
- # descriptions/tags/etc in the rule match those in the documentation
5
- class TestRuledocs < Minitest::Test
6
- @@ruleset = MarkdownLint::RuleSet.new
7
- @@ruleset.load_default
8
- @@rules = @@ruleset.rules
9
-
10
- def setup
11
- @ruledocs = load_ruledocs
12
- end
13
-
14
- def load_ruledocs
15
- rules = Hash.new({}) # Default to {} if no docs for the rule
16
- curr_rule = nil
17
- rules_file = File.expand_path('../../docs/RULES.md', __FILE__)
18
- File.read(rules_file).split("\n").each do |l|
19
- if l.match(/^## (MD\d+) - (.*)$/)
20
- rules[$1] = { :description => $2, :params => {} }
21
- curr_rule = $1
22
- elsif l.match(/^Tags: (.*)$/)
23
- rules[curr_rule][:tags] = $1.split(',').map{|i| i.strip.to_sym}
24
- elsif l.match(/^Aliases: (.*)$/)
25
- rules[curr_rule][:aliases] = $1.split(',').map{|i| i.strip}
26
- elsif l.match(/^Parameters: (.*)(\(.*\)?)$/)
27
- rules[curr_rule][:params] = $1.split(',').map{|i| i.strip.to_sym}
28
- end
29
- end
30
- rules
31
- end
32
-
33
- @@rules.each do |id, r|
34
- define_method("test_ruledoc_description_#{id}") do
35
- assert_equal r.description, @ruledocs[id][:description]
36
- end
37
- define_method("test_ruledoc_tags_#{id}") do
38
- assert_equal r.tags, @ruledocs[id][:tags]
39
- end
40
- define_method("test_ruledoc_aliases_#{id}") do
41
- assert_equal r.aliases, @ruledocs[id][:aliases]
42
- end
43
- define_method("test_ruledoc_params_#{id}") do
44
- assert_equal r.params.keys.sort, (@ruledocs[id][:params] || []).sort
45
- end
46
- end
47
-
48
- def test_ruledoc_for_every_rule
49
- # (and vice versa)
50
- assert_equal @@rules.keys, @ruledocs.keys
51
- end
52
- end
@@ -1,58 +0,0 @@
1
- require_relative 'setup_tests'
2
-
3
- class TestRules < Minitest::Test
4
-
5
- def get_expected_errors(lines)
6
- # Looks for lines tagged with {MD123} to signify that a rule is expected to
7
- # fire for this line. It also looks for lines tagged with {MD123:1} to
8
- # signify that a rule is expected to fire on another line (the line number
9
- # after the colon).
10
- expected_errors = {}
11
- re = /\{(MD\d+)(?::(\d+))?\}/
12
- lines.each_with_index do |line, num|
13
- m = re.match(line)
14
- while m
15
- expected_errors[m[1]] ||= []
16
- if m[2]
17
- expected_line = m[2].to_i
18
- else
19
- expected_line = num + 1 # 1 indexed lines
20
- end
21
- expected_errors[m[1]] << expected_line
22
- m = re.match(line, m.end(0))
23
- end
24
- end
25
- expected_errors
26
- end
27
-
28
- def do_lint(filename)
29
- # Check for a test_case_style.rb style file for individual tests
30
- style_file = filename.sub(/.md$/, '_style.rb')
31
- if ! File.exist?(style_file)
32
- style_file = "#{File.dirname(filename)}/default_test_style.rb"
33
- end
34
-
35
- ruleset = MarkdownLint::RuleSet.new
36
- ruleset.load_default
37
- rules = ruleset.rules
38
- style = MarkdownLint::Style.load(style_file, rules)
39
- rules.select! {|r| style.rules.include?(r)}
40
-
41
- doc = MarkdownLint::Doc.new(File.read(filename))
42
- expected_errors = get_expected_errors(doc.lines)
43
- actual_errors = {}
44
- rules.sort.each do |id, rule|
45
- error_lines = rule.check.call(doc)
46
- if error_lines and not error_lines.empty?
47
- actual_errors[id] = error_lines
48
- end
49
- end
50
- assert_equal expected_errors, actual_errors
51
- end
52
-
53
- Dir[File.expand_path("../rule_tests/*.md", __FILE__)].each do |filename|
54
- define_method("test_#{File.basename(filename, '.md')}") do
55
- do_lint(filename)
56
- end
57
- end
58
- end
@@ -1,3 +0,0 @@
1
- This directory contains a few scripts that, while not part of markdownlint
2
- directly, can be useful for inspecting markdown documents and debugging
3
- issues.
@@ -1,13 +0,0 @@
1
- FROM alpine:3.4
2
-
3
- MAINTAINER Mark Harrison <mark@mivok.net>
4
-
5
- RUN apk update && \
6
- apk add --no-cache ruby && \
7
- gem install --no-rdoc --no-ri mdl && \
8
- mkdir /data
9
-
10
- WORKDIR /data
11
-
12
- ENTRYPOINT ["mdl"]
13
- CMD ["--help"]
@@ -1,19 +0,0 @@
1
- # Docker container for markdownlint
2
-
3
- ## Using the docker image
4
-
5
- To check a single file:
6
-
7
- docker run --rm -v ${PWD}:/data mivok/markdownlint myfile.md
8
-
9
- Or, to check all files in a directory:
10
-
11
- docker run --rm -v ${PWD}:/data mivok/markdownlint .
12
-
13
- ## Building from a docker file
14
-
15
- The following will tag and upload a new release. Replace X.Y.Z as appropriate.
16
-
17
- docker build -t mivok/markdownlint:latest -t mivok/markdownlint:X.Y.Z .
18
- docker push mivok/markdownlint:latest
19
- docker push mivok/markdownling:X.Y.Z