summaryrefslogtreecommitdiff
path: root/spec/ruby/library/cgi/initialize_spec.rb
blob: f794f157f0871abe074bd7a7ac1cf6fd4e2d2c35 (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
132
133
require_relative '../../spec_helper'
require 'cgi'

describe "CGI#initialize" do
  it "is private" do
    CGI.should have_private_instance_method(:initialize)
  end
end

describe "CGI#initialize when passed no arguments" do
  before :each do
    ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
    @cgi = CGI.allocate
  end

  after :each do
    ENV['REQUEST_METHOD'] = @old_request_method
  end

  it "extends self with CGI::QueryExtension" do
    @cgi.send(:initialize)
    @cgi.should be_kind_of(CGI::QueryExtension)
  end

  it "does not extend self with CGI::HtmlExtension" do
    @cgi.send(:initialize)
    @cgi.should_not be_kind_of(CGI::HtmlExtension)
  end

  it "does not extend self with any of the other HTML modules" do
    @cgi.send(:initialize)
    @cgi.should_not be_kind_of(CGI::Html3)
    @cgi.should_not be_kind_of(CGI::HtmlExtension)
    @cgi.should_not be_kind_of(CGI::Html4)
    @cgi.should_not be_kind_of(CGI::Html4Tr)
    @cgi.should_not be_kind_of(CGI::Html4Fr)
  end

  it "sets #cookies based on ENV['HTTP_COOKIE']" do
    begin
      old_env, ENV["HTTP_COOKIE"] = ENV["HTTP_COOKIE"], "test=test yay"
      @cgi.send(:initialize)
      @cgi.cookies.should == { "test"=>[ "test yay" ] }
    ensure
      ENV["HTTP_COOKIE"] = old_env
    end
  end

  it "sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is GET" do
    begin
      old_env_query, ENV["QUERY_STRING"] = ENV["QUERY_STRING"], "?test=a&test2=b"
      old_env_method, ENV["REQUEST_METHOD"] = ENV["REQUEST_METHOD"], "GET"
      @cgi.send(:initialize)
      @cgi.params.should == { "test2" => ["b"], "?test" => ["a"] }
    ensure
      ENV["QUERY_STRING"] = old_env_query
      ENV["REQUEST_METHOD"] = old_env_method
    end
  end

  it "sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is HEAD" do
    begin
      old_env_query, ENV["QUERY_STRING"] = ENV["QUERY_STRING"], "?test=a&test2=b"
      old_env_method, ENV["REQUEST_METHOD"] = ENV["REQUEST_METHOD"], "HEAD"
      @cgi.send(:initialize)
      @cgi.params.should == { "test2" => ["b"], "?test" => ["a"] }
    ensure
      ENV["QUERY_STRING"] = old_env_query
      ENV["REQUEST_METHOD"] = old_env_method
    end
  end
end

describe "CGI#initialize when passed type" do
  before :each do
    ENV['REQUEST_METHOD'], @old_request_method = "GET", ENV['REQUEST_METHOD']
    @cgi = CGI.allocate
  end

  after :each do
    ENV['REQUEST_METHOD'] = @old_request_method
  end


  it "extends self with CGI::QueryExtension" do
    @cgi.send(:initialize, "test")
    @cgi.should be_kind_of(CGI::QueryExtension)
  end

  it "extends self with CGI::QueryExtension, CGI::Html3 and CGI::HtmlExtension when the passed type is 'html3'" do
    @cgi.send(:initialize, "html3")
    @cgi.should be_kind_of(CGI::Html3)
    @cgi.should be_kind_of(CGI::HtmlExtension)
    @cgi.should be_kind_of(CGI::QueryExtension)

    @cgi.should_not be_kind_of(CGI::Html4)
    @cgi.should_not be_kind_of(CGI::Html4Tr)
    @cgi.should_not be_kind_of(CGI::Html4Fr)
  end

  it "extends self with CGI::QueryExtension, CGI::Html4 and CGI::HtmlExtension when the passed type is 'html4'" do
    @cgi.send(:initialize, "html4")
    @cgi.should be_kind_of(CGI::Html4)
    @cgi.should be_kind_of(CGI::HtmlExtension)
    @cgi.should be_kind_of(CGI::QueryExtension)

    @cgi.should_not be_kind_of(CGI::Html3)
    @cgi.should_not be_kind_of(CGI::Html4Tr)
    @cgi.should_not be_kind_of(CGI::Html4Fr)
  end

  it "extends self with CGI::QueryExtension, CGI::Html4Tr and CGI::HtmlExtension when the passed type is 'html4Tr'" do
    @cgi.send(:initialize, "html4Tr")
    @cgi.should be_kind_of(CGI::Html4Tr)
    @cgi.should be_kind_of(CGI::HtmlExtension)
    @cgi.should be_kind_of(CGI::QueryExtension)

    @cgi.should_not be_kind_of(CGI::Html3)
    @cgi.should_not be_kind_of(CGI::Html4)
    @cgi.should_not be_kind_of(CGI::Html4Fr)
  end

  it "extends self with CGI::QueryExtension, CGI::Html4Tr, CGI::Html4Fr and CGI::HtmlExtension when the passed type is 'html4Fr'" do
    @cgi.send(:initialize, "html4Fr")
    @cgi.should be_kind_of(CGI::Html4Tr)
    @cgi.should be_kind_of(CGI::Html4Fr)
    @cgi.should be_kind_of(CGI::HtmlExtension)
    @cgi.should be_kind_of(CGI::QueryExtension)

    @cgi.should_not be_kind_of(CGI::Html3)
    @cgi.should_not be_kind_of(CGI::Html4)
  end
end