fdlint 0.2.0.pre → 0.2.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 (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,28 +1,24 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckPropSeperatorTest < Test::Unit::TestCase
11
10
 
12
- include XRay::HTML
11
+ include FdlintTest::HTML
13
12
 
14
- def setup
15
- @rule = XRay::HTML::Rule::CheckTagRule.new
16
- end
13
+ check_rule [:error, '属性值必须使用双引号'] do
17
14
 
18
- def test_check_double_quote
19
- prop = XRay::HTML::Property.new('id', 'info', "\"")
20
- assert_equal [], @rule.check_html_property(prop)
21
- end
15
+ should_with_result do
16
+ %Q{<input type='radio' />}
17
+ end
22
18
 
23
- def test_check_single_quote
24
- prop = XRay::HTML::Property.new('id', 'info', "\'")
25
- assert_equal [["属性值必须使用双引号", :error]], @rule.check_html_property(prop)
19
+ should_without_result do
20
+ %Q{<input type="radio" />}
21
+ end
26
22
  end
27
23
 
28
24
  end
@@ -1,26 +1,21 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckStylePropTest < Test::Unit::TestCase
11
10
 
12
- def setup
13
- @rule = XRay::HTML::Rule::CheckTagRule.new
14
- end
11
+ include FdlintTest::HTML
15
12
 
16
- def test_check_normal
17
- prop = XRay::HTML::Property.new('href', '#nogo')
18
- assert_equal [], @rule.check_html_property(prop)
19
- end
13
+ check_rule [:error, '不能定义内嵌样式style'] do
14
+
15
+ should_with_result do
16
+ %Q{<div style='background:transparent;' />}
17
+ end
20
18
 
21
- def test_check_tag_with_style_prop
22
- prop = XRay::HTML::Property.new('style', 'nogo')
23
- assert_equal [["不能定义内嵌样式style", :error]], @rule.check_html_property(prop)
24
19
  end
25
20
 
26
21
  end
@@ -1,56 +1,31 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckTagClosedTest < Test::Unit::TestCase
11
10
 
12
- def setup
13
- @rule = XRay::HTML::Rule::CheckTagRule.new
14
- end
15
-
16
- def test_check_normal_tag
17
- tag = XRay::HTML::Element.new('div', {:class=>'footer'})
18
- assert_equal [], @rule.check_html_tag(tag)
19
- end
11
+ include FdlintTest::HTML
20
12
 
21
- def test_check_normal_tag_not_closed
22
- tag = XRay::HTML::Element.new('div', {:class=>'footer'})
23
- tag.close_type = :none
24
- assert_equal [["标签必须正确闭合", :error]], @rule.check_html_tag(tag)
25
- end
26
-
27
- def test_check_normal_tag_self_closed
28
- tag = XRay::HTML::Element.new('div', {:class=>'footer'})
29
- tag.close_type = :self
30
- assert_equal [], @rule.check_html_tag(tag)
31
- end
13
+ check_rule [:error, '标签必须正确闭合'] do
32
14
 
33
- def test_check_self_close_tag_right
34
- tag = XRay::HTML::Element.new('img', {:class=>'footer', :alt=>'image'})
35
- tag.close_type = :self
36
- assert_equal [], @rule.check_html_tag(tag)
37
- end
38
-
39
- def test_check_self_close_tag_close_after
40
- tag = XRay::HTML::Element.new('img', {:class=>'footer', :alt=>'image'})
41
- assert_equal [["标签必须正确闭合", :error]], @rule.check_html_tag(tag)
42
- end
43
-
44
- def test_check_text
45
- tag = XRay::HTML::TextElement.new('hello world')
46
- assert_equal [], @rule.check_html_tag(tag)
15
+ should_without_result do
16
+ [
17
+ %Q{<br>},
18
+ %Q{<br/>},
19
+ %Q{<p></p>},
20
+ %Q{<p/>},
21
+ %Q{<img src="" alt="" >},
22
+ %Q{<img src="" alt="" />},
23
+ %Q{text},
24
+ %Q{<!--comment-->}
25
+ ]
26
+ end
47
27
  end
48
28
 
49
- def test_check_comment
50
- tag = XRay::HTML::CommentElement.new('hello world')
51
- assert_equal [], @rule.check_html_tag(tag)
52
- end
53
-
54
29
  end
55
30
 
56
31
  end
@@ -1,50 +1,53 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckTagDowncaseTest < Test::Unit::TestCase
11
10
 
12
- def setup
13
- @rule = XRay::HTML::Rule::CheckTagRule.new
14
- end
11
+ include FdlintTest::HTML
15
12
 
16
- def test_check_normal_prop_name
17
- prop = XRay::HTML::Property.new('href', '#nogo')
18
- assert_equal [], @rule.check_html_property(prop)
19
- end
13
+ check_rule [:error, '标签名必须小写'] do
20
14
 
21
- def test_check_normal_tag_name
22
- tag = XRay::HTML::Element.new('div', {:class=>'footer'})
23
- assert_equal [], @rule.check_html_tag(tag)
24
- end
25
-
26
- def test_check_tag_with_upcase_name
27
- tag = XRay::HTML::Element.new('DIV', {:class=>'footer'})
28
- assert_equal [["标签名必须小写", :error]], @rule.check_html_tag(tag)
29
- end
15
+ should_with_result do
16
+ %Q{<INPUT type="radio" />}
17
+ end
30
18
 
31
- def test_check_tag_with_upcase_ending
32
- tag = XRay::HTML::Element.new('div', nil, [], :after, '</DIV>')
33
- assert_equal [["标签名必须小写", :error]], @rule.check_html_tag(tag)
19
+ should_without_result do
20
+ %Q{<input type="radio" />}
21
+ end
34
22
  end
35
23
 
36
- def test_check_tag_with_simple_upcase_prop_name
37
- prop = XRay::HTML::Property.new('Href', 'nogo')
38
- assert_equal [["属性名必须小写,连字符用中横线", :error]], @rule.check_html_property(prop)
24
+ check_rule [:error, '属性名连字符用中横线'] do
25
+ should_with_result do
26
+ [
27
+ %Q{<a data_id="1"/>}
28
+ ]
29
+ end
30
+
31
+ should_without_result do
32
+ %Q{<a data-id="1"/>}
33
+ end
39
34
  end
40
35
 
41
- def test_check_tag_with_style_prop
42
- prop = XRay::HTML::Property.new('Style', 'nogo')
43
- assert_equal [["不能定义内嵌样式style", :error], ["属性名必须小写,连字符用中横线", :error]], @rule.check_html_property(prop)
36
+ check_rule [:error, '属性名必须小写'] do
37
+ should_with_result do
38
+ [
39
+ %Q{<a dataId="1"/>},
40
+ %Q{<a HREF=""/>},
41
+ %Q{<a Href=""/>}
42
+ ]
43
+ end
44
+
45
+ should_without_result do
46
+ %Q{<a href=""/>}
47
+ end
44
48
  end
45
49
 
46
50
  end
47
-
48
51
  end
49
52
  end
50
53
  end
@@ -1,31 +1,31 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckUnescapedCharTest < Test::Unit::TestCase
11
10
 
12
- def setup
13
- @rule = XRay::HTML::Rule::CheckTagRule.new
14
- end
11
+ include FdlintTest::HTML
15
12
 
16
- def test_check_normal_text_tag
17
- tag = XRay::HTML::TextElement.new('hello')
18
- assert_equal [], @rule.check_html_text(tag)
19
- end
20
-
21
- def test_check_text_el_with_rt
22
- tag = XRay::HTML::TextElement.new('>>>')
23
- assert_equal [["特殊HTML符号(>和<)必须转义", :error]], @rule.check_html_text(tag)
24
- end
13
+ check_rule [:error, '特殊HTML符号(>和<)必须转义'] do
14
+
15
+ should_with_result do
16
+ [
17
+ %Q{<test>>>></test>},
18
+ %Q{<a><<<</a>},
19
+ %Q{<a><<<>>></a>}
20
+ ]
21
+ end
25
22
 
26
- def test_check_text_el_with_lt
27
- tag = XRay::HTML::TextElement.new('<<<<')
28
- assert_equal [["特殊HTML符号(>和<)必须转义", :error]], @rule.check_html_text(tag)
23
+ should_without_result do
24
+ [
25
+ %Q{<p/>},
26
+ %Q{<script> 1>5 </script>}
27
+ ]
28
+ end
29
29
  end
30
30
 
31
31
  end
@@ -1,49 +1,31 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require_relative '../../helper'
4
- require 'html/rule/check_tag_rule'
5
4
 
6
- module XRayTest
5
+ module FdlintTest
7
6
  module HTML
8
7
  module Rule
9
8
 
10
9
  class CheckUniqueImportTest < Test::Unit::TestCase
11
10
 
12
- def setup
13
- @rule = XRay::HTML::Rule::CheckTagRule.new
14
- end
15
-
16
- def test_check_normal_script
17
- tag = XRay::HTML::Element.new('script', {:src=>'http://style.china.alibaba.com/lib/fdev-v4/core/fdev-min.js'})
18
- assert_equal [], @rule.visit_tag(tag)
19
- end
11
+ include FdlintTest::HTML
20
12
 
21
- def test_check_repeated_script
22
- tag = XRay::HTML::Element.new('script', {:src=>'http://style.china.alibaba.com/lib/fdev-v4/core/fdev-min.js'})
23
- assert_equal [], @rule.visit_tag(tag)
24
- (1..10).each do
25
- assert_equal [["避免重复引用同一或相同功能文件", :error]], @rule.visit_tag(tag)
26
- end
27
- end
13
+ check_rule [:error, '避免重复引用同一文件'] do
28
14
 
29
- def test_check_with_inline_script
30
- tag = XRay::HTML::Element.new('script')
31
- assert_equal [], @rule.visit_tag(tag)
32
- (1..10).each do
33
- assert_equal [], @rule.visit_tag(tag)
15
+ should_with_result do
16
+ [
17
+ %Q{<script src="fdev-min.js"></script>} * 2,
18
+ %Q{<script src="fdev-min.js"></script>} * 5,
19
+ %Q{<link rel="stylesheet" href="test.css"/>} * 2,
20
+ %Q{<link rel="stylesheet" href="test.css"/>} * 5
21
+ ]
34
22
  end
35
- end
36
-
37
- def test_check_normal_style
38
- tag = XRay::HTML::Element.new('link', {:rel => 'stylesheet', :href=>'http://style.china.alibaba.com/css/lib/fdev-v4/core/fdev-min.css'}, [], :self)
39
- assert_equal [], @rule.visit_tag(tag)
40
- end
41
23
 
42
- def test_check_repeated_style
43
- tag = XRay::HTML::Element.new('link', {:rel => 'stylesheet', :href=>'http://style.china.alibaba.com/css/lib/fdev-v4/core/fdev-min.css'}, [], :self)
44
- assert_equal [], @rule.visit_tag(tag)
45
- (1..10).each do
46
- assert_equal [["避免重复引用同一或相同功能文件", :error]], @rule.visit_tag(tag)
24
+ should_without_result do
25
+ [
26
+ %Q{<script src="fdev-min.js"></script>},
27
+ %Q{<link rel="stylesheet" href="test.css"/>}
28
+ ]
47
29
  end
48
30
  end
49
31
 
@@ -18,13 +18,11 @@ require_relative 'rule/check_head_contain_meta_and_title_test'
18
18
  require_relative 'rule/check_block_level_element_test'
19
19
  require_relative 'rule/check_form_element_name_test'
20
20
  require_relative 'rule/check_button_test'
21
- require_relative 'rule/check_class_count_test'
22
21
  require_relative 'rule/check_tag_closed_test'
23
- require_relative 'rule/check_html_template_test'
24
22
  require_relative 'rule/check_css_in_head_test'
25
23
  require_relative 'rule/check_unescape_char_test'
26
24
 
27
- module XRayTest
25
+ module FdlintTest
28
26
 
29
27
  module HTML
30
28
 
@@ -47,9 +45,7 @@ module XRayTest
47
45
  tests << Rule::CheckBlockLevelElementTest.suite
48
46
  tests << Rule::CheckFormElementNameTest.suite
49
47
  tests << Rule::CheckButtonTest.suite
50
- tests << Rule::CheckClassCountTest.suite
51
48
  tests << Rule::CheckTagClosedTest.suite
52
- tests << Rule::CheckHTMLTemplateTest.suite
53
49
  tests << Rule::CheckCSSInHeadTest.suite
54
50
  tests << Rule::CheckUnescapedCharTest.suite
55
51
  tests
@@ -58,5 +54,5 @@ module XRayTest
58
54
  end
59
55
  end
60
56
 
61
- Test::Unit::UI::Console::TestRunner.run( XRayTest::HTML::RuleTest ) if __FILE__ == $0
57
+ Test::Unit::UI::Console::TestRunner.run( FdlintTest::HTML::RuleTest ) if __FILE__ == $0
62
58
 
data/test/js/expr/expr.rb CHANGED
@@ -3,7 +3,7 @@ require_relative 'left_hand'
3
3
  require_relative 'operate'
4
4
 
5
5
 
6
- module XRayTest
6
+ module FdlintTest
7
7
  module JS
8
8
  module Expr
9
9
 
@@ -1,4 +1,4 @@
1
- module XRayTest
1
+ module FdlintTest
2
2
  module JS
3
3
  module Expr
4
4
 
@@ -1,4 +1,4 @@
1
- module XRayTest
1
+ module FdlintTest
2
2
  module JS
3
3
  module Expr
4
4
 
@@ -1,4 +1,4 @@
1
- module XRayTest
1
+ module FdlintTest
2
2
  module JS
3
3
  module Expr
4
4
 
@@ -1,20 +1,18 @@
1
1
  # encoding: utf-8
2
2
  require File.expand_path('../helper', File.dirname(__FILE__))
3
3
 
4
- require 'js/parser'
4
+ require 'fdlint/parser/js/js_parser'
5
5
 
6
6
  require_relative 'expr/expr'
7
7
  require_relative 'stat/stat'
8
8
 
9
9
 
10
- module XRayTest
10
+ module FdlintTest
11
11
  module JS
12
12
  class ParserTest < Test::Unit::TestCase
13
- include XRay::JS
14
13
 
15
14
  include Expr::Expr
16
15
  include Stat::Stat
17
-
18
16
 
19
17
  def test_parse_program()
20
18
  js = '
@@ -72,8 +70,7 @@ module XRayTest
72
70
 
73
71
 
74
72
  def create_parser(js)
75
- Parser.new js, XRayTest::Logger.new
76
-
73
+ ::Fdlint::Parser::JS::JsParser.new js
77
74
  end
78
75
 
79
76
  def parse_js(action, js)
@@ -1,32 +1,18 @@
1
1
  # encoding: utf-8
2
2
  require_relative 'base_test'
3
3
 
4
- require 'js/rule/checklist'
5
-
6
- module XRayTest
4
+ module FdlintTest
7
5
  module JS
8
6
  module Rule
9
7
 
10
8
  class AlertCheckTest < BaseTest
11
9
 
12
- def test_visit_alert
13
- js = 'alert'
14
- ret = visit js
15
- assert_equal 1, ret.length
16
- end
17
-
18
- def test_vist_window_alert
19
- js = "window.alert"
20
- ret = visit js
21
- assert_equal [], ret
22
- end
10
+ check_rule [:warn, '必须去掉临时调试代码。如果一定要使用alert功能,请使用 window.alert'] do
23
11
 
24
- private
12
+ should_with_result do
13
+ 'alert'
14
+ end
25
15
 
26
- def visit(js)
27
- expr = parse js, 'expr_member'
28
- rule = XRay::JS::Rule::ChecklistRule.new
29
- rule.send :visit_expr_member, expr
30
16
  end
31
17
 
32
18
  end
@@ -1,32 +1,18 @@
1
1
  require_relative '../../helper'
2
2
 
3
- require 'js/parser'
4
- require 'parser_visitable'
3
+ require 'fdlint/parser/js/js_parser'
4
+ require 'fdlint/parser/parser_visitable'
5
5
 
6
- module XRayTest
6
+ module FdlintTest
7
7
 
8
8
  module JS
9
9
  module Rule
10
10
 
11
- class VisitableParser < XRay::JS::Parser
12
- include XRay::ParserVisitable
11
+ class VisitableParser < Fdlint::Parser::JS::JsParser
13
12
  end
14
13
 
15
14
  class BaseTest < Test::Unit::TestCase
16
-
17
- def parse(js, action = 'parse_program')
18
- parser = XRay::JS::Parser.new js, XRayTest::Logger.new
19
- parser.send "parse_#{action}"
20
- end
21
-
22
- def parse_with_rule(js, rule, options = {})
23
- parser = VisitableParser.new js, XRayTest::Logger.new
24
- rule = rule.new if rule.is_a? Class
25
- parser.add_visitor rule
26
- parser.parse_program
27
- parser.results
28
- end
29
-
15
+ include FdlintTest::JS
30
16
  end
31
17
 
32
18
  end
@@ -1,86 +1,54 @@
1
1
  # encoding: utf-8
2
2
  require_relative 'base_test'
3
3
 
4
- require 'js/rule/checklist'
5
-
6
- module XRayTest
4
+ module FdlintTest
7
5
  module JS
8
6
  module Rule
9
7
 
10
8
  class JqCheckTest < BaseTest
11
- def test_visit_expr_member
12
- js = 'jQuery.noConflict'
13
- ret = visit js
14
- assert_equal 2, ret.length
15
- end
16
-
17
- def test_check_direct_jquery_call
18
- js = "jQuery.namespace"
19
- ret = visit js
20
- assert_equal [], ret
21
-
22
- jses = [
23
- 'jQuery.bind',
24
- 'jQuery[method]',
25
- 'jQuery(function($) {})',
26
- 'jQuery.extend'
27
- ]
28
-
29
- jses.each do |js|
30
- r = visit js
31
- assert r.include? ['禁止直接使用jQuery变量,使用全局闭包写法"(function($, NS){....})(jQuery,Namespace);",jQuery.namespace例外', :error]
32
- end
33
- end
34
9
 
35
- def test_check_forbit_method_call
36
- jses = %w(
10
+
11
+ should_with_result [:error, '禁止使用jQuery.sub()和jQuery.noConflict方法'] do
12
+ %w{
13
+ jQ.noConflict
37
14
  $.sub
38
15
  $.noConflict
39
16
  jQuery.sub
40
17
  jQuery.noConflict
41
- )
18
+ }
19
+ end
42
20
 
43
- jses.each do |js|
44
- r = visit js
45
- assert r.include?( ['禁止使用jQuery.sub()和jQuery.noConflict方法', :error] )
21
+ check_rule [:error, '禁止直接使用jQuery变量,使用全局闭包写法,jQuery.namespace例外'] do
22
+ should_with_result do
23
+ %w{
24
+ jQuery.bind
25
+ jQuery[method]
26
+ jQuery(function($)\ {})
27
+ jQuery.extend
28
+ }
29
+ end
30
+
31
+ next
32
+
33
+ should_without_result do
34
+ "jQuery.namespace"
46
35
  end
47
36
  end
48
37
 
49
- def test_check_data_call_param
50
- jses = %w(
38
+ should_with_result [:error, '使用".data()"读写自定义属性时需要转化成驼峰形式'] do
39
+ %w{
51
40
  $.data("doc-config")
52
41
  jQuery.data('doc-config')
53
- )
54
- jses.each do |js|
55
- r = visit js
56
- assert r.include? ['使用".data()"读写自定义属性时需要转化成驼峰形式', :error]
57
- end
42
+ }
58
43
  end
59
44
 
60
- def test_check_ctor_selector
61
- jses = [
45
+ should_with_result [:warn, '使用选择器时,能确定tagName的,必须加上tagName'] do
46
+ [
62
47
  "$('.myclass', div)",
63
48
  "$('.myclass')",
64
49
  "$('[name=123]')",
65
50
  "$(':first')"
66
51
  ]
67
-
68
- jses.each do |js|
69
- r = visit js
70
- assert r.include? ['使用选择器时,能确定tagName的,必须加上tagName', :warn]
71
- end
72
-
73
- js = '$()'
74
- ret = visit js
75
- assert_equal [], ret
76
- end
77
-
78
- private
79
-
80
- def visit(js)
81
- expr = parse js, 'expr_member'
82
- rule = XRay::JS::Rule::ChecklistRule.new
83
- rule.send :visit_expr_member, expr
84
52
  end
85
53
 
86
54
  end