1require 'rubygems/test_case'
2require 'rubygems/commands/contents_command'
3
4class TestGemCommandsContentsCommand < Gem::TestCase
5
6  def setup
7    super
8
9    @cmd = Gem::Commands::ContentsCommand.new
10  end
11
12  def gem name
13    spec = quick_gem name do |gem|
14      gem.files = %W[lib/#{name}.rb Rakefile]
15    end
16    write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb])
17    write_file File.join(*%W[gems #{spec.full_name} Rakefile])
18  end
19
20  def test_execute
21    @cmd.options[:args] = %w[foo]
22
23    gem 'foo'
24
25    use_ui @ui do
26      @cmd.execute
27    end
28
29    assert_match %r|lib/foo\.rb|, @ui.output
30    assert_match %r|Rakefile|, @ui.output
31    assert_equal "", @ui.error
32  end
33
34  def test_execute_all
35    @cmd.options[:all] = true
36
37    gem 'foo'
38    gem 'bar'
39
40    use_ui @ui do
41      @cmd.execute
42    end
43
44    assert_match %r|lib/foo\.rb|, @ui.output
45    assert_match %r|lib/bar\.rb|, @ui.output
46    assert_match %r|Rakefile|, @ui.output
47    assert_equal "", @ui.error
48  end
49
50  def test_execute_bad_gem
51    @cmd.options[:args] = %w[foo]
52
53    assert_raises Gem::MockGemUi::TermError do
54      use_ui @ui do
55        @cmd.execute
56      end
57    end
58
59    assert_match %r|Unable to find gem 'foo' in default gem paths|, @ui.output
60    assert_match %r|Directories searched:|, @ui.output
61    assert_equal "", @ui.error
62  end
63
64  def test_execute_exact_match
65    @cmd.options[:args] = %w[foo]
66    gem 'foo'
67    gem 'bar'
68
69    use_ui @ui do
70      @cmd.execute
71    end
72
73    assert_match %r|lib/foo\.rb|, @ui.output
74    assert_match %r|Rakefile|, @ui.output
75    assert_equal "", @ui.error
76  end
77
78  def test_execute_lib_only
79    @cmd.options[:args] = %w[foo]
80    @cmd.options[:lib_only] = true
81
82    gem 'foo'
83
84    use_ui @ui do
85      @cmd.execute
86    end
87
88    assert_match %r|lib/foo\.rb|, @ui.output
89    refute_match %r|Rakefile|, @ui.output
90
91    assert_equal "", @ui.error
92  end
93
94  def test_execute_multiple
95    @cmd.options[:args] = %w[foo bar]
96
97    gem 'foo'
98    gem 'bar'
99
100    use_ui @ui do
101      @cmd.execute
102    end
103
104    assert_match %r|lib/foo\.rb|, @ui.output
105    assert_match %r|lib/bar\.rb|, @ui.output
106    assert_match %r|Rakefile|, @ui.output
107    assert_equal "", @ui.error
108  end
109
110  def test_execute_no_prefix
111    @cmd.options[:args] = %w[foo]
112    @cmd.options[:prefix] = false
113
114    gem 'foo'
115
116    use_ui @ui do
117      @cmd.execute
118    end
119
120    expected = <<-EOF
121Rakefile
122lib/foo.rb
123    EOF
124
125    assert_equal expected, @ui.output
126
127    assert_equal "", @ui.error
128  end
129
130  def test_execute_default_gem
131    default_gem_spec = new_default_spec("default", "2.0.0.0",
132                                        nil, "default/gem.rb")
133    default_gem_spec.executables = ["default_command"]
134    default_gem_spec.files += ["default_gem.so"]
135    install_default_specs(default_gem_spec)
136
137    @cmd.options[:args] = %w[default]
138
139    use_ui @ui do
140      @cmd.execute
141    end
142
143    expected = %W[
144      #{Gem::ConfigMap[:bindir]}/default_command
145      #{Gem::ConfigMap[:rubylibdir]}/default/gem.rb
146      #{Gem::ConfigMap[:archdir]}/default_gem.so
147    ].sort.join "\n"
148
149    assert_equal expected, @ui.output.chomp
150    assert_equal "", @ui.error
151  end
152
153  def test_handle_options
154    refute @cmd.options[:lib_only]
155    assert @cmd.options[:prefix]
156    assert_empty @cmd.options[:specdirs]
157    assert_nil @cmd.options[:version]
158
159    @cmd.send :handle_options, %w[-l -s foo --version 0.0.2 --no-prefix]
160
161    assert @cmd.options[:lib_only]
162    refute @cmd.options[:prefix]
163    assert_equal %w[foo], @cmd.options[:specdirs]
164    assert_equal Gem::Requirement.new('0.0.2'), @cmd.options[:version]
165  end
166
167end
168
169