summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_commands_generate_index_command.rb
blob: ee4cd8051e3fdf1e21f33b5dd9e74743b1c1199e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require 'rubygems/test_case'
require 'rubygems/indexer'
require 'rubygems/commands/generate_index_command'

class TestGemCommandsGenerateIndexCommand < Gem::TestCase

  def setup
    super

    @cmd = Gem::Commands::GenerateIndexCommand.new
    @cmd.options[:directory] = @gemhome
  end

  def test_execute
    use_ui @ui do
      @cmd.execute
    end

    marshal = File.join @gemhome, 'Marshal.4.8'
    marshal_z = File.join @gemhome, 'Marshal.4.8.Z'

    assert File.exist?(marshal), marshal
    assert File.exist?(marshal_z), marshal_z
  end

  def test_execute_rss_update
    @cmd.options[:update] = true
    @cmd.options[:rss_host] = 'example.com'
    @cmd.options[:rss_gems_host] = 'gems.example.com'

    use_ui @ui do
      assert_raises Gem::MockGemUi::TermError do
        @cmd.execute
      end
    end

    assert_equal "ERROR:  --update not compatible with RSS generation\n",
                 @ui.error
    assert_empty @ui.output
  end

  def test_handle_options_directory
    return if win_platform?
    refute_equal '/nonexistent', @cmd.options[:directory]

    @cmd.handle_options %w[--directory /nonexistent]

    assert_equal '/nonexistent', @cmd.options[:directory]
  end

  def test_handle_options_directory_windows
    return unless win_platform?

    refute_equal '/nonexistent', @cmd.options[:directory]

    @cmd.handle_options %w[--directory C:/nonexistent]

    assert_equal 'C:/nonexistent', @cmd.options[:directory]
  end

  def test_handle_options_invalid
    e = assert_raises OptionParser::InvalidOption do
      @cmd.handle_options %w[--no-modern --no-legacy]
    end

    assert_equal 'invalid option: --no-legacy no indicies will be built',
                 e.message

    @cmd = Gem::Commands::GenerateIndexCommand.new
    e = assert_raises OptionParser::InvalidOption do
      @cmd.handle_options %w[--no-legacy --no-modern]
    end

    assert_equal 'invalid option: --no-modern no indicies will be built',
                 e.message
  end

  def test_handle_options_legacy
    @cmd.handle_options %w[--legacy]

    assert @cmd.options[:build_legacy]
    assert @cmd.options[:build_modern], ':build_modern not set'
  end

  def test_handle_options_modern
    @cmd.handle_options %w[--modern]

    assert @cmd.options[:build_legacy]
    assert @cmd.options[:build_modern], ':build_modern not set'
  end

  def test_handle_options_no_legacy
    @cmd.handle_options %w[--no-legacy]

    refute @cmd.options[:build_legacy]
    assert @cmd.options[:build_modern]
  end

  def test_handle_options_no_modern
    @cmd.handle_options %w[--no-modern]

    assert @cmd.options[:build_legacy]
    refute @cmd.options[:build_modern]
  end

  def test_handle_options_rss_gems_host
    @cmd.handle_options %w[--rss-gems-host gems.example.com]

    assert_equal 'gems.example.com', @cmd.options[:rss_gems_host]
  end

  def test_handle_options_rss_host
    @cmd.handle_options %w[--rss-host example.com]

    assert_equal 'example.com', @cmd.options[:rss_host]
  end

  def test_handle_options_rss_title
    @cmd.handle_options %w[--rss-title Example\ Gems]

    assert_equal 'Example Gems', @cmd.options[:rss_title]
  end

  def test_handle_options_update
    @cmd.handle_options %w[--update]

    assert @cmd.options[:update]
  end

end if ''.respond_to? :to_xs