juicer 0.2.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/History.txt +28 -0
  2. data/Rakefile +84 -36
  3. data/Readme.rdoc +192 -23
  4. data/VERSION +1 -0
  5. data/bin/juicer +2 -4
  6. data/lib/juicer.rb +9 -10
  7. data/lib/juicer/asset/path.rb +275 -0
  8. data/lib/juicer/asset/path_resolver.rb +79 -0
  9. data/lib/juicer/binary.rb +3 -5
  10. data/lib/juicer/cache_buster.rb +112 -27
  11. data/lib/juicer/command/install.rb +4 -2
  12. data/lib/juicer/command/list.rb +16 -9
  13. data/lib/juicer/command/merge.rb +30 -14
  14. data/lib/juicer/command/verify.rb +1 -1
  15. data/lib/juicer/css_cache_buster.rb +31 -47
  16. data/lib/juicer/datafy/datafy.rb +20 -0
  17. data/lib/juicer/dependency_resolver/css_dependency_resolver.rb +29 -0
  18. data/lib/juicer/dependency_resolver/dependency_resolver.rb +101 -0
  19. data/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb +23 -0
  20. data/lib/juicer/ext/logger.rb +5 -0
  21. data/lib/juicer/ext/string.rb +47 -0
  22. data/lib/juicer/ext/symbol.rb +15 -0
  23. data/lib/juicer/image_embed.rb +129 -0
  24. data/lib/juicer/install/base.rb +2 -2
  25. data/lib/juicer/install/closure_compiler_installer.rb +69 -0
  26. data/lib/juicer/install/jslint_installer.rb +3 -3
  27. data/lib/juicer/install/rhino_installer.rb +3 -2
  28. data/lib/juicer/install/yui_compressor_installer.rb +3 -2
  29. data/lib/juicer/jslint.rb +1 -1
  30. data/lib/juicer/merger/base.rb +1 -1
  31. data/lib/juicer/merger/javascript_merger.rb +3 -4
  32. data/lib/juicer/merger/stylesheet_merger.rb +13 -15
  33. data/lib/juicer/minifyer/closure_compiler.rb +90 -0
  34. data/lib/juicer/minifyer/java_base.rb +77 -0
  35. data/lib/juicer/minifyer/yui_compressor.rb +15 -48
  36. data/test/bin/jslint-1.0.js +523 -0
  37. data/test/bin/jslint.js +523 -0
  38. data/test/bin/rhino1_7R1.zip +0 -0
  39. data/test/bin/rhino1_7R2-RC1.jar +0 -0
  40. data/test/bin/rhino1_7R2-RC1.zip +0 -0
  41. data/test/bin/yuicompressor +0 -0
  42. data/test/bin/yuicompressor-2.3.5.zip +0 -0
  43. data/test/bin/yuicompressor-2.4.2.jar +0 -0
  44. data/test/bin/yuicompressor-2.4.2.zip +0 -0
  45. data/test/data/Changelog.txt +10 -0
  46. data/test/data/a.css +3 -0
  47. data/test/data/a.js +5 -0
  48. data/test/data/a1.css +5 -0
  49. data/test/data/b.css +1 -0
  50. data/test/data/b.js +5 -0
  51. data/test/data/b1.css +5 -0
  52. data/test/data/c1.css +3 -0
  53. data/test/data/css/2.gif +1 -0
  54. data/test/data/css/test.css +11 -0
  55. data/test/data/css/test2.css +1 -0
  56. data/test/data/d1.css +3 -0
  57. data/test/data/images/1.png +1 -0
  58. data/test/data/my_app.js +2 -0
  59. data/test/data/not-ok.js +2 -0
  60. data/test/data/ok.js +3 -0
  61. data/test/data/path_test.css +5 -0
  62. data/test/data/path_test2.css +14 -0
  63. data/test/data/pkg/module/moda.js +2 -0
  64. data/test/data/pkg/module/modb.js +3 -0
  65. data/test/data/pkg/pkg.js +1 -0
  66. data/test/fixtures/yui-download.html +425 -0
  67. data/test/test_helper.rb +36 -7
  68. data/test/unit/juicer/asset/path_resolver_test.rb +76 -0
  69. data/test/unit/juicer/asset/path_test.rb +370 -0
  70. data/test/unit/juicer/cache_buster_test.rb +104 -0
  71. data/test/{juicer/test_chainable.rb → unit/juicer/chainable_test.rb} +1 -1
  72. data/test/unit/juicer/command/install_test.rb +58 -0
  73. data/test/{juicer/command/test_list.rb → unit/juicer/command/list_test.rb} +26 -14
  74. data/test/unit/juicer/command/merge_test.rb +162 -0
  75. data/test/{juicer/command/test_util.rb → unit/juicer/command/util_test.rb} +10 -6
  76. data/test/unit/juicer/command/verify_test.rb +48 -0
  77. data/test/{juicer/test_css_cache_buster.rb → unit/juicer/css_cache_buster_test.rb} +10 -30
  78. data/test/unit/juicer/datafy_test.rb +37 -0
  79. data/test/{juicer/merger/test_css_dependency_resolver.rb → unit/juicer/dependency_resolver/css_dependency_resolver_test.rb} +2 -2
  80. data/test/{juicer/merger/test_javascript_dependency_resolver.rb → unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb} +13 -2
  81. data/test/unit/juicer/ext/{#string_test.rb# → string_test.rb} +0 -7
  82. data/test/unit/juicer/ext/symbol_test.rb +27 -0
  83. data/test/unit/juicer/image_embed_test.rb +271 -0
  84. data/test/unit/juicer/install/installer_base_test.rb +214 -0
  85. data/test/{juicer/install/test_jslint_installer.rb → unit/juicer/install/jslint_installer_test.rb} +1 -1
  86. data/test/{juicer/install/test_rhino_installer.rb → unit/juicer/install/rhino_installer_test.rb} +1 -1
  87. data/test/{juicer/install/test_yui_compressor_installer.rb → unit/juicer/install/yui_compressor_test.rb} +16 -16
  88. data/test/unit/juicer/jslint_test.rb +60 -0
  89. data/test/{juicer/merger/test_base.rb → unit/juicer/merger/base_test.rb} +1 -1
  90. data/test/{juicer/merger/test_javascript_merger.rb → unit/juicer/merger/javascript_merger_test.rb} +2 -2
  91. data/test/{juicer/merger/test_stylesheet_merger.rb → unit/juicer/merger/stylesheet_merger_test.rb} +15 -13
  92. data/test/unit/juicer/minifyer/closure_compressor_test.rb +107 -0
  93. data/test/{integration → unit}/juicer/minifyer/yui_compressor_test.rb +30 -47
  94. data/test/unit/juicer_test.rb +1 -0
  95. metadata +207 -113
  96. data/lib/juicer/core.rb +0 -61
  97. data/lib/juicer/merger/css_dependency_resolver.rb +0 -25
  98. data/lib/juicer/merger/dependency_resolver.rb +0 -82
  99. data/lib/juicer/merger/javascript_dependency_resolver.rb +0 -21
  100. data/tasks/ann.rake +0 -80
  101. data/tasks/bones.rake +0 -20
  102. data/tasks/gem.rake +0 -201
  103. data/tasks/git.rake +0 -40
  104. data/tasks/notes.rake +0 -27
  105. data/tasks/post_load.rake +0 -34
  106. data/tasks/rdoc.rake +0 -51
  107. data/tasks/rubyforge.rake +0 -55
  108. data/tasks/setup.rb +0 -292
  109. data/tasks/spec.rake +0 -54
  110. data/tasks/svn.rake +0 -47
  111. data/tasks/test.rake +0 -40
  112. data/tasks/test/setup.rake +0 -35
  113. data/tasks/zentest.rake +0 -36
  114. data/test/juicer/command/test_install.rb +0 -53
  115. data/test/juicer/command/test_merge.rb +0 -160
  116. data/test/juicer/command/test_verify.rb +0 -33
  117. data/test/juicer/install/test_installer_base.rb +0 -195
  118. data/test/juicer/minifyer/test_yui_compressor.rb +0 -159
  119. data/test/juicer/test_cache_buster.rb +0 -58
  120. data/test/juicer/test_core.rb +0 -47
  121. data/test/juicer/test_jslint.rb +0 -33
  122. data/test/test_juicer.rb +0 -4
data/tasks/spec.rake DELETED
@@ -1,54 +0,0 @@
1
-
2
- if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
3
- require 'spec/rake/verify_rcov'
4
-
5
- namespace :spec do
6
-
7
- desc 'Run all specs with basic output'
8
- Spec::Rake::SpecTask.new(:run) do |t|
9
- t.ruby_opts = PROJ.ruby_opts
10
- t.spec_opts = PROJ.spec.opts
11
- t.spec_files = PROJ.spec.files
12
- t.libs += PROJ.libs
13
- end
14
-
15
- desc 'Run all specs with text output'
16
- Spec::Rake::SpecTask.new(:specdoc) do |t|
17
- t.ruby_opts = PROJ.ruby_opts
18
- t.spec_opts = PROJ.spec.opts + ['--format', 'specdoc']
19
- t.spec_files = PROJ.spec.files
20
- t.libs += PROJ.libs
21
- end
22
-
23
- if HAVE_RCOV
24
- desc 'Run all specs with RCov'
25
- Spec::Rake::SpecTask.new(:rcov) do |t|
26
- t.ruby_opts = PROJ.ruby_opts
27
- t.spec_opts = PROJ.spec.opts
28
- t.spec_files = PROJ.spec.files
29
- t.libs += PROJ.libs
30
- t.rcov = true
31
- t.rcov_dir = PROJ.rcov.dir
32
- t.rcov_opts = PROJ.rcov.opts + ['--exclude', 'spec']
33
- end
34
-
35
- RCov::VerifyTask.new(:verify) do |t|
36
- t.threshold = PROJ.rcov.threshold
37
- t.index_html = File.join(PROJ.rcov.dir, 'index.html')
38
- t.require_exact_threshold = PROJ.rcov.threshold_exact
39
- end
40
-
41
- task :verify => :rcov
42
- remove_desc_for_task %w(spec:clobber_rcov)
43
- end
44
-
45
- end # namespace :spec
46
-
47
- desc 'Alias to spec:run'
48
- task :spec => 'spec:run'
49
-
50
- task :clobber => 'spec:clobber_rcov' if HAVE_RCOV
51
-
52
- end # if HAVE_SPEC_RAKE_SPECTASK
53
-
54
- # EOF
data/tasks/svn.rake DELETED
@@ -1,47 +0,0 @@
1
-
2
- if HAVE_SVN
3
-
4
- unless PROJ.svn.root
5
- info = %x/svn info ./
6
- m = %r/^Repository Root:\s+(.*)$/.match(info)
7
- PROJ.svn.root = (m.nil? ? '' : m[1])
8
- end
9
- PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
10
-
11
- namespace :svn do
12
-
13
- # A prerequisites task that all other tasks depend upon
14
- task :prereqs
15
-
16
- desc 'Show tags from the SVN repository'
17
- task :show_tags => 'svn:prereqs' do |t|
18
- tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
19
- tags.gsub!(%r/\/$/, '')
20
- tags = tags.split("\n").sort {|a,b| b <=> a}
21
- puts tags
22
- end
23
-
24
- desc 'Create a new tag in the SVN repository'
25
- task :create_tag => 'svn:prereqs' do |t|
26
- v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
27
- abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
28
-
29
- svn = PROJ.svn
30
- trunk = File.join(svn.root, svn.trunk)
31
- tag = "%s-%s" % [PROJ.name, PROJ.version]
32
- tag = File.join(svn.root, svn.tags, tag)
33
- msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
34
-
35
- puts "Creating SVN tag '#{tag}'"
36
- unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
37
- abort "Tag creation failed"
38
- end
39
- end
40
-
41
- end # namespace :svn
42
-
43
- task 'gem:release' => 'svn:create_tag'
44
-
45
- end # if PROJ.svn.path
46
-
47
- # EOF
data/tasks/test.rake DELETED
@@ -1,40 +0,0 @@
1
-
2
- if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
3
- require 'rake/testtask'
4
-
5
- namespace :test do
6
-
7
- Rake::TestTask.new(:run) do |t|
8
- t.libs = PROJ.libs
9
- t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
10
- else PROJ.test.files end
11
- t.ruby_opts += PROJ.ruby_opts
12
- t.ruby_opts += PROJ.test.opts
13
- end
14
-
15
- if HAVE_RCOV
16
- desc 'Run rcov on the unit tests'
17
- task :rcov => :clobber_rcov do
18
- opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
19
- opts = opts.join(' ')
20
- files = if test(?f, PROJ.test.file) then [PROJ.test.file]
21
- else PROJ.test.files end
22
- files = files.join(' ')
23
- sh "#{RCOV} #{files} #{opts}"
24
- end
25
-
26
- task :clobber_rcov do
27
- rm_r 'coverage' rescue nil
28
- end
29
- end
30
-
31
- end # namespace :test
32
-
33
- desc 'Alias to test:run'
34
- task :test => 'test:run'
35
-
36
- task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
-
38
- end
39
-
40
- # EOF
@@ -1,35 +0,0 @@
1
- require 'fileutils'
2
- require 'open-uri'
3
-
4
- namespace :test do
5
- desc "Download third party libraries needed to successfully run tests"
6
- task :setup do
7
- root = File.join(File.dirname(__FILE__), "../../test/bin")
8
- yui242 = File.join(root, "yuicompressor-2.4.2.zip")
9
- jslint = File.join(root, "jslint.js")
10
- rhino = File.join(root, "rhino1_7R2-RC1.zip")
11
-
12
- download("http://www.julienlecomte.net/yuicompressor/yuicompressor-2.4.2.zip")
13
- FileUtils.cp(File.join(root, "yuicompressor-2.4.2.zip"), File.join(root, "yuicompressor-2.3.5.zip"))
14
- download("http://www.jslint.com/rhino/jslint.js")
15
- download("ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R1.zip")
16
- download("ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R2-RC1.zip")
17
- download("http://www.julienlecomte.net/yuicompressor/")
18
- end
19
- end
20
-
21
- def download(url)
22
- filename = File.expand_path(File.join(File.dirname(__FILE__), "../../test/bin", File.basename(url)))
23
- return filename if File.exists?(filename)
24
-
25
- puts "Downloading #{url} to #{filename}"
26
- FileUtils.mkdir_p(File.dirname(filename))
27
-
28
- File.open(filename, "wb") do |file|
29
- webpage = open(url)
30
- file.write(webpage.read)
31
- webpage.close
32
- end
33
-
34
- filename
35
- end
data/tasks/zentest.rake DELETED
@@ -1,36 +0,0 @@
1
- if HAVE_ZENTEST
2
-
3
- # --------------------------------------------------------------------------
4
- if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
5
- require 'autotest'
6
-
7
- namespace :test do
8
- task :autotest do
9
- Autotest.run
10
- end
11
- end
12
-
13
- desc "Run the autotest loop"
14
- task :autotest => 'test:autotest'
15
-
16
- end # if test
17
-
18
- # --------------------------------------------------------------------------
19
- if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
20
- require 'autotest/rspec'
21
-
22
- namespace :spec do
23
- task :autotest do
24
- load '.autotest' if test(?f, '.autotest')
25
- Autotest::Rspec.run
26
- end
27
- end
28
-
29
- desc "Run the autotest loop"
30
- task :autotest => 'spec:autotest'
31
-
32
- end # if rspec
33
-
34
- end # if HAVE_ZENTEST
35
-
36
- # EOF
@@ -1,53 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. test_helper])) unless defined?(Juicer)
2
-
3
- class TestInstallCommand < Test::Unit::TestCase
4
-
5
- def setup
6
- @io = StringIO.new
7
- @command = Juicer::Command::Install.new(Logger.new(@io))
8
- FileUtils.rm_rf(path(".juicer/lib")) if File.exists?(path(".juicer/lib"))
9
- end
10
-
11
- def test_default_version_should_bring_up_latest_from_installer
12
- assert_equal "1.0", @command.version(Juicer::Install::JSLintInstaller.new)
13
- end
14
-
15
- def test_explicit_version_should_not_be_overridden
16
- @command.instance_eval { @version = "1.0.1" }
17
- assert_equal "1.0.1", @command.version(Juicer::Install::JSLintInstaller.new)
18
- end
19
-
20
- def test_execute_should_require_atleast_one_argument
21
- assert_raise ArgumentError do
22
- @command.execute
23
- end
24
- end
25
-
26
- def test_install_single_lib
27
- installer = Juicer::Install::JSLintInstaller.new(path(".juicer"))
28
- assert !installer.installed?
29
-
30
- @command.instance_eval { @path = path(".juicer") }
31
- @command.execute("jslint")
32
- assert installer.installed?
33
- end
34
-
35
- def test_install_already_installed_lib
36
- installer = Juicer::Install::JSLintInstaller.new(path(".juicer"))
37
- installer.install
38
- assert installer.installed?
39
-
40
- @command.execute("jslint")
41
- assert_match(/is already installed in/, @io.string)
42
- end
43
-
44
- def test_install_specific_version
45
- installer = Juicer::Install::JSLintInstaller.new(path(".juicer"))
46
- assert !installer.installed?("0.9")
47
-
48
- @command.instance_eval { @path = path(".juicer") }
49
- @command.instance_eval { @version = "0.9" }
50
- @command.execute("jslint")
51
- assert installer.installed?("0.9")
52
- end
53
- end
@@ -1,160 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. test_helper])) unless defined?(Juicer)
2
-
3
- class TestMergeCommand < Test::Unit::TestCase
4
-
5
- def setup
6
- @io = StringIO.new
7
- @merge = Juicer::Command::Merge.new(Logger.new(@io))
8
-
9
- Juicer::Test::FileSetup.new.create
10
-
11
- ["a.min.css", "not-ok.min.js"].each { |f| File.delete(path(f)) if File.exists?(path(f)) }
12
-
13
- Juicer.home = path(".juicer")
14
- installer = Juicer::Install::YuiCompressorInstaller.new(Juicer.home)
15
- installer.install("2.4.2") unless installer.installed?("2.4.2")
16
-
17
- installer = Juicer::Install::JSLintInstaller.new(Juicer.home)
18
- installer.install unless installer.installed?
19
- end
20
-
21
- def test_get_minifier_from_nil_minifyer
22
- @merge.instance_eval { @minifyer = nil }
23
-
24
- Juicer::Command::Merge.publicize_methods do
25
- assert_nil @merge.minifyer
26
- end
27
- end
28
-
29
- def test_get_minifier_from_empty_minifyer
30
- @merge.instance_eval { @minifyer = "" }
31
-
32
- Juicer::Command::Merge.publicize_methods do
33
- assert_nil @merge.minifyer
34
- end
35
- end
36
-
37
- def test_get_minifier_from_none_minifyer
38
- Juicer::Command::Merge.publicize_methods do
39
- @merge.instance_eval { @minifyer = "none" }
40
- assert_nil @merge.minifyer
41
-
42
- @merge.instance_eval { @minifyer = "None" }
43
- assert_nil @merge.minifyer
44
-
45
- @merge.instance_eval { @minifyer = "NONE" }
46
- assert_nil @merge.minifyer
47
- end
48
- end
49
-
50
- def test_get_minifyer
51
- Juicer::Command::Merge.publicize_methods do
52
- assert @merge.minifyer.class == Juicer::Minifyer::YuiCompressor
53
- end
54
- end
55
-
56
- def test_output_name_from_file_should_have_suffix_prepended_with_min
57
- Juicer::Command::Merge.publicize_methods do
58
- assert_equal File.expand_path("test.min.js"), @merge.output("test.js")
59
- end
60
- end
61
-
62
- def test_output_name_from_nothing_should_be_timestamp
63
- Juicer::Command::Merge.publicize_methods do
64
- assert_match(/\d{10}\.min\.tmp/, @merge.output)
65
- end
66
- end
67
-
68
- def test_output_name_instance_value
69
- Juicer::Command::Merge.publicize_methods do
70
- @merge.instance_eval { @output = "output.css" }
71
- assert_equal File.expand_path("output.css"), @merge.output
72
- assert_equal File.expand_path("output.css"), @merge.output("bleh.css")
73
- end
74
- end
75
-
76
- def test_output_name_should_be_generated_when_output_is_directory
77
- Juicer::Command::Merge.publicize_methods do
78
- @merge.instance_eval { @output = path("css") }
79
- assert_equal File.join(path("css"), "file.min.css"), @merge.output("file.css")
80
- end
81
- end
82
-
83
- def test_merger_from_valid_type
84
- Juicer::Command::Merge.publicize_methods do
85
- assert_equal Juicer::Merger::JavaScriptMerger, @merge.merger("bleh.js")
86
- end
87
- end
88
-
89
- def test_merger_from_invalid_type
90
- Juicer::Command::Merge.publicize_methods do
91
- assert_equal Juicer::Merger::JavaScriptMerger, @merge.merger("bleh.txt")
92
- assert_match(/Unknown type 'txt', defaulting to 'js'/, @io.string)
93
- end
94
- end
95
-
96
- def test_merger_from_preset_type
97
- Juicer::Command::Merge.publicize_methods do
98
- @merge.instance_eval { @type = "css" }
99
- assert_equal Juicer::Merger::StylesheetMerger, @merge.merger
100
- assert_equal Juicer::Merger::StylesheetMerger, @merge.merger("bleh.txt")
101
- end
102
- end
103
-
104
- def test_merge_without_input
105
- assert_raise SystemExit do
106
- @merge.execute([])
107
- end
108
- end
109
-
110
- def test_merge_with_bogus_input
111
- assert_raise SystemExit do
112
- @merge.execute(["*.css", "bleh/*.js"])
113
- end
114
- end
115
-
116
- def test_unable_to_merge_on_existing_file
117
- assert_raise SystemExit do
118
- @merge.instance_eval { @output = path("a.css") }
119
- @merge.execute(path("a.css"))
120
- assert_match(/Run again with --force to overwrite/, @io.string)
121
- end
122
- end
123
-
124
- def test_update_output_when_force
125
- assert_nothing_raised do
126
- @merge.instance_eval { @force = true }
127
- @merge.execute(path("a.css"))
128
- end
129
- end
130
-
131
- def test_merge_successful
132
- begin
133
- @merge.instance_eval { @output = path("a.min.css") }
134
- assert @merge.execute(path("a1.css"))
135
- assert_equal "h2{font-size:10px;}html{background:red;}h1{font-size:12px;}body{width:800px;}", IO.read(path("a.min.css"))
136
- rescue Test::Unit::AssertionFailedError => err
137
- raise err
138
- rescue Exception => err
139
- puts err.message
140
- end
141
- end
142
-
143
- def test_fail_when_syntax_no_good
144
- assert_raise SystemExit do
145
- @merge.execute(path("not-ok.js"))
146
- assert_match(/Problems were detected during verification/, @io.string)
147
- assert_no_match(/Ignoring detected problems/, @io.string)
148
- end
149
- end
150
-
151
- def test_ignore_problems
152
- @merge.instance_eval { @ignore = true }
153
-
154
- assert_nothing_raised do
155
- @merge.execute(path("not-ok.js"))
156
- assert_match(/Problems were detected during verification/, @io.string)
157
- assert_match(/Ignoring detected problems/, @io.string)
158
- end
159
- end
160
- end
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. test_helper])) unless defined?(Juicer)
2
-
3
- class TestVerifyCommand < Test::Unit::TestCase
4
-
5
- def setup
6
- @io = StringIO.new
7
- @command = Juicer::Command::Verify.new(Logger.new(@io))
8
- end
9
-
10
- def test_no_files
11
- assert_raise ArgumentError do
12
- @command.execute []
13
- end
14
- end
15
-
16
- def test_installer_not_found
17
- Juicer.home = path("somewhere")
18
-
19
- assert_raise FileNotFoundError do
20
- @command.execute path("a.js")
21
- end
22
- end
23
-
24
- def test_verify_several_files
25
- Juicer.home = path(".juicer")
26
- installer = Juicer::Install::JSLintInstaller.new(path(".juicer"))
27
- installer.install unless installer.installed?
28
-
29
- @command.execute([path("ok.js"), path("not-ok.js"), path("a.js")])
30
- assert_match(/OK!/, @io.string)
31
- assert_match(/Problems detected/, @io.string)
32
- end
33
- end