fdlint 0.2.0.pre → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +36 -15
  4. data/Rakefile +1 -1
  5. data/bin/fdlint +30 -9
  6. data/lib/fdlint/cli.rb +62 -10
  7. data/lib/fdlint/helper/logger.rb +1 -1
  8. data/lib/fdlint/log_entry.rb +14 -0
  9. data/lib/fdlint/parser/html/html_parser.rb +10 -12
  10. data/lib/fdlint/parser/html/query.rb +64 -50
  11. data/lib/fdlint/parser/html/struct.rb +20 -3
  12. data/lib/fdlint/parser/parser_visitable.rb +11 -5
  13. data/lib/fdlint/printer/base_printer.rb +6 -0
  14. data/lib/fdlint/printer/console_printer.rb +15 -23
  15. data/lib/fdlint/rule.rb +4 -4
  16. data/lib/fdlint/support/core/object.rb +6 -0
  17. data/lib/fdlint/support/core_ext.rb +1 -0
  18. data/lib/fdlint/validator.rb +60 -8
  19. data/lib/fdlint/version.rb +1 -1
  20. data/lib/hook/git_pre_commit +18 -0
  21. data/rules.d/css.rule.rb +1 -1
  22. data/rules.d/filename.rule.rb +3 -1
  23. data/rules.d/html.rule.rb +45 -32
  24. data/rules.d/js.rule.rb +2 -2
  25. data/test/all_tests.rb +28 -42
  26. data/test/css/mac_line_end_support_test.rb +10 -12
  27. data/test/css/parser_test.rb +4 -5
  28. data/test/css/rule/check_encoding_test.rb +7 -8
  29. data/test/css/rule/check_list_rule_test.rb +85 -102
  30. data/test/css/rule/file_name_test.rb +18 -39
  31. data/test/default_test.rb +1 -14
  32. data/test/fixtures/css/ad.css +0 -0
  33. data/test/fixtures/css/adver/test.css +0 -0
  34. data/test/fixtures/css/camelCase.css +0 -0
  35. data/test/fixtures/css/min/ad.css +0 -0
  36. data/test/fixtures/css/min/ad.min.css +0 -0
  37. data/test/fixtures/html/mixed_log_levels.html +1 -0
  38. data/test/fixtures/html/mixed_types.html +3 -0
  39. data/test/helper.rb +116 -16
  40. data/test/html/mixed_type_test.rb +14 -20
  41. data/test/html/parser/parse_comment_test.rb +4 -4
  42. data/test/html/parser/parse_dtd_test.rb +7 -7
  43. data/test/html/parser/parse_script_tag_test.rb +21 -14
  44. data/test/html/parser/parse_with_auto_close_tag_test.rb +12 -10
  45. data/test/html/parser/parse_with_diff_case_test.rb +8 -9
  46. data/test/html/parser/parse_with_emtpy_test.rb +5 -3
  47. data/test/html/parser/parse_with_multi_children_test.rb +4 -4
  48. data/test/html/parser/parse_with_multi_line_test.rb +5 -5
  49. data/test/html/parser/parse_with_prop_test.rb +10 -10
  50. data/test/html/parser/parse_with_script_tag_test.rb +4 -4
  51. data/test/html/parser/parse_with_selfclosing_test.rb +11 -11
  52. data/test/html/parser/parse_with_simple_tag_test.rb +7 -7
  53. data/test/html/parser/parse_with_simple_tree_test.rb +6 -6
  54. data/test/html/parser/parse_with_style_tag_test.rb +4 -4
  55. data/test/html/parser/parse_with_text_test.rb +7 -7
  56. data/test/html/parser_test.rb +19 -19
  57. data/test/html/query_test.rb +18 -18
  58. data/test/html/rule/check_block_level_element_test.rb +22 -24
  59. data/test/html/rule/check_button_test.rb +9 -9
  60. data/test/html/rule/check_css_in_head_test.rb +11 -32
  61. data/test/html/rule/check_dtd_test.rb +15 -11
  62. data/test/html/rule/check_form_element_name_test.rb +10 -9
  63. data/test/html/rule/check_head_contain_meta_and_title_test.rb +28 -34
  64. data/test/html/rule/check_hyperlink_with_target_test.rb +23 -17
  65. data/test/html/rule/check_hyperlink_with_title_test.rb +13 -20
  66. data/test/html/rule/check_id_n_class_downcase_test.rb +8 -19
  67. data/test/html/rule/check_img_with_alt_prop_test.rb +11 -12
  68. data/test/html/rule/check_no_import_css_test.rb +20 -20
  69. data/test/html/rule/check_prop_have_value_test.rb +9 -13
  70. data/test/html/rule/check_prop_seperator_test.rb +9 -13
  71. data/test/html/rule/check_style_prop_test.rb +7 -12
  72. data/test/html/rule/check_tag_closed_test.rb +15 -40
  73. data/test/html/rule/check_tag_downcase_test.rb +31 -28
  74. data/test/html/rule/check_unescape_char_test.rb +17 -17
  75. data/test/html/rule/check_unique_import_test.rb +15 -33
  76. data/test/html/rule_test.rb +2 -6
  77. data/test/js/expr/expr.rb +1 -1
  78. data/test/js/expr/left_hand.rb +1 -1
  79. data/test/js/expr/operate.rb +1 -1
  80. data/test/js/expr/primary.rb +1 -1
  81. data/test/js/parser_test.rb +3 -6
  82. data/test/js/rule/alert_check_test.rb +5 -19
  83. data/test/js/rule/base_test.rb +5 -19
  84. data/test/js/rule/jq_check_test.rb +26 -58
  85. data/test/js/rule/nest_try_catch_test.rb +26 -43
  86. data/test/js/rule/new_object_and_new_array_test.rb +5 -21
  87. data/test/js/rule/no_eval_test.rb +3 -19
  88. data/test/js/rule/no_global_test.rb +34 -73
  89. data/test/js/rule/private_method_check_test.rb +14 -43
  90. data/test/js/rule/semicolon_test.rb +18 -47
  91. data/test/js/rule/stat_if_with_brace_test.rb +30 -53
  92. data/test/js/rule/stat_if_with_muti_else_test.rb +36 -53
  93. data/test/js/rule/use_strict_equal_test.rb +16 -29
  94. data/test/js/rule_test.rb +2 -4
  95. data/test/js/stat/if.rb +1 -1
  96. data/test/js/stat/iter.rb +1 -1
  97. data/test/js/stat/stat.rb +1 -1
  98. data/test/js/stat/switch.rb +1 -1
  99. data/test/js/stat/try.rb +1 -1
  100. data/test/js/stat/var.rb +1 -1
  101. data/test/parser_visitable_test.rb +14 -36
  102. data/test/position_info_test.rb +4 -5
  103. data/test/runner/log_level_test.rb +30 -25
  104. metadata +11 -14
  105. data/lib/fdlint/file_validator.rb +0 -38
  106. data/lib/fdlint/parser/html/rule/check_tag_rule.rb +0 -80
  107. data/test/css/rule/compression_test.rb +0 -53
  108. data/test/html/rule/check_class_count_test.rb +0 -36
  109. data/test/html/rule/check_html_template_test.rb +0 -103
  110. data/test/js/rule/all_test.rb +0 -23
  111. data/test/js/rule/file_checker_test.rb +0 -131
  112. data/test/rule_dsl/dsl_basic_test.rb +0 -91
  113. data/test/rule_dsl/importing_test.rb +0 -48
  114. data/test/test_helper.rb +0 -9
@@ -1,103 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
-
6
- module XRayTest
7
- module HTML
8
- module Rule
9
-
10
- class CheckHTMLTemplateTest < Test::Unit::TestCase
11
-
12
- include XRay::HTML
13
-
14
- def setup
15
- @rule = XRay::HTML::Rule::CheckTagRule.new
16
- @head = %Q(<head>
17
- <meta charset="gbk"/>
18
- <title>阿里巴巴</title>
19
- <mea name="description" content="阿里巴巴批发大市场"/>
20
- <meta name="keywords" content="阿里巴巴,采购批发,1688,行业门户,网上贸易,b2b,电子商务"/>
21
- <link href="产品线merge.css" rel="stylesheet"/>
22
- <link href="页面merge.css" rel="stylesheet"/>
23
- <script src="产品线merge.js"></script>
24
- <base target="_blank"/>
25
- </head>)
26
- @doc = %Q(<div id="doc">
27
- <div id="alibar">alibar</div>
28
- <div id="header" class="w952">header</div>
29
- <div id="content" class="w952">content</div>
30
- <div id="footer">footer</div>
31
- </div>)
32
- @body = %Q(<body>
33
- #{@doc}
34
- <script src="页面merge.js"></script>
35
- </body>)
36
- @html = %Q(<html lang="zh-CN">
37
- #{@head}
38
- #{@body}
39
- </html>)
40
- end
41
-
42
- def test_check_right_tag
43
- tag = parse(@html)
44
- assert_equal [], @rule.check_html_tag(tag)
45
- end
46
-
47
- def test_check_missing_desc
48
- tag = parse(@head.sub(/<meta name="description".*?\/>/m, ''))
49
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
50
- end
51
-
52
- def test_check_missing_keywords
53
- tag = parse(@head.sub(/<meta name="keywords".*?\/>/m, ''))
54
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
55
- end
56
-
57
- def test_check_missing_doc
58
- tag = parse(@body.sub(/<div id="doc"/m, '<div id="_doc"'))
59
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
60
- end
61
-
62
- def test_check_missing_alibar
63
- tag = parse(@body.sub(/<div id="alibar"/m, '<div id="_alibar"'))
64
- assert_equal [], @rule.check_html_tag(tag)
65
-
66
- tag = parse(@doc.sub(/<div id="alibar"/m, '<div id="_alibar"'))
67
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
68
- end
69
-
70
- def test_check_missing_content
71
- tag = parse(@body.sub(/<div id="content"/m, '<div id="_content"'))
72
- assert_equal [], @rule.check_html_tag(tag)
73
-
74
- tag = parse(@doc.sub(/<div id="content"/m, '<div id="_content"'))
75
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
76
- end
77
-
78
- def test_check_missing_footer
79
- tag = parse(@body.sub(/<div id="footer"/m, '<div id="_footer"'))
80
- assert_equal [], @rule.check_html_tag(tag)
81
-
82
- tag = parse(@doc.sub(/<div id="footer"/m, '<div id="_footer"'))
83
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
84
- end
85
-
86
- def test_check_missing_header
87
- tag = parse(@body.sub(/<div id="header"/m, '<div id="_header"'))
88
- assert_equal [], @rule.check_html_tag(tag)
89
-
90
- tag = parse(@doc.sub(/<div id="header"/m, '<div id="_header"'))
91
- assert_equal [["新页面按库中的HTML基本结构模板书写基本页面结构", :warn]], @rule.check_html_tag(tag)
92
- end
93
-
94
- private
95
- def parse(src)
96
- XRay::HTML::Parser.parse(src)
97
- end
98
-
99
- end
100
-
101
- end
102
- end
103
- end
@@ -1,23 +0,0 @@
1
- require_relative '../../helper'
2
-
3
- require 'js/rule/all'
4
-
5
- module XRayTest
6
- module JS
7
- module Rule
8
-
9
- class AllTest < Test::Unit::TestCase
10
-
11
- def test_initialize
12
- all = XRay::JS::Rule::All.new
13
-
14
- assert all.respond_to?(:each)
15
- assert all.size > 0
16
- assert all.size == all.rules.size
17
- end
18
-
19
- end
20
-
21
- end
22
- end
23
- end
@@ -1,131 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative 'base_test'
4
-
5
- require 'js/rule/file_checker'
6
-
7
- module XRayTest
8
- module JS
9
- module Rule
10
-
11
- class FileCheckerTest < BaseTest
12
-
13
- def setup
14
- @checker = XRay::JS::Rule::FileChecker.new
15
- end
16
-
17
- def test_merge_file?
18
- assert @checker.merge_file?('abc-merge.js')
19
- assert @checker.merge_file?('abc-merge-12345.js')
20
- assert @checker.merge_file?('abc-merge12345.js')
21
-
22
- assert !@checker.merge_file?('abc-merge.css')
23
- assert !@checker.merge_file?('abc-merge.jss')
24
- assert !@checker.merge_file?('-merge.js')
25
- assert !@checker.merge_file?('abc-mergeabc.js')
26
- assert !@checker.merge_file?('abc-merge-.js')
27
- end
28
-
29
- def test_min_file?
30
- assert @checker.min_file?('abc-min.js')
31
-
32
- assert !@checker.min_file?('abc-min.jss')
33
- assert !@checker.min_file?('-min.js')
34
- assert !@checker.min_file?('abc-min1.js')
35
- end
36
-
37
- def test_grep_import_js_path
38
- pathes = @checker.grep_import_js_path fixture_01
39
- assert_equal 6, pathes.length
40
- assert_equal %w(
41
- http://style.china.alibaba.com/js/common/aliclick.js
42
- http://style.china.alibaba.com/js/detail/xpclick.js
43
- http://style.china.alibaba.com/js/lib/fdev-v4/widget/util/debug-min.js
44
- http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/alitalk-min.js
45
- http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/sweet-min.js
46
- http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/sweet-min.js
47
- ), pathes.collect { |path| path[:url] }
48
- end
49
-
50
- def test_check_one_line_one_import
51
- pathes = @checker.grep_import_js_path fixture_01
52
- ret = []
53
- pathes.each { |import|
54
- r = @checker.check_js_merge_importing import, pathes, ""
55
- ret.concat r
56
- }
57
- assert_equal [
58
- ["merge文件需要引用压缩版的js, 如a-min.js", :warn, 12, 63],
59
- ["merge文件需要引用压缩版的js, 如a-min.js", :warn, 13, 62],
60
- ["一行只能有一个import文件", :error, 18, 96],
61
- ["merge文件格式不正确", :error, 19, 1],
62
- ["merge文件格式不正确", :error, 20, 1]
63
- ], ret
64
- end
65
-
66
- def test_has_doc_comment
67
- js = '
68
- /**
69
- * 功能文件头必须要有文档注释
70
- * 现在没有对doc格式进行规范
71
- * 所以暂时不做文档注释内容检查
72
- * 只检则有注释
73
- */
74
-
75
- i++;
76
- '
77
- assert @checker.has_doc_comment?(js)
78
-
79
- js = '
80
- i++;
81
- '
82
- assert !@checker.has_doc_comment?(js)
83
-
84
- js = '
85
- /*
86
- * 多行注释不属于文档注释
87
- * 文档注释需要以/*开头
88
- */
89
- '
90
- assert !@checker.has_doc_comment?(js)
91
- end
92
-
93
- def test_check_import_js_scope
94
- #not implements
95
- end
96
-
97
- def test_check_import_js_exist_and_min
98
- # not implements
99
- end
100
-
101
- def fixture_01
102
- <<END
103
- (function(){
104
- ImportJavscript = {
105
- url:function(url){
106
- document.write('<script type="text/javascript" src="'+url+'"></scr'+'ipt>');
107
- }
108
- };
109
- })();
110
-
111
- /**
112
- * 打点依赖库
113
- */
114
- ImportJavscript.url('http://style.china.alibaba.com/js/common/aliclick.js');
115
- ImportJavscript.url(http://style.china.alibaba.com/js/detail/xpclick.js);
116
-
117
- /**
118
- * 旺铺基础JS
119
- */
120
- ImportJavscript.url("http://style.china.alibaba.com/js/lib/fdev-v4/widget/util/debug-min.js"); ImportJavscript.url("http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/alitalk-min.js");
121
- ImportJavscript.url( 'http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/sweet-min.js' ) ;
122
- ImportJavscript.url('http://style.china.alibaba.com/js/lib/fdev-v4/widget/web/sweet-min.js')
123
- END
124
- end
125
-
126
- end
127
-
128
- end
129
- end
130
- end
131
-
@@ -1,91 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative '../helper'
4
-
5
- module XRayTest
6
-
7
- module Rule
8
-
9
- class DSLBasicTest < Test::Unit::TestCase
10
-
11
- include ::XRay::Rule
12
-
13
- def setup
14
- @rule = Proc.new do |file|
15
- @called = true
16
- ["it's just a test", :warn]
17
- end
18
- @called = false
19
- clear_all_rules
20
- common
21
- end
22
-
23
- def test_add_file_checker
24
- check_file &@rule
25
- assert_contains file_rules, "available in common rules"
26
- assert_contains css_rules, "common rules available in css rules too"
27
- assert_contains css_file_rules, "common rules available in css file rules too"
28
- assert_not_contains only_css_file_rules, "not available in css rules only"
29
- end
30
-
31
- def test_add_css_file_checker
32
- css {
33
- check_file &@rule
34
- }
35
- assert_not_contains file_rules, "not available in common rules"
36
- assert_contains css_file_rules, "available in css rules"
37
- assert_contains only_css_file_rules, "available in css only rules"
38
- end
39
-
40
- def test_check
41
- check_file &@rule
42
- assert_equal check_file("test"), [["it's just a test", :warn]]
43
- assert @called
44
- end
45
-
46
- def test_named_checker
47
- msg = ['we suggest use "-" instead', :info]
48
- html {
49
- check_file_with_underline do |file|
50
- msg if file =~ /_/
51
- end
52
- }
53
-
54
- results = check_file_with_underline 'a_b.html'
55
- assert_equal msg, results
56
- end
57
-
58
- def test_normal_plus_named_checker
59
- case_warn = ['must use downcase filename', :error]
60
- check_file { |file|
61
- case_warn if file =~ /[A-Z]/
62
- }
63
-
64
- msg = ['we suggest use "-" instead', :info]
65
- html {
66
- check_file_with_underline do |file|
67
- msg if file =~ /_/
68
- end
69
- }
70
-
71
- results = check_html_file 'a_B.html'
72
- assert_equal [case_warn, msg], results
73
-
74
- end
75
-
76
- def assert_contains( rules, *msg )
77
- assert has_rule?(rules), *msg
78
- end
79
-
80
- def assert_not_contains( rules, *msg)
81
- assert !has_rule?(rules), *msg
82
- end
83
-
84
- def has_rule?( rules )
85
- rules.any? {|r| r[:block] == @rule }
86
- end
87
-
88
- end
89
-
90
- end
91
- end
@@ -1,48 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative '../helper'
4
-
5
- module XRayTest
6
-
7
- module Rule
8
-
9
- class ImportingTest < Test::Unit::TestCase
10
-
11
- include ::XRay::Rule
12
-
13
- def setup
14
- clear_all_rules
15
- end
16
-
17
- def test_import_with_symbol
18
- import :css
19
- assert css_rules.size > 0
20
- end
21
-
22
- def test_import_with_symbol_twice
23
- assert_equal 0, css_rules.size
24
-
25
- import :css
26
- size = css_rules.size
27
- assert size > 0
28
-
29
- import :css
30
- assert_equal size, css_rules.size
31
- end
32
-
33
- def test_import_all_twice
34
- assert_equal 0, css_rules.size
35
-
36
- import_all
37
- size = css_rules.size
38
- assert size > 0
39
-
40
- import_all
41
- assert_equal size, css_rules.size
42
-
43
- end
44
-
45
- end
46
-
47
- end
48
- end
data/test/test_helper.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'test/unit'
2
-
3
- # Add test libraries you want to use here, e.g. mocha
4
-
5
- class Test::Unit::TestCase
6
-
7
- # Add global extensions to the test case class here
8
-
9
- end