juicer 0.2.6 → 1.0.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 (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