1require 'rubygems/test_case'
2require 'rubygems/commands/cleanup_command'
3
4class TestGemCommandsCleanupCommand < Gem::TestCase
5
6  def setup
7    super
8
9    @cmd = Gem::Commands::CleanupCommand.new
10
11    @a_1 = quick_spec 'a', 1
12    @a_2 = quick_spec 'a', 2
13
14    install_gem @a_1
15    install_gem @a_2
16  end
17
18  def test_execute
19    @cmd.options[:args] = %w[a]
20
21    @cmd.execute
22
23    refute_path_exists @a_1.gem_dir
24  end
25
26  def test_execute_all_dependencies
27    @b_1 = quick_spec 'b', 1 do |s| s.add_dependency 'a', '1' end
28    @b_2 = quick_spec 'b', 2 do |s| s.add_dependency 'a', '2' end
29
30    install_gem @b_1
31    install_gem @b_2
32
33    @cmd.options[:args] = []
34
35    @cmd.execute
36
37    refute_path_exists @a_1.gem_dir
38    refute_path_exists @b_1.gem_dir
39  end
40
41  def test_execute_all
42    gemhome2 = File.join @tempdir, 'gemhome2'
43
44    Gem.ensure_gem_subdirectories gemhome2
45
46    Gem.use_paths @gemhome, gemhome2
47
48    @b_1 = quick_spec 'b', 1
49    @b_2 = quick_spec 'b', 2
50
51    install_gem @b_1
52    install_gem @b_2
53
54    @cmd.options[:args] = []
55
56    @cmd.execute
57
58    assert_equal @gemhome, Gem.dir, 'GEM_HOME'
59    assert_equal [@gemhome, gemhome2], Gem.path.sort, 'GEM_PATH'
60
61    refute_path_exists @a_1.gem_dir
62    refute_path_exists @b_1.gem_dir
63  end
64
65  def test_execute_all_user
66    @a_1_1 = quick_spec 'a', '1.1'
67    @a_1_1 = install_gem_user @a_1_1 # pick up user install path
68
69    Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
70
71    assert_path_exists @a_1.gem_dir
72    assert_path_exists @a_1_1.gem_dir
73
74    @cmd.options[:args] = %w[a]
75
76    @cmd.execute
77
78    refute_path_exists @a_1.gem_dir
79    refute_path_exists @a_1_1.gem_dir
80  end
81
82  def test_execute_all_user_no_sudo
83    FileUtils.chmod 0555, @gemhome
84
85    @a_1_1 = quick_spec 'a', '1.1'
86    @a_1_1 = install_gem_user @a_1_1 # pick up user install path
87
88    Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
89
90    assert_path_exists @a_1.gem_dir
91    assert_path_exists @a_1_1.gem_dir
92
93    @cmd.options[:args] = %w[a]
94
95    @cmd.execute
96
97    assert_path_exists @a_1.gem_dir
98    refute_path_exists @a_1_1.gem_dir
99  ensure
100    FileUtils.chmod 0755, @gemhome
101  end unless win_platform?
102
103  def test_execute_dry_run
104    @cmd.options[:args] = %w[a]
105    @cmd.options[:dryrun] = true
106
107    @cmd.execute
108
109    assert_path_exists @a_1.gem_dir
110  end
111
112  def test_execute_keeps_older_versions_with_deps
113    @b_1 = quick_spec 'b', 1
114    @b_2 = quick_spec 'b', 2
115
116    @c = quick_spec 'c', 1 do |s|
117      s.add_dependency 'b', '1'
118    end
119
120    install_gem @c
121    install_gem @b_1
122    install_gem @b_2
123
124    @cmd.options[:args] = []
125
126    @cmd.execute
127
128    assert_path_exists @b_1.gem_dir
129  end
130
131  def test_execute_ignore_default_gem_verbose
132    Gem.configuration.verbose = :really
133
134    @b_1 = quick_spec 'b', 1
135    @b_default = new_default_spec "b", "2"
136    @b_2 = quick_spec 'b', 3
137
138    install_gem @b_1
139    install_default_specs @b_default
140    install_gem @b_2
141
142    @cmd.options[:args] = []
143
144    use_ui @ui do
145      @cmd.execute
146    end
147
148    assert_match %r%^Skipped default gems: b-2%, @ui.output
149    assert_empty @ui.error
150  end
151end
152
153