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.
- data/History.txt +28 -0
- data/Rakefile +84 -36
- data/Readme.rdoc +192 -23
- data/VERSION +1 -0
- data/bin/juicer +2 -4
- data/lib/juicer.rb +9 -10
- data/lib/juicer/asset/path.rb +275 -0
- data/lib/juicer/asset/path_resolver.rb +79 -0
- data/lib/juicer/binary.rb +3 -5
- data/lib/juicer/cache_buster.rb +112 -27
- data/lib/juicer/command/install.rb +4 -2
- data/lib/juicer/command/list.rb +16 -9
- data/lib/juicer/command/merge.rb +30 -14
- data/lib/juicer/command/verify.rb +1 -1
- data/lib/juicer/css_cache_buster.rb +31 -47
- 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 +129 -0
- data/lib/juicer/install/base.rb +2 -2
- data/lib/juicer/install/closure_compiler_installer.rb +69 -0
- data/lib/juicer/install/jslint_installer.rb +3 -3
- data/lib/juicer/install/rhino_installer.rb +3 -2
- data/lib/juicer/install/yui_compressor_installer.rb +3 -2
- data/lib/juicer/jslint.rb +1 -1
- data/lib/juicer/merger/base.rb +1 -1
- data/lib/juicer/merger/javascript_merger.rb +3 -4
- data/lib/juicer/merger/stylesheet_merger.rb +13 -15
- 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 +15 -48
- 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/fixtures/yui-download.html +425 -0
- data/test/test_helper.rb +36 -7
- 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/{juicer/test_chainable.rb → unit/juicer/chainable_test.rb} +1 -1
- data/test/unit/juicer/command/install_test.rb +58 -0
- data/test/{juicer/command/test_list.rb → unit/juicer/command/list_test.rb} +26 -14
- data/test/unit/juicer/command/merge_test.rb +162 -0
- data/test/{juicer/command/test_util.rb → unit/juicer/command/util_test.rb} +10 -6
- data/test/unit/juicer/command/verify_test.rb +48 -0
- data/test/{juicer/test_css_cache_buster.rb → unit/juicer/css_cache_buster_test.rb} +10 -30
- data/test/unit/juicer/datafy_test.rb +37 -0
- data/test/{juicer/merger/test_css_dependency_resolver.rb → unit/juicer/dependency_resolver/css_dependency_resolver_test.rb} +2 -2
- data/test/{juicer/merger/test_javascript_dependency_resolver.rb → unit/juicer/dependency_resolver/javascript_dependency_resolver_test.rb} +13 -2
- data/test/unit/juicer/ext/{#string_test.rb# → string_test.rb} +0 -7
- 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/{juicer/install/test_jslint_installer.rb → unit/juicer/install/jslint_installer_test.rb} +1 -1
- data/test/{juicer/install/test_rhino_installer.rb → unit/juicer/install/rhino_installer_test.rb} +1 -1
- data/test/{juicer/install/test_yui_compressor_installer.rb → unit/juicer/install/yui_compressor_test.rb} +16 -16
- data/test/unit/juicer/jslint_test.rb +60 -0
- data/test/{juicer/merger/test_base.rb → unit/juicer/merger/base_test.rb} +1 -1
- data/test/{juicer/merger/test_javascript_merger.rb → unit/juicer/merger/javascript_merger_test.rb} +2 -2
- data/test/{juicer/merger/test_stylesheet_merger.rb → unit/juicer/merger/stylesheet_merger_test.rb} +15 -13
- data/test/unit/juicer/minifyer/closure_compressor_test.rb +107 -0
- data/test/{integration → unit}/juicer/minifyer/yui_compressor_test.rb +30 -47
- data/test/unit/juicer_test.rb +1 -0
- metadata +207 -113
- data/lib/juicer/core.rb +0 -61
- data/lib/juicer/merger/css_dependency_resolver.rb +0 -25
- data/lib/juicer/merger/dependency_resolver.rb +0 -82
- data/lib/juicer/merger/javascript_dependency_resolver.rb +0 -21
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -34
- data/tasks/rdoc.rake +0 -51
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -292
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
- data/tasks/test/setup.rake +0 -35
- data/tasks/zentest.rake +0 -36
- data/test/juicer/command/test_install.rb +0 -53
- data/test/juicer/command/test_merge.rb +0 -160
- data/test/juicer/command/test_verify.rb +0 -33
- data/test/juicer/install/test_installer_base.rb +0 -195
- data/test/juicer/minifyer/test_yui_compressor.rb +0 -159
- data/test/juicer/test_cache_buster.rb +0 -58
- data/test/juicer/test_core.rb +0 -47
- data/test/juicer/test_jslint.rb +0 -33
- data/test/test_juicer.rb +0 -4
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
module Juicer
|
|
4
|
+
module Install
|
|
5
|
+
class SomeMagicInstaller < Juicer::Install::Base
|
|
6
|
+
def install(version = nil)
|
|
7
|
+
version ||= "1.0.0"
|
|
8
|
+
ver = super(version)
|
|
9
|
+
File.open(File.join(@install_dir, path, "bin", ver + ".app"), "w") do |file|
|
|
10
|
+
file.puts version
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
version
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def uninstall(version = "1.0.0")
|
|
17
|
+
super(version) do |path, version|
|
|
18
|
+
File.delete(File.join(path, "bin", version + ".app"))
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class SomeOtherInstaller < Juicer::Install::SomeMagicInstaller
|
|
24
|
+
def install(version = nil)
|
|
25
|
+
version ||= "1.0.0"
|
|
26
|
+
super(version)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def latest
|
|
30
|
+
"1.0.0"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class TestInstallerBase < Test::Unit::TestCase
|
|
37
|
+
def initialize(*args)
|
|
38
|
+
super
|
|
39
|
+
@juicer_home = File.expand_path(File.join("test", "data", ".juicer"))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def setup
|
|
43
|
+
FileUtils.rm_rf @juicer_home
|
|
44
|
+
@installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "installation directory" do
|
|
48
|
+
should "should be Juicer.home by default" do
|
|
49
|
+
installer = Juicer::Install::SomeMagicInstaller.new
|
|
50
|
+
assert_equal Juicer.home, installer.install_dir
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
should "override installation directory" do
|
|
54
|
+
installer = Juicer::Install::SomeMagicInstaller.new("/home/baluba")
|
|
55
|
+
assert_equal "/home/baluba", installer.install_dir
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context "latest" do
|
|
60
|
+
should "raise NotImplementedError" do
|
|
61
|
+
assert_raise NotImplementedError do
|
|
62
|
+
@installer.latest
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "paths and name" do
|
|
68
|
+
should "reflect installer class name" do
|
|
69
|
+
assert_equal "lib/some_magic", @installer.path
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
should "reflect installer class name for bin path" do
|
|
73
|
+
assert_equal "lib/some_magic/bin", @installer.bin_path
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
should "reflect class name in human name" do
|
|
77
|
+
assert_equal "Some Magic", @installer.name
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context "already installed module" do
|
|
82
|
+
should "report as installed" do
|
|
83
|
+
assert !@installer.installed?("x.y.z")
|
|
84
|
+
@installer.install("x.y.z")
|
|
85
|
+
assert @installer.installed?("x.y.z")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
should "fail re-installation" do
|
|
89
|
+
@installer.install("1.0.0")
|
|
90
|
+
|
|
91
|
+
assert_raise RuntimeError do
|
|
92
|
+
@installer.install("1.0.0")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "installation" do
|
|
98
|
+
should "create bin and release folders" do
|
|
99
|
+
assert_equal "1.0.0", @installer.install("1.0.0")
|
|
100
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/bin"))
|
|
101
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "uninstall" do
|
|
106
|
+
should "remove library path when only version is uninstalled" do
|
|
107
|
+
@installer.install("1.0.0")
|
|
108
|
+
@installer.uninstall("1.0.0")
|
|
109
|
+
assert !File.exists?(File.join(@juicer_home, "lib/some_magic"))
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
should "keep other versions" do
|
|
113
|
+
@installer.install("1.0.0")
|
|
114
|
+
@installer.install("1.0.1")
|
|
115
|
+
@installer.uninstall("1.0.0")
|
|
116
|
+
assert !File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
117
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic"))
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "download" do
|
|
122
|
+
# TODO: Don't download
|
|
123
|
+
should "cache files" do
|
|
124
|
+
File.expects(:delete).at_most(0)
|
|
125
|
+
@installer.download("http://www.julienlecomte.net/yuicompressor/")
|
|
126
|
+
filename = File.join(@juicer_home, "download/some_magic/yuicompressor")
|
|
127
|
+
assert File.exists?(filename)
|
|
128
|
+
@installer.download("http://www.julienlecomte.net/yuicompressor/")
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
should "redownload cached files when forced" do
|
|
132
|
+
File.expects(:delete).at_most(1)
|
|
133
|
+
@installer.download("http://www.julienlecomte.net/yuicompressor/")
|
|
134
|
+
filename = File.join(@juicer_home, "download/some_magic/yuicompressor")
|
|
135
|
+
assert File.exists?(filename)
|
|
136
|
+
File.expects(:open).at_most(1)
|
|
137
|
+
@installer.download("http://www.julienlecomte.net/yuicompressor/", true)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
context "installer dependencies" do
|
|
142
|
+
should "not return true from installer when missing dependencies" do
|
|
143
|
+
@installer.install
|
|
144
|
+
|
|
145
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
146
|
+
assert !installer.installed?("1.0.1"), "Installer should be installed"
|
|
147
|
+
|
|
148
|
+
installer.dependency Juicer::Install::SomeOtherInstaller
|
|
149
|
+
assert !installer.installed?("1.0.1"), "Installer should not report as being installed when missing dependencies"
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
should "install single dependency" do
|
|
153
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
154
|
+
installer.dependency Juicer::Install::SomeOtherInstaller
|
|
155
|
+
installer.install "1.0.0"
|
|
156
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
157
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/1.0.0"))
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
should "not raise error when they exist" do
|
|
161
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
162
|
+
installer.dependency Juicer::Install::SomeOtherInstaller
|
|
163
|
+
|
|
164
|
+
dep = Juicer::Install::SomeOtherInstaller.new
|
|
165
|
+
dep.install unless dep.installed?
|
|
166
|
+
|
|
167
|
+
assert_nothing_raised do
|
|
168
|
+
installer.install "1.0.0"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
should "get dependency from single symbol" do
|
|
173
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
174
|
+
installer.dependency :some_other
|
|
175
|
+
installer.install "1.0.0"
|
|
176
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
177
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/1.0.0"))
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
should "get dependency from single string" do
|
|
181
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
182
|
+
installer.dependency "some_other"
|
|
183
|
+
installer.install "1.0.0"
|
|
184
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
185
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/1.0.0"))
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
should "support multiple dependencies" do
|
|
189
|
+
installer = Juicer::Install::SomeMagicInstaller.new(@juicer_home)
|
|
190
|
+
installer.dependency :some_other
|
|
191
|
+
installer.dependency :some_other, "2.0.4"
|
|
192
|
+
installer.dependency :some_other, "3.0.5"
|
|
193
|
+
installer.install "1.0.0"
|
|
194
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_magic/1.0.0"))
|
|
195
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/1.0.0"))
|
|
196
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/2.0.4"))
|
|
197
|
+
assert File.exists?(File.join(@juicer_home, "lib/some_other/3.0.5"))
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
context "resolving class" do
|
|
202
|
+
should "accept class input" do
|
|
203
|
+
assert_equal Juicer::Install::SomeMagicInstaller, Juicer::Install.get(Juicer::Install::SomeMagicInstaller)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
should "accept symbol input" do
|
|
207
|
+
assert_equal Juicer::Install::SomeMagicInstaller, Juicer::Install.get(:some_magic)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
should "accept string input" do
|
|
211
|
+
assert_equal Juicer::Install::SomeMagicInstaller, Juicer::Install.get("some_magic")
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "test_helper"
|
|
2
2
|
|
|
3
3
|
class TestYuiCompressorInstall < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
@@ -35,22 +35,22 @@ class TestYuiCompressorInstall < Test::Unit::TestCase
|
|
|
35
35
|
assert !File.exists?(path(".juicer/lib/yui_compressor"))
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def test_install_specific_version
|
|
39
|
-
|
|
38
|
+
# def test_install_specific_version
|
|
39
|
+
# @installer.install("2.3.5")
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
end
|
|
41
|
+
# assert File.exists?(path(".juicer/lib/yui_compressor/bin"))
|
|
42
|
+
# assert File.exists?(path(".juicer/lib/yui_compressor/2.3.5"))
|
|
43
|
+
# assert_equal "yuicompressor-2.3.5.jar", File.basename(Dir.glob(path(".juicer/lib/yui_compressor/bin/*"))[0])
|
|
44
|
+
# end
|
|
45
45
|
|
|
46
|
-
def test_uninstall_should_leave_directories_when_other_versions_are_installed
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
# def test_uninstall_should_leave_directories_when_other_versions_are_installed
|
|
47
|
+
# @installer.install
|
|
48
|
+
# @installer.install("2.3.5")
|
|
49
|
+
# assert File.exists?(path(".juicer/lib/yui_compressor/bin"))
|
|
50
|
+
# assert_equal 6, Dir.glob(path(".juicer/lib/yui_compressor/**/*")).find_all { |f| File.file?(f) }.length
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
end
|
|
52
|
+
# @installer.uninstall("2.3.5")
|
|
53
|
+
# assert File.exists?(path(".juicer/lib/yui_compressor"))
|
|
54
|
+
# assert_equal 3, Dir.glob(path(".juicer/lib/yui_compressor/**/*")).find_all { |f| File.file?(f) }.length
|
|
55
|
+
# end
|
|
56
56
|
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class TestJsLint < Test::Unit::TestCase
|
|
4
|
+
def initialize(*args)
|
|
5
|
+
@path = File.expand_path(path("../bin"))
|
|
6
|
+
@file = path("jsltest.js")
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
FileUtils.mkdir(path("")) unless File.exists?(path(""))
|
|
12
|
+
File.open(@file, "w") { |f| f.puts "" }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def teardown
|
|
16
|
+
File.delete(@file)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "verifying file with jslint" do
|
|
20
|
+
should "shell out to rhino/jslint" do
|
|
21
|
+
jslint = Juicer::JsLint.new(:bin_path => @path)
|
|
22
|
+
jslint.expects(:execute).with("-jar \"#{@path}/rhino1_7R2-RC1.jar\" \"#{@path}/jslint-1.0.js\" \"#{@file}\"").returns("jslint: No problems")
|
|
23
|
+
|
|
24
|
+
assert jslint.check(@file).ok?
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "jslint report returns" do
|
|
29
|
+
should "be a report object for valid files" do
|
|
30
|
+
jslint = Juicer::JsLint.new(:bin_path => @path)
|
|
31
|
+
jslint.expects(:execute).returns("jslint: No problems")
|
|
32
|
+
|
|
33
|
+
assert_equal Juicer::JsLint::Report, jslint.check(@file).class
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
should "be a report object for invalid files" do
|
|
37
|
+
jslint = Juicer::JsLint.new(:bin_path => @path)
|
|
38
|
+
jslint.expects(:execute).returns("Wrong use of semicolon\nWrong blabla")
|
|
39
|
+
|
|
40
|
+
assert_equal Juicer::JsLint::Report, jslint.check(path("not-ok.js")).class
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "errors" do
|
|
45
|
+
should "be available on report" do
|
|
46
|
+
jslint = Juicer::JsLint.new(:bin_path => @path)
|
|
47
|
+
jslint.expects(:execute).returns("Wrong use of semicolon\nWrong blabla\nWrong use of semicolon\nWrong blabla")
|
|
48
|
+
|
|
49
|
+
assert_equal 2, jslint.check(@file).errors.length
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
should "be error objects" do
|
|
53
|
+
jslint = Juicer::JsLint.new(:bin_path => @path)
|
|
54
|
+
jslint.expects(:execute).returns("Wrong use of semicolon\nWrong blabla")
|
|
55
|
+
|
|
56
|
+
error = jslint.check(@file).errors.first
|
|
57
|
+
assert_equal Juicer::JsLint::Error, error.class
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
data/test/{juicer/merger/test_javascript_merger.rb → unit/juicer/merger/javascript_merger_test.rb}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "test_helper"
|
|
2
2
|
|
|
3
3
|
class TestJavaScriptMerger < Test::Unit::TestCase
|
|
4
4
|
|
|
@@ -14,7 +14,7 @@ class TestJavaScriptMerger < Test::Unit::TestCase
|
|
|
14
14
|
|
|
15
15
|
def test_init
|
|
16
16
|
Juicer::Merger::JavaScriptMerger.publicize_methods do
|
|
17
|
-
assert_equal Juicer::
|
|
17
|
+
assert_equal Juicer::JavaScriptDependencyResolver, @file_merger.dependency_resolver.class
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
data/test/{juicer/merger/test_stylesheet_merger.rb → unit/juicer/merger/stylesheet_merger_test.rb}
RENAMED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "test_helper"
|
|
2
2
|
|
|
3
3
|
class TestStylesheetMerger < Test::Unit::TestCase
|
|
4
4
|
|
|
5
5
|
def setup
|
|
6
6
|
@file_merger = Juicer::Merger::StylesheetMerger.new
|
|
7
7
|
Juicer::Test::FileSetup.new.create
|
|
8
|
+
@cwd = Dir.pwd
|
|
8
9
|
Dir.chdir path("")
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def teardown
|
|
12
13
|
file = path('test_out.css')
|
|
13
14
|
File.delete(file) if File.exists?(file)
|
|
15
|
+
Dir.chdir(@cwd)
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
21
23
|
|
|
22
24
|
def test_merge
|
|
23
25
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
@@ -78,7 +80,7 @@ EOF
|
|
|
78
80
|
end
|
|
79
81
|
end
|
|
80
82
|
|
|
81
|
-
def
|
|
83
|
+
def test_resolve_path_error_when_relative_missing_document_root
|
|
82
84
|
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true
|
|
83
85
|
|
|
84
86
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
@@ -89,7 +91,7 @@ EOF
|
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
def test_resolve_path_should_make_absolute_urls_relative
|
|
92
|
-
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :
|
|
94
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :document_root => "/home/usr"
|
|
93
95
|
|
|
94
96
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
95
97
|
merger.instance_eval { @root = Pathname.new "/home/usr/design" }
|
|
@@ -107,7 +109,7 @@ EOF
|
|
|
107
109
|
end
|
|
108
110
|
end
|
|
109
111
|
|
|
110
|
-
def
|
|
112
|
+
def test_resolve_path_error_when_missing_absolute_document_root
|
|
111
113
|
merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true
|
|
112
114
|
|
|
113
115
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
@@ -118,7 +120,7 @@ EOF
|
|
|
118
120
|
end
|
|
119
121
|
|
|
120
122
|
def test_resolve_path_should_make_relative_urls_absolute
|
|
121
|
-
merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true, :
|
|
123
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :absolute_urls => true, :document_root => "/home/usr"
|
|
122
124
|
|
|
123
125
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
124
126
|
merger.instance_eval { @root = Pathname.new "/home/usr/design" }
|
|
@@ -136,7 +138,7 @@ EOF
|
|
|
136
138
|
end
|
|
137
139
|
|
|
138
140
|
def test_resolve_path_should_redefine_absolute_urls
|
|
139
|
-
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :
|
|
141
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :relative_urls => true, :document_root => "/home/usr"
|
|
140
142
|
|
|
141
143
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
142
144
|
merger.instance_eval { @root = Pathname.new "/home/usr/design2/css" }
|
|
@@ -156,8 +158,8 @@ EOF
|
|
|
156
158
|
end
|
|
157
159
|
end
|
|
158
160
|
|
|
159
|
-
def
|
|
160
|
-
merger = Juicer::Merger::StylesheetMerger.new [], :
|
|
161
|
+
def test_resolve_paths_should_handle_relative_document_roots
|
|
162
|
+
merger = Juicer::Merger::StylesheetMerger.new [], :document_root => "test/data", :relative_urls => true
|
|
161
163
|
merger << File.expand_path("css/test2.css")
|
|
162
164
|
|
|
163
165
|
Juicer::Merger::StylesheetMerger.publicize_methods do
|
|
@@ -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
|