test/test_jim_installer.rb in jim-0.1.2 vs test/test_jim_installer.rb in jim-0.2.0
- old
+ new
@@ -3,117 +3,234 @@
class TestJimInstaller < Test::Unit::TestCase
context "Jim::Installer" do
setup do
# clear the tmp dir
- FileUtils.rm_rf(tmp_path) if File.directory?(tmp_path)
+ FileUtils.rm_rf(tmp_path) if File.exist?(tmp_path)
+ FileUtils.rm_rf(JIM_TMP_ROOT) if File.exist?(JIM_TMP_ROOT)
end
-
+
context "initializing" do
setup do
@installer = Jim::Installer.new('fetchpath', 'installpath', {:version => '1.1'})
end
-
+
should "set fetch path" do
assert_equal Pathname.new('fetchpath'), @installer.fetch_path
end
-
+
should "set install path" do
assert_equal Pathname.new('installpath'), @installer.install_path
end
-
+
should "set options" do
assert_equal({:version => '1.1'}, @installer.options)
end
-
+
end
-
+
context "fetch" do
setup do
@url = "http://jquery.com/download/jquery-1.4.1.js"
FakeWeb.register_uri(:get, @url, :body => fixture('jquery-1.4.1.js'))
end
-
+
should "fetch remote file" do
installer = Jim::Installer.new(@url, tmp_path)
assert installer.fetch
end
-
+
should "fetch local file" do
installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
fetched_path = installer.fetch
assert_dir fetched_path.dirname
assert_equal 'jquery-1.4.1.js', fetched_path.basename.to_s
end
-
+
end
-
+
context "determine_name_and_version" do
-
+
should "determine from filename" do
installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
assert installer.fetch
assert installer.determine_name_and_version
assert_equal '1.4.1', installer.version
assert_equal 'jquery', installer.name
end
-
+
should "determine from package.json" do
installer = Jim::Installer.new(fixture_path('mustache.js'), tmp_path)
assert installer.fetch
assert installer.determine_name_and_version
assert_equal "0.2.2", installer.version
assert_equal "mustache", installer.name
end
-
+
should "determine from file comments" do
installer = Jim::Installer.new(fixture_path('infoincomments.js'), tmp_path)
assert installer.fetch
assert installer.determine_name_and_version
assert_equal 'myproject', installer.name
assert_equal '1.2.2', installer.version
end
-
+
should "determine from options" do
installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path, :name => 'myproject', :version => '1.1.1')
assert installer.fetch
assert installer.determine_name_and_version
assert_equal 'myproject', installer.name
assert_equal '1.1.1', installer.version
end
-
+
should "have default version if version can not be determined" do
installer = Jim::Installer.new(fixture_path('noversion.js'), tmp_path)
assert installer.fetch
assert installer.determine_name_and_version
assert_equal 'noversion', installer.name
assert_equal '0', installer.version
end
-
+
end
-
+
context "install" do
+
+ context "with a single file" do
+ setup do
+ @installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
+ assert @installer.install
+ @install_path = File.join(tmp_path, 'lib', 'jquery-1.4.1')
+ end
+
+ should "install a package.json" do
+ assert_readable @install_path, 'package.json'
+ assert_file_contents(/\"name\"\:\s*\"jquery\"/, @install_path, 'package.json')
+ end
+
+ should "move file into install path at name/version" do
+ assert_dir @install_path
+ assert_readable @install_path, 'jquery.js'
+ assert_equal fixture('jquery-1.4.1.js'), File.read(File.join(@install_path, 'jquery.js'))
+ end
+ end
- should "move file into install path at name/version" do
- installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
- assert installer.install
- install_path = File.join(tmp_path, 'lib', 'jquery-1.4.1')
- assert_dir install_path
- assert_readable install_path, 'jquery.js'
- assert_equal fixture('jquery-1.4.1.js'), File.read(File.join(install_path, 'jquery.js'))
+ context "with a file that seems to be installed already" do
+ should "raise error" do
+ @installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
+ assert @installer.install
+ @install_path = File.join(tmp_path, 'lib', 'jquery-1.4.1')
+ assert_readable @install_path, 'jquery.js'
+ @installer = Jim::Installer.new(fixture_path('jquery.color.js'), tmp_path, :name => 'jquery', :version => '1.4.1')
+ assert_raise(Jim::FileExists) {
+ @installer.install
+ }
+ end
end
- should "install zips" do
- @url = "http://jquery.com/download/jquery.metadata-2.0.zip"
- FakeWeb.register_uri(:get, @url, :body => fixture('jquery.metadata-2.0.zip'))
- installer = Jim::Installer.new(@url, tmp_path)
- path = installer.install
- # puts Dir.glob(path + '**/**').inspect
- assert_dir path
- assert_dir path + 'jquery.metadata-2.0.zip'
- assert_readable path + 'jquery.metadata-2.0.zip' + 'jquery.metadata.2.0' +'jquery.metadata.js'
+ context "with a duplicate file" do
+ should "skip install but not raise error" do
+ @installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
+ assert @installer.install
+ @install_path = File.join(tmp_path, 'lib', 'jquery-1.4.1')
+ assert_readable @install_path, 'jquery.js'
+ @installer = Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path)
+ assert @installer.install
+ assert_readable @install_path, 'jquery.js'
+ end
end
+
+ context "with a zip" do
+ setup do
+ @url = "http://jquery.com/download/jquery.metadata-2.0.zip"
+ FakeWeb.register_uri(:get, @url, :body => fixture('jquery.metadata-2.0.zip'))
+ @installer = Jim::Installer.new(@url, tmp_path)
+ @paths = @installer.install
+ @install_path = tmp_path + 'lib'
+ end
+
+ should "return an array of paths" do
+ assert @paths.is_a?(Array)
+ assert @paths.all? {|p| p.is_a?(Pathname) }
+ end
+
+ should "install each js file found separately" do
+ assert_dir tmp_path, 'lib', 'jquery.metadata-2.0'
+ assert_readable tmp_path, 'lib', 'jquery.metadata-2.0', 'jquery.metadata.js'
+ assert_readable tmp_path, 'lib', 'jquery.metadata.min-2.0', 'jquery.metadata.min.js'
+ assert_readable tmp_path, 'lib', 'jquery.metadata.pack-2.0', 'jquery.metadata.pack.js'
+ end
+
+ should "not install files found in ignored directories" do
+ assert_not_readable tmp_path, 'lib', 'test-2.0', 'test.js'
+ assert_not_readable tmp_path, 'lib', 'test-0', 'test.js'
+ end
+
+ should "install a package.json" do
+ json_path = @install_path + 'jquery.metadata-2.0' + 'package.json'
+ assert_readable json_path
+ assert_file_contents(/\"name\"\:\s*\"jquery\.metadata\"/, json_path)
+ end
+
+ end
+
+ context "with a dir" do
+ setup do
+ @installer = Jim::Installer.new(fixture_path('sammy-0.5.0'), tmp_path)
+ @paths = @installer.install
+ @install_path = tmp_path + 'lib'
+ end
+
+ should "return an array of paths" do
+ assert @paths.is_a?(Array)
+ assert @paths.all? {|p| p.is_a?(Pathname) }
+ end
+
+ should "install each js file found separately" do
+ assert_dir tmp_path, 'lib', 'sammy-0.5.0'
+ assert_readable tmp_path, 'lib', 'sammy-0.5.0', 'sammy.js'
+ assert_readable tmp_path, 'lib', 'sammy.template-0.5.0', 'sammy.template.js'
+ assert_readable tmp_path, 'lib', 'sammy.haml-0.5.0', 'sammy.haml.js'
+ end
+
+ should "not install files found in ignored directories" do
+ assert_not_readable tmp_path, 'lib', 'qunit-spec-0.5.0', 'qunit-spec.js'
+ assert_not_readable tmp_path, 'lib', 'qunit-spec-0', 'qunit-spec.js'
+ assert_not_readable tmp_path, 'lib', 'test_sammy_application-0.5.0', 'test_sammy_application.js'
+ assert_not_readable tmp_path, 'lib', 'test_sammy_application-0', 'test_sammy_application.js'
+ end
+
+ should "install a package.json" do
+ json_path = @install_path + 'sammy-0.5.0' + 'package.json'
+ assert_readable json_path
+ assert_file_contents(/\"name\"\:\s*\"sammy\"/, json_path)
+ end
+ end
- end
+ context "with an existing package.json" do
+ setup do
+ @installer = Jim::Installer.new(fixture_path('mustache.js'), tmp_path)
+ @paths = @installer.install
+ @install_path = tmp_path + 'lib'
+ end
+
+ should "return an array of paths" do
+ assert @paths.is_a?(Array)
+ assert @paths.all? {|p| p.is_a?(Pathname) }
+ end
+
+ should "install each js file found separately" do
+ assert_dir tmp_path, 'lib', 'mustache-0.2.2'
+ assert_readable tmp_path, 'lib', 'mustache-0.2.2', 'mustache.js'
+ end
+
+ should "merge initial package.json values" do
+ json_path = @install_path + 'mustache-0.2.2' + 'package.json'
+ assert_readable json_path
+ assert_file_contents(/\"name\"\:\s*\"mustache\"/, json_path)
+ assert_file_contents(/\"author\"\:\s*\"Jan Lehnardt\"/, json_path)
+ end
+ end
+ end
+
end
end