ktheory-juicer 1.0.0.ktheory1
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.
- data/History.txt +30 -0
- data/Manifest.txt +58 -0
- data/Rakefile +96 -0
- data/Readme.rdoc +312 -0
- data/VERSION +1 -0
- data/bin/juicer +8 -0
- data/lib/juicer.rb +70 -0
- data/lib/juicer/asset/path.rb +275 -0
- data/lib/juicer/asset/path_resolver.rb +79 -0
- data/lib/juicer/binary.rb +171 -0
- data/lib/juicer/cache_buster.rb +130 -0
- data/lib/juicer/chainable.rb +106 -0
- data/lib/juicer/cli.rb +56 -0
- data/lib/juicer/command/install.rb +61 -0
- data/lib/juicer/command/list.rb +57 -0
- data/lib/juicer/command/merge.rb +205 -0
- data/lib/juicer/command/util.rb +32 -0
- data/lib/juicer/command/verify.rb +60 -0
- data/lib/juicer/css_cache_buster.rb +80 -0
- data/lib/juicer/datafy/datafy.rb +20 -0
- data/lib/juicer/dependency_resolver/css_dependency_resolver.rb +29 -0
- data/lib/juicer/dependency_resolver/dependency_resolver.rb +101 -0
- data/lib/juicer/dependency_resolver/javascript_dependency_resolver.rb +23 -0
- data/lib/juicer/ext/logger.rb +5 -0
- data/lib/juicer/ext/string.rb +47 -0
- data/lib/juicer/ext/symbol.rb +15 -0
- data/lib/juicer/image_embed.rb +136 -0
- data/lib/juicer/install/base.rb +186 -0
- data/lib/juicer/install/closure_compiler_installer.rb +69 -0
- data/lib/juicer/install/jslint_installer.rb +51 -0
- data/lib/juicer/install/rhino_installer.rb +53 -0
- data/lib/juicer/install/yui_compressor_installer.rb +67 -0
- data/lib/juicer/jslint.rb +90 -0
- data/lib/juicer/merger/base.rb +74 -0
- data/lib/juicer/merger/javascript_merger.rb +29 -0
- data/lib/juicer/merger/stylesheet_merger.rb +110 -0
- data/lib/juicer/minifyer/closure_compiler.rb +90 -0
- data/lib/juicer/minifyer/java_base.rb +77 -0
- data/lib/juicer/minifyer/yui_compressor.rb +96 -0
- data/test/bin/jslint-1.0.js +523 -0
- data/test/bin/jslint.js +523 -0
- data/test/bin/rhino1_7R1.zip +0 -0
- data/test/bin/rhino1_7R2-RC1.jar +0 -0
- data/test/bin/rhino1_7R2-RC1.zip +0 -0
- data/test/bin/yuicompressor +0 -0
- data/test/bin/yuicompressor-2.3.5.zip +0 -0
- data/test/bin/yuicompressor-2.4.2.jar +0 -0
- data/test/bin/yuicompressor-2.4.2.zip +0 -0
- data/test/data/Changelog.txt +10 -0
- data/test/data/a.css +3 -0
- data/test/data/a.js +5 -0
- data/test/data/a1.css +5 -0
- data/test/data/b.css +1 -0
- data/test/data/b.js +5 -0
- data/test/data/b1.css +5 -0
- data/test/data/c1.css +3 -0
- data/test/data/css/2.gif +1 -0
- data/test/data/css/test.css +11 -0
- data/test/data/css/test2.css +1 -0
- data/test/data/d1.css +3 -0
- data/test/data/images/1.png +1 -0
- data/test/data/my_app.js +2 -0
- data/test/data/not-ok.js +2 -0
- data/test/data/ok.js +3 -0
- data/test/data/path_test.css +5 -0
- data/test/data/path_test2.css +14 -0
- data/test/data/pkg/module/moda.js +2 -0
- data/test/data/pkg/module/modb.js +3 -0
- data/test/data/pkg/pkg.js +1 -0
- data/test/test_helper.rb +169 -0
- data/test/unit/juicer/asset/path_resolver_test.rb +76 -0
- data/test/unit/juicer/asset/path_test.rb +370 -0
- data/test/unit/juicer/cache_buster_test.rb +104 -0
- data/test/unit/juicer/chainable_test.rb +94 -0
- data/test/unit/juicer/command/install_test.rb +58 -0
- data/test/unit/juicer/command/list_test.rb +81 -0
- data/test/unit/juicer/command/merge_test.rb +162 -0
- data/test/unit/juicer/command/util_test.rb +58 -0
- data/test/unit/juicer/command/verify_test.rb +48 -0
- data/test/unit/juicer/css_cache_buster_test.rb +71 -0
- data/test/unit/juicer/datafy_test.rb +37 -0
- data/test/unit/juicer/dependency_resolver/css_dependency_resolver_test.rb +36 -0
- data/test/unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb +50 -0
- data/test/unit/juicer/ext/string_test.rb +59 -0
- data/test/unit/juicer/ext/symbol_test.rb +27 -0
- data/test/unit/juicer/image_embed_test.rb +271 -0
- data/test/unit/juicer/install/installer_base_test.rb +214 -0
- data/test/unit/juicer/install/jslint_installer_test.rb +54 -0
- data/test/unit/juicer/install/rhino_installer_test.rb +57 -0
- data/test/unit/juicer/install/yui_compressor_test.rb +56 -0
- data/test/unit/juicer/jslint_test.rb +60 -0
- data/test/unit/juicer/merger/base_test.rb +122 -0
- data/test/unit/juicer/merger/javascript_merger_test.rb +74 -0
- data/test/unit/juicer/merger/stylesheet_merger_test.rb +180 -0
- data/test/unit/juicer/minifyer/closure_compressor_test.rb +107 -0
- data/test/unit/juicer/minifyer/yui_compressor_test.rb +116 -0
- data/test/unit/juicer_test.rb +1 -0
- metadata +265 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class TestJavaScriptMerger < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@file_merger = Juicer::Merger::JavaScriptMerger.new
|
7
|
+
Juicer::Test::FileSetup.new.create
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
file = path('test_out.js')
|
12
|
+
File.delete(file) if File.exists?(file)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_init
|
16
|
+
Juicer::Merger::JavaScriptMerger.publicize_methods do
|
17
|
+
assert_equal Juicer::JavaScriptDependencyResolver, @file_merger.dependency_resolver.class
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_merge
|
22
|
+
Juicer::Merger::JavaScriptMerger.publicize_methods do
|
23
|
+
a_content = <<EOF
|
24
|
+
/**
|
25
|
+
* @depend b.js
|
26
|
+
*/
|
27
|
+
|
28
|
+
/* Dette er a.js */
|
29
|
+
|
30
|
+
EOF
|
31
|
+
content = @file_merger.merge(path('a.js'))
|
32
|
+
assert_equal a_content, content
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_constructor
|
37
|
+
file_merger = Juicer::Merger::JavaScriptMerger.new(path('a.js'))
|
38
|
+
assert_equal 2, file_merger.files.length
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_append
|
42
|
+
@file_merger << path('a.js')
|
43
|
+
assert_equal 2, @file_merger.files.length
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_save
|
47
|
+
a_js = path('a.js')
|
48
|
+
b_js = path('b.js')
|
49
|
+
merged = <<EOF
|
50
|
+
/**
|
51
|
+
* @depends a.js
|
52
|
+
*/
|
53
|
+
|
54
|
+
/* Dette er b.css */
|
55
|
+
|
56
|
+
/**
|
57
|
+
* @depend b.js
|
58
|
+
*/
|
59
|
+
|
60
|
+
/* Dette er a.js */
|
61
|
+
|
62
|
+
EOF
|
63
|
+
|
64
|
+
@file_merger << a_js
|
65
|
+
ios = StringIO.new
|
66
|
+
@file_merger.save(ios)
|
67
|
+
assert_equal merged, ios.string
|
68
|
+
|
69
|
+
output_file = path('test_out.js')
|
70
|
+
@file_merger.save(output_file)
|
71
|
+
|
72
|
+
assert_equal merged, IO.read(output_file)
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class TestStylesheetMerger < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@file_merger = Juicer::Merger::StylesheetMerger.new
|
7
|
+
Juicer::Test::FileSetup.new.create
|
8
|
+
@cwd = Dir.pwd
|
9
|
+
Dir.chdir path("")
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
file = path('test_out.css')
|
14
|
+
File.delete(file) if File.exists?(file)
|
15
|
+
Dir.chdir(@cwd)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_init
|
19
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
20
|
+
assert_equal Juicer::CssDependencyResolver, @file_merger.dependency_resolver.class
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_merge
|
25
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
26
|
+
a_content = "\n\n/* Dette er a.css */\n"
|
27
|
+
content = @file_merger.merge(path('a.css'))
|
28
|
+
assert_equal a_content + "\n", content
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_constructor
|
33
|
+
file_merger = Juicer::Merger::StylesheetMerger.new(path('a.css'))
|
34
|
+
assert_equal 2, file_merger.files.length
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_append
|
38
|
+
@file_merger << path('a.css')
|
39
|
+
assert_equal 2, @file_merger.files.length
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_save
|
43
|
+
a_css = path('a.css')
|
44
|
+
b_css = path('b.css')
|
45
|
+
merged = <<EOF
|
46
|
+
/* Dette er b.css */
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
/* Dette er a.css */
|
51
|
+
|
52
|
+
EOF
|
53
|
+
|
54
|
+
@file_merger << a_css
|
55
|
+
ios = StringIO.new
|
56
|
+
@file_merger.save(ios)
|
57
|
+
assert_equal merged, ios.string
|
58
|
+
|
59
|
+
output_file = path('test_out.css')
|
60
|
+
@file_merger.save(output_file)
|
61
|
+
|
62
|
+
assert_equal merged, IO.read(output_file)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_included_files_should_have_referenced_relative_urls_rereferenced
|
66
|
+
@file_merger << path("path_test.css")
|
67
|
+
ios = StringIO.new
|
68
|
+
@file_merger.save(ios)
|
69
|
+
files = ios.string.scan(/url\(([^\)]*)\)/).collect { |f| f.first }.uniq.sort
|
70
|
+
|
71
|
+
assert_equal "a1.css::css/2.gif::images/1.png", files.join("::")
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_resolve_path_should_leave_absolute_urls
|
75
|
+
merger = Juicer::Merger::StylesheetMerger.new
|
76
|
+
url = "/some/url"
|
77
|
+
|
78
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
79
|
+
assert_equal url, merger.resolve_path(url, nil)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_resolve_path_error_when_relative_missing_web_root
|
84
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true
|
85
|
+
|
86
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
87
|
+
assert_raise ArgumentError do
|
88
|
+
merger.resolve_path("/some/url", nil)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_resolve_path_should_make_absolute_urls_relative
|
94
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :web_root => "/home/usr"
|
95
|
+
|
96
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
97
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design" }
|
98
|
+
assert_equal "../some/url", merger.resolve_path("/some/url", nil)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_resolve_path_should_leave_full_urls
|
103
|
+
merger = Juicer::Merger::StylesheetMerger.new []
|
104
|
+
url = "http://test.com"
|
105
|
+
|
106
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
107
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design" }
|
108
|
+
assert_equal url, merger.resolve_path(url, nil)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_resolve_path_error_when_missing_absolute_web_root
|
113
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true
|
114
|
+
|
115
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
116
|
+
assert_raise ArgumentError do
|
117
|
+
merger.resolve_path("../some/url", nil)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_resolve_path_should_make_relative_urls_absolute
|
123
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true, :web_root => "/home/usr"
|
124
|
+
|
125
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
126
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design" }
|
127
|
+
assert_equal "/design/images/1.png", merger.resolve_path("../images/1.png", "/home/usr/design/css")
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_resolve_path_should_redefine_relative_urls
|
132
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true
|
133
|
+
|
134
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
135
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" }
|
136
|
+
assert_equal "../../design/images/1.png", merger.resolve_path("../images/1.png", "/home/usr/design/css")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_resolve_path_should_redefine_absolute_urls
|
141
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :web_root => "/home/usr"
|
142
|
+
|
143
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
144
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" }
|
145
|
+
assert_equal "../../images/1.png", merger.resolve_path("/images/1.png", "/home/usr/design/css")
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_resolve_path_with_hosts_should_cycle_asset_hosts
|
150
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :hosts => ["http://assets1", "http://assets2", "http://assets3"]
|
151
|
+
|
152
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
153
|
+
merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" }
|
154
|
+
assert_equal "http://assets1/images/1.png", merger.resolve_path("/images/1.png", nil)
|
155
|
+
assert_equal "http://assets2/images/1.png", merger.resolve_path("/images/1.png", nil)
|
156
|
+
assert_equal "http://assets3/images/1.png", merger.resolve_path("/images/1.png", nil)
|
157
|
+
assert_equal "http://assets1/images/1.png", merger.resolve_path("/images/1.png", nil)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_resolve_paths_should_handle_relative_web_roots
|
162
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :web_root => "test/data", :relative_urls => true
|
163
|
+
merger << File.expand_path("css/test2.css")
|
164
|
+
|
165
|
+
Juicer::Merger::StylesheetMerger.publicize_methods do
|
166
|
+
merger.instance_eval { @root = Pathname.new File.expand_path("test/data/css") }
|
167
|
+
assert_equal "../images/1.png", merger.resolve_path("/images/1.png", nil)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_cycle_asset_hosts_should_use_same_host_for_same_url
|
172
|
+
@file_merger = Juicer::Merger::StylesheetMerger.new nil, :hosts => ["http://assets1", "http://assets2", "http://assets3"]
|
173
|
+
@file_merger << path("path_test2.css")
|
174
|
+
ios = StringIO.new
|
175
|
+
@file_merger.save(ios)
|
176
|
+
files = ios.string.scan(/url\(([^\)]*)\)/).collect { |f| f.first }
|
177
|
+
|
178
|
+
assert_equal "1/images/1.png::2/css/2.gif::3/a1.css::2/css/2.gif::1/a2.css".gsub(/(\d\/)/, 'http://assets\1'), files.join("::")
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "juicer/minifyer/closure_compiler"
|
3
|
+
|
4
|
+
class ClosureCompilerTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@jar = "compiler.jar"
|
7
|
+
@input = "in-file.css"
|
8
|
+
@output = "out-file.css"
|
9
|
+
@cmd = %Q{-jar "#@jar"}
|
10
|
+
@closure = Juicer::Minifyer::ClosureCompiler.new
|
11
|
+
@closure.stubs(:locate_jar).returns(@jar)
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#save" do
|
15
|
+
should "overwrite existing file" do
|
16
|
+
@closure.expects(:execute).with(%Q{#@cmd -js_output_file "#@output" -js "#@output"})
|
17
|
+
@closure.save(@output, @output)
|
18
|
+
end
|
19
|
+
|
20
|
+
should "write compressed input to output" do
|
21
|
+
@closure.expects(:execute).with(%Q{#@cmd -js_output_file "#@output" -js "#@input"})
|
22
|
+
@closure.save(@input, @output)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "create non-existant path" do
|
26
|
+
output = "some/nested/directory"
|
27
|
+
@closure.expects(:execute).with(%Q{#@cmd -js_output_file "#{output}/file.css" -js "#@input"})
|
28
|
+
FileUtils.expects(:mkdir_p).with(output)
|
29
|
+
@closure.save(@input, "#{output}/file.css")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "locating jar" do
|
34
|
+
setup do
|
35
|
+
# Avoid developer env settings
|
36
|
+
@closure_home = ENV['CLOSUREC_HOME']
|
37
|
+
ENV.delete('CLOSUREC_HOME')
|
38
|
+
end
|
39
|
+
|
40
|
+
teardown do
|
41
|
+
ENV['CLOSUREC_HOME'] = @closure_home
|
42
|
+
File.delete('compiler-2.3.4.jar') if File.exists?('compiler-2.3.4.jar')
|
43
|
+
File.delete('compiler-2.3.5.jar') if File.exists?('compiler-2.3.5.jar')
|
44
|
+
File.delete('compiler.jar') if File.exists?('compiler.jar')
|
45
|
+
FileUtils.rm_rf("another") if File.exists?("another")
|
46
|
+
end
|
47
|
+
|
48
|
+
should "not find jar when no jars on path" do
|
49
|
+
Juicer::Minifyer::ClosureCompiler.publicize_methods do
|
50
|
+
closure = Juicer::Minifyer::ClosureCompiler.new
|
51
|
+
|
52
|
+
assert_nil closure.locate_jar
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
should "find only jar in path" do
|
57
|
+
Juicer::Minifyer::ClosureCompiler.publicize_methods do
|
58
|
+
File.open('compiler-2.3.4.jar', 'w') { |f| f.puts '' }
|
59
|
+
closure = Juicer::Minifyer::ClosureCompiler.new
|
60
|
+
|
61
|
+
assert_equal File.expand_path('compiler-2.3.4.jar'), closure.locate_jar
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
should "find most recent of two jars on path" do
|
66
|
+
Juicer::Minifyer::ClosureCompiler.publicize_methods do
|
67
|
+
# Create files
|
68
|
+
File.open('compiler-2.3.4.jar', 'w') { |f| f.puts '' }
|
69
|
+
File.open('compiler-2.3.5.jar', 'w') { |f| f.puts '' }
|
70
|
+
|
71
|
+
closure = Juicer::Minifyer::ClosureCompiler.new
|
72
|
+
|
73
|
+
# Test
|
74
|
+
assert_equal File.expand_path('compiler-2.3.5.jar'), closure.locate_jar
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
should "find most recent of three jar files on path" do
|
79
|
+
Juicer::Minifyer::ClosureCompiler.publicize_methods do
|
80
|
+
# Create files
|
81
|
+
File.open('compiler-2.3.4.jar', 'w') { |f| f.puts '' }
|
82
|
+
File.open('compiler-2.3.5.jar', 'w') { |f| f.puts '' }
|
83
|
+
File.open('compiler.jar', 'w') { |f| f.puts '' }
|
84
|
+
|
85
|
+
closure = Juicer::Minifyer::ClosureCompiler.new
|
86
|
+
|
87
|
+
# Test
|
88
|
+
assert_equal File.expand_path('compiler.jar'), closure.locate_jar
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
should "find jar in custom directory" do
|
93
|
+
Juicer::Minifyer::ClosureCompiler.publicize_methods do
|
94
|
+
# Prepare
|
95
|
+
Dir.mkdir('another')
|
96
|
+
File.open('another/compiler-2.3.4.jar', 'w') { |f| f.puts "" }
|
97
|
+
|
98
|
+
closure = Juicer::Minifyer::ClosureCompiler.new
|
99
|
+
|
100
|
+
# Test
|
101
|
+
assert_nil closure.locate_jar
|
102
|
+
closure = Juicer::Minifyer::ClosureCompiler.new({ :bin_path => 'another' })
|
103
|
+
assert_equal File.expand_path('another/compiler-2.3.4.jar'), closure.locate_jar
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class TestYuiCompressor < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@jar = "yuicompressor-2.4.2.jar"
|
6
|
+
@input = "in-file.css"
|
7
|
+
@output = "out-file.css"
|
8
|
+
@cmd = %Q{-jar "#@jar"}
|
9
|
+
@yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
10
|
+
@yui_compressor.stubs(:locate_jar).returns(@jar)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "#save" do
|
14
|
+
should "overwrite existing file" do
|
15
|
+
@yui_compressor.expects(:execute).with(%Q{#@cmd -o "#@output" "#@output"})
|
16
|
+
@yui_compressor.save(@output)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "use provided symbol type" do
|
20
|
+
@yui_compressor.expects(:execute).with(%Q{#@cmd -o "#@output" "#@input"})
|
21
|
+
@yui_compressor.save(@input, @output, :css)
|
22
|
+
end
|
23
|
+
|
24
|
+
should "use provided string type" do
|
25
|
+
@yui_compressor.expects(:execute).with(%Q{#@cmd -o "#@output" "#@input"})
|
26
|
+
@yui_compressor.save(@input, @output, "css")
|
27
|
+
end
|
28
|
+
|
29
|
+
should "write compressed input to output" do
|
30
|
+
@yui_compressor.expects(:execute).with(%Q{#@cmd -o "#@output" "#@input"})
|
31
|
+
@yui_compressor.save(@input, @output)
|
32
|
+
end
|
33
|
+
|
34
|
+
should "create non-existant path" do
|
35
|
+
output = "some/nested/directory"
|
36
|
+
@yui_compressor.expects(:execute).with(%Q{#@cmd -o "#{output}/file.css" "#@input"})
|
37
|
+
FileUtils.expects(:mkdir_p).with(output)
|
38
|
+
@yui_compressor.save(@input, "#{output}/file.css")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "locating jar" do
|
43
|
+
setup do
|
44
|
+
# Avoid developer env settings
|
45
|
+
@yuic_home = ENV['YUIC_HOME']
|
46
|
+
ENV.delete('YUIC_HOME')
|
47
|
+
end
|
48
|
+
|
49
|
+
teardown do
|
50
|
+
ENV['YUIC_HOME'] = @yuic_home
|
51
|
+
File.delete('yuicompressor-2.3.4.jar') if File.exists?('yuicompressor-2.3.4.jar')
|
52
|
+
File.delete('yuicompressor-2.3.5.jar') if File.exists?('yuicompressor-2.3.5.jar')
|
53
|
+
File.delete('yuicompressor.jar') if File.exists?('yuicompressor.jar')
|
54
|
+
FileUtils.rm_rf("another") if File.exists?("another")
|
55
|
+
end
|
56
|
+
|
57
|
+
should "not find jar when no jars on path" do
|
58
|
+
Juicer::Minifyer::YuiCompressor.publicize_methods do
|
59
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
60
|
+
|
61
|
+
assert_nil yui_compressor.locate_jar
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
should "find only jar in path" do
|
66
|
+
Juicer::Minifyer::YuiCompressor.publicize_methods do
|
67
|
+
File.open('yuicompressor-2.3.4.jar', 'w') { |f| f.puts '' }
|
68
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
69
|
+
|
70
|
+
assert_equal File.expand_path('yuicompressor-2.3.4.jar'), yui_compressor.locate_jar
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
should "find most recent of two jars on path" do
|
75
|
+
Juicer::Minifyer::YuiCompressor.publicize_methods do
|
76
|
+
# Create files
|
77
|
+
File.open('yuicompressor-2.3.4.jar', 'w') { |f| f.puts '' }
|
78
|
+
File.open('yuicompressor-2.3.5.jar', 'w') { |f| f.puts '' }
|
79
|
+
|
80
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
81
|
+
|
82
|
+
# Test
|
83
|
+
assert_equal File.expand_path('yuicompressor-2.3.5.jar'), yui_compressor.locate_jar
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
should "find most recent of three jar files on path" do
|
88
|
+
Juicer::Minifyer::YuiCompressor.publicize_methods do
|
89
|
+
# Create files
|
90
|
+
File.open('yuicompressor-2.3.4.jar', 'w') { |f| f.puts '' }
|
91
|
+
File.open('yuicompressor-2.3.5.jar', 'w') { |f| f.puts '' }
|
92
|
+
File.open('yuicompressor.jar', 'w') { |f| f.puts '' }
|
93
|
+
|
94
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
95
|
+
|
96
|
+
# Test
|
97
|
+
assert_equal File.expand_path('yuicompressor.jar'), yui_compressor.locate_jar
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
should "find jar in custom directory" do
|
102
|
+
Juicer::Minifyer::YuiCompressor.publicize_methods do
|
103
|
+
# Prepare
|
104
|
+
Dir.mkdir('another')
|
105
|
+
File.open('another/yuicompressor-2.3.4.jar', 'w') { |f| f.puts "" }
|
106
|
+
|
107
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new
|
108
|
+
|
109
|
+
# Test
|
110
|
+
assert_nil yui_compressor.locate_jar
|
111
|
+
yui_compressor = Juicer::Minifyer::YuiCompressor.new({ :bin_path => 'another' })
|
112
|
+
assert_equal File.expand_path('another/yuicompressor-2.3.4.jar'), yui_compressor.locate_jar
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|