diamond-mechanize 2.1 → 2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. metadata +222 -167
  2. data/Rakefile +0 -49
  3. data/lib/mechanize/content_type_error.rb +0 -13
  4. data/lib/mechanize/cookie.rb +0 -232
  5. data/lib/mechanize/cookie_jar.rb +0 -194
  6. data/lib/mechanize/download.rb +0 -59
  7. data/lib/mechanize/element_matcher.rb +0 -36
  8. data/lib/mechanize/file.rb +0 -65
  9. data/lib/mechanize/file_connection.rb +0 -17
  10. data/lib/mechanize/file_request.rb +0 -26
  11. data/lib/mechanize/file_response.rb +0 -74
  12. data/lib/mechanize/file_saver.rb +0 -39
  13. data/lib/mechanize/form/button.rb +0 -6
  14. data/lib/mechanize/form/check_box.rb +0 -12
  15. data/lib/mechanize/form/field.rb +0 -54
  16. data/lib/mechanize/form/file_upload.rb +0 -21
  17. data/lib/mechanize/form/hidden.rb +0 -3
  18. data/lib/mechanize/form/image_button.rb +0 -19
  19. data/lib/mechanize/form/keygen.rb +0 -34
  20. data/lib/mechanize/form/multi_select_list.rb +0 -94
  21. data/lib/mechanize/form/option.rb +0 -50
  22. data/lib/mechanize/form/radio_button.rb +0 -55
  23. data/lib/mechanize/form/reset.rb +0 -3
  24. data/lib/mechanize/form/select_list.rb +0 -44
  25. data/lib/mechanize/form/submit.rb +0 -3
  26. data/lib/mechanize/form/text.rb +0 -3
  27. data/lib/mechanize/form/textarea.rb +0 -3
  28. data/lib/mechanize/form.rb +0 -543
  29. data/lib/mechanize/headers.rb +0 -23
  30. data/lib/mechanize/history.rb +0 -82
  31. data/lib/mechanize/http/agent.rb +0 -1004
  32. data/lib/mechanize/http/auth_challenge.rb +0 -59
  33. data/lib/mechanize/http/auth_realm.rb +0 -31
  34. data/lib/mechanize/http/content_disposition_parser.rb +0 -188
  35. data/lib/mechanize/http/www_authenticate_parser.rb +0 -155
  36. data/lib/mechanize/http.rb +0 -8
  37. data/lib/mechanize/monkey_patch.rb +0 -16
  38. data/lib/mechanize/page/base.rb +0 -7
  39. data/lib/mechanize/page/frame.rb +0 -27
  40. data/lib/mechanize/page/image.rb +0 -30
  41. data/lib/mechanize/page/label.rb +0 -20
  42. data/lib/mechanize/page/link.rb +0 -98
  43. data/lib/mechanize/page/meta_refresh.rb +0 -68
  44. data/lib/mechanize/page.rb +0 -440
  45. data/lib/mechanize/parser.rb +0 -173
  46. data/lib/mechanize/pluggable_parsers.rb +0 -144
  47. data/lib/mechanize/redirect_limit_reached_error.rb +0 -19
  48. data/lib/mechanize/redirect_not_get_or_head_error.rb +0 -21
  49. data/lib/mechanize/response_code_error.rb +0 -21
  50. data/lib/mechanize/response_read_error.rb +0 -27
  51. data/lib/mechanize/robots_disallowed_error.rb +0 -28
  52. data/lib/mechanize/test_case.rb +0 -663
  53. data/lib/mechanize/unauthorized_error.rb +0 -3
  54. data/lib/mechanize/unsupported_scheme_error.rb +0 -6
  55. data/lib/mechanize/util.rb +0 -101
  56. data/lib/mechanize.rb +0 -1079
  57. data/test/data/htpasswd +0 -1
  58. data/test/data/server.crt +0 -16
  59. data/test/data/server.csr +0 -12
  60. data/test/data/server.key +0 -15
  61. data/test/data/server.pem +0 -15
  62. data/test/htdocs/alt_text.html +0 -10
  63. data/test/htdocs/bad_form_test.html +0 -9
  64. data/test/htdocs/button.jpg +0 -0
  65. data/test/htdocs/canonical_uri.html +0 -9
  66. data/test/htdocs/dir with spaces/foo.html +0 -1
  67. data/test/htdocs/empty_form.html +0 -6
  68. data/test/htdocs/file_upload.html +0 -26
  69. data/test/htdocs/find_link.html +0 -41
  70. data/test/htdocs/form_multi_select.html +0 -16
  71. data/test/htdocs/form_multival.html +0 -37
  72. data/test/htdocs/form_no_action.html +0 -18
  73. data/test/htdocs/form_no_input_name.html +0 -16
  74. data/test/htdocs/form_order_test.html +0 -11
  75. data/test/htdocs/form_select.html +0 -16
  76. data/test/htdocs/form_set_fields.html +0 -14
  77. data/test/htdocs/form_test.html +0 -188
  78. data/test/htdocs/frame_referer_test.html +0 -10
  79. data/test/htdocs/frame_test.html +0 -30
  80. data/test/htdocs/google.html +0 -13
  81. data/test/htdocs/index.html +0 -6
  82. data/test/htdocs/link with space.html +0 -5
  83. data/test/htdocs/meta_cookie.html +0 -11
  84. data/test/htdocs/no_title_test.html +0 -6
  85. data/test/htdocs/noindex.html +0 -9
  86. data/test/htdocs/rails_3_encoding_hack_form_test.html +0 -27
  87. data/test/htdocs/relative/tc_relative_links.html +0 -21
  88. data/test/htdocs/robots.html +0 -8
  89. data/test/htdocs/robots.txt +0 -2
  90. data/test/htdocs/tc_bad_charset.html +0 -9
  91. data/test/htdocs/tc_bad_links.html +0 -5
  92. data/test/htdocs/tc_base_link.html +0 -8
  93. data/test/htdocs/tc_blank_form.html +0 -11
  94. data/test/htdocs/tc_charset.html +0 -6
  95. data/test/htdocs/tc_checkboxes.html +0 -19
  96. data/test/htdocs/tc_encoded_links.html +0 -5
  97. data/test/htdocs/tc_field_precedence.html +0 -11
  98. data/test/htdocs/tc_follow_meta.html +0 -8
  99. data/test/htdocs/tc_form_action.html +0 -48
  100. data/test/htdocs/tc_links.html +0 -19
  101. data/test/htdocs/tc_meta_in_body.html +0 -9
  102. data/test/htdocs/tc_pretty_print.html +0 -17
  103. data/test/htdocs/tc_referer.html +0 -16
  104. data/test/htdocs/tc_relative_links.html +0 -19
  105. data/test/htdocs/tc_textarea.html +0 -23
  106. data/test/htdocs/test_click.html +0 -11
  107. data/test/htdocs/unusual______.html +0 -5
  108. data/test/test_mechanize.rb +0 -1164
  109. data/test/test_mechanize_cookie.rb +0 -451
  110. data/test/test_mechanize_cookie_jar.rb +0 -483
  111. data/test/test_mechanize_download.rb +0 -43
  112. data/test/test_mechanize_file.rb +0 -61
  113. data/test/test_mechanize_file_connection.rb +0 -21
  114. data/test/test_mechanize_file_request.rb +0 -19
  115. data/test/test_mechanize_file_saver.rb +0 -21
  116. data/test/test_mechanize_form.rb +0 -875
  117. data/test/test_mechanize_form_check_box.rb +0 -38
  118. data/test/test_mechanize_form_encoding.rb +0 -114
  119. data/test/test_mechanize_form_field.rb +0 -63
  120. data/test/test_mechanize_form_file_upload.rb +0 -20
  121. data/test/test_mechanize_form_image_button.rb +0 -12
  122. data/test/test_mechanize_form_keygen.rb +0 -32
  123. data/test/test_mechanize_form_multi_select_list.rb +0 -84
  124. data/test/test_mechanize_form_option.rb +0 -55
  125. data/test/test_mechanize_form_radio_button.rb +0 -78
  126. data/test/test_mechanize_form_select_list.rb +0 -76
  127. data/test/test_mechanize_form_textarea.rb +0 -52
  128. data/test/test_mechanize_headers.rb +0 -35
  129. data/test/test_mechanize_history.rb +0 -103
  130. data/test/test_mechanize_http_agent.rb +0 -1225
  131. data/test/test_mechanize_http_auth_challenge.rb +0 -39
  132. data/test/test_mechanize_http_auth_realm.rb +0 -49
  133. data/test/test_mechanize_http_content_disposition_parser.rb +0 -118
  134. data/test/test_mechanize_http_www_authenticate_parser.rb +0 -146
  135. data/test/test_mechanize_link.rb +0 -80
  136. data/test/test_mechanize_page.rb +0 -118
  137. data/test/test_mechanize_page_encoding.rb +0 -182
  138. data/test/test_mechanize_page_frame.rb +0 -16
  139. data/test/test_mechanize_page_link.rb +0 -390
  140. data/test/test_mechanize_page_meta_refresh.rb +0 -127
  141. data/test/test_mechanize_parser.rb +0 -289
  142. data/test/test_mechanize_pluggable_parser.rb +0 -52
  143. data/test/test_mechanize_redirect_limit_reached_error.rb +0 -24
  144. data/test/test_mechanize_redirect_not_get_or_head_error.rb +0 -14
  145. data/test/test_mechanize_subclass.rb +0 -22
  146. data/test/test_mechanize_util.rb +0 -103
  147. data/test/test_multi_select.rb +0 -119
@@ -1,38 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormCheckBox < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @page = @mech.get('http://localhost/tc_checkboxes.html')
9
- end
10
-
11
- def test_check
12
- form = @page.forms.first
13
-
14
- form.checkbox_with(:name => 'green').check
15
-
16
- assert(form.checkbox_with(:name => 'green').checked)
17
-
18
- %w{ red blue yellow brown }.each do |color|
19
- assert_equal(false, form.checkbox_with(:name => color).checked)
20
- end
21
- end
22
-
23
- def test_uncheck
24
- form = @page.forms.first
25
-
26
- checkbox = form.checkbox_with(:name => 'green')
27
-
28
- checkbox.check
29
-
30
- assert form.checkbox_with(:name => 'green').checked
31
-
32
- checkbox.uncheck
33
-
34
- assert !form.checkbox_with(:name => 'green').checked
35
- end
36
-
37
- end
38
-
@@ -1,114 +0,0 @@
1
- # coding: utf-8
2
- require 'mechanize/test_case'
3
-
4
- class TestMechanizeFormEncoding < Mechanize::TestCase
5
-
6
- # See also: tests of Util.from_native_charset
7
- # Encoding test should do with non-utf-8 characters
8
-
9
- INPUTTED_VALUE = "テスト" # "test" in Japanese UTF-8 encoding
10
- CONTENT_ENCODING = 'Shift_JIS' # one of Japanese encoding
11
- encoded_value = "\x83\x65\x83\x58\x83\x67" # "test" in Japanese Shift_JIS encoding
12
- encoded_value.force_encoding(::Encoding::SHIFT_JIS) if encoded_value.respond_to?(:force_encoding)
13
- EXPECTED_QUERY = "first_name=#{CGI.escape(encoded_value)}&first_name=&gender=&green%5Beggs%5D="
14
-
15
- if Mechanize::Util::NEW_RUBY_ENCODING
16
- ENCODING_ERRORS = [EncodingError, Encoding::ConverterNotFoundError] # and so on
17
- else
18
- ENCODING_ERRORS = [Iconv::InvalidEncoding, Iconv::IllegalSequence]
19
- end
20
-
21
- ENCODING_LOG_MESSAGE = /INFO -- : form encoding: Shift_JIS/
22
- INVALID_ENCODING = 'UTF-eight'
23
-
24
- def set_form_with_encoding(enc)
25
- page = @mech.get("http://localhost/form_set_fields.html")
26
- form = page.forms.first
27
- form.encoding = enc
28
- form['first_name'] = INPUTTED_VALUE
29
- form
30
- end
31
-
32
- def test_form_encoding_returns_accept_charset
33
- page = @mech.get("http://localhost/rails_3_encoding_hack_form_test.html")
34
- form = page.forms.first
35
- accept_charset = form.form_node['accept-charset']
36
-
37
- assert accept_charset
38
- assert_equal accept_charset, form.encoding
39
- refute_equal page.encoding, form.encoding
40
- end
41
-
42
- def test_form_encoding_returns_page_encoding_when_no_accept_charset
43
- page = @mech.get("http://localhost/form_set_fields.html")
44
- form = page.forms.first
45
- accept_charset = form.form_node['accept-charset']
46
-
47
- assert_nil accept_charset
48
- refute_equal accept_charset, form.encoding
49
- assert_equal page.encoding, form.encoding
50
- end
51
-
52
- def test_form_encoding_equals_sets_new_encoding
53
- page = @mech.get("http://localhost/form_set_fields.html")
54
- form = page.forms.first
55
-
56
- refute_equal CONTENT_ENCODING, form.encoding
57
-
58
- form.encoding = CONTENT_ENCODING
59
-
60
- assert_equal CONTENT_ENCODING, form.encoding
61
- end
62
-
63
- def test_form_encoding_returns_nil_when_no_page_in_initialize
64
- # this sequence is seen at Mechanize#post(url, query_hash)
65
-
66
- node = {}
67
- # Create a fake form
68
- class << node
69
- def search(*args); []; end
70
- end
71
- node['method'] = 'POST'
72
- node['enctype'] = 'application/x-www-form-urlencoded'
73
- form = Mechanize::Form.new(node)
74
-
75
- assert_equal nil, form.encoding
76
- end
77
-
78
- def test_post_form_with_form_encoding
79
- form = set_form_with_encoding CONTENT_ENCODING
80
- form.submit
81
-
82
- # we can not use "links.find{|l| l.text == 'key:val'}" assertion here
83
- # because the link text encoding is always UTF-8 regaredless of html encoding
84
- assert EXPECTED_QUERY, @mech.page.at('div#query').inner_text
85
- end
86
-
87
- def test_post_form_with_problematic_encoding
88
- form = set_form_with_encoding INVALID_ENCODING
89
-
90
- assert_raises(*ENCODING_ERRORS){ form.submit }
91
- end
92
-
93
- def test_form_ignore_encoding_error_is_true
94
- form = set_form_with_encoding INVALID_ENCODING
95
- form.ignore_encoding_error = true
96
-
97
- form.submit
98
-
99
- # HACK no assertions
100
- end
101
-
102
- def test_post_form_logs_form_encoding
103
- sio = StringIO.new
104
- @mech.log = Logger.new(sio)
105
- @mech.log.level = Logger::INFO
106
-
107
- form = set_form_with_encoding CONTENT_ENCODING
108
- form.submit
109
-
110
- assert_match ENCODING_LOG_MESSAGE, sio.string
111
-
112
- @mech.log = nil
113
- end
114
- end
@@ -1,63 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormField < Mechanize::TestCase
4
-
5
- def test_name
6
- field = node 'input', 'name' => 'a&b'
7
- field = Mechanize::Form::Field.new field
8
-
9
- assert_equal 'a&b', field.name
10
- end
11
-
12
- def test_name_entity
13
- field = node 'input', 'name' => 'a&amp;b'
14
- field = Mechanize::Form::Field.new field
15
-
16
- assert_equal 'a&b', field.name
17
- end
18
-
19
- def test_name_entity_numeric
20
- field = node 'input', 'name' => 'a&#38;b'
21
- field = Mechanize::Form::Field.new field
22
-
23
- assert_equal 'a&b', field.name
24
- end
25
-
26
- def test_spaceship
27
- doc = Nokogiri::HTML::Document.new
28
- node = doc.create_element('input')
29
- node['name'] = 'foo'
30
- node['value'] = 'bar'
31
-
32
- a = Mechanize::Form::Field.new(node)
33
- b = Mechanize::Form::Field.new({'name' => 'foo'}, 'bar')
34
- c = Mechanize::Form::Field.new({'name' => 'foo'}, 'bar')
35
-
36
- assert_equal [a, b], [a, b].sort
37
- assert_equal [a, b], [b, a].sort
38
- assert_equal [b, c].sort, [b, c].sort
39
- end
40
-
41
- def test_value
42
- field = node 'input'
43
- field = Mechanize::Form::Field.new field, 'a&b'
44
-
45
- assert_equal 'a&b', field.value
46
- end
47
-
48
- def test_value_entity
49
- field = node 'input'
50
- field = Mechanize::Form::Field.new field, 'a&amp;b'
51
-
52
- assert_equal 'a&b', field.value
53
- end
54
-
55
- def test_value_entity_numeric
56
- field = node 'input'
57
- field = Mechanize::Form::Field.new field, 'a&#38;b'
58
-
59
- assert_equal 'a&b', field.value
60
- end
61
-
62
- end
63
-
@@ -1,20 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormFileUpload < Mechanize::TestCase
4
-
5
- def test_file_name
6
- field = node 'input'
7
- field = Mechanize::Form::FileUpload.new field, 'a&b'
8
-
9
- assert_equal 'a&b', field.file_name
10
- end
11
-
12
- def test_file_name_entity
13
- field = node 'input'
14
- field = Mechanize::Form::FileUpload.new field, 'a&amp;b'
15
-
16
- assert_equal 'a&b', field.file_name
17
- end
18
-
19
- end
20
-
@@ -1,12 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormImageButton < Mechanize::TestCase
4
-
5
- def test_query_value
6
- button = Mechanize::Form::ImageButton.new 'name' => 'image_button'
7
-
8
- assert_equal [%w[image_button.x 0], %w[image_button.y 0]],
9
- button.query_value
10
- end
11
- end
12
-
@@ -1,32 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormKeygen < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- keygen = node('keygen',
9
- 'name' => 'userkey',
10
- 'challenge' => 'f4832e1d200df3df8c5c859edcabe52f')
11
-
12
- @keygen = Mechanize::Form::Keygen.new keygen
13
- end
14
-
15
- def test_challenge
16
- assert_equal "f4832e1d200df3df8c5c859edcabe52f", @keygen.challenge
17
- end
18
-
19
- def test_key
20
- assert @keygen.key.kind_of?(OpenSSL::PKey::PKey), "Not an OpenSSL key"
21
- assert @keygen.key.private?, "Not a private key"
22
- end
23
-
24
- def test_spki_signature
25
- spki = OpenSSL::Netscape::SPKI.new @keygen.value
26
- assert_equal @keygen.challenge, spki.challenge
27
- assert_equal @keygen.key.public_key.to_pem, spki.public_key.to_pem
28
- assert spki.verify(@keygen.key.public_key)
29
- end
30
-
31
- end
32
-
@@ -1,84 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormMultiSelectList < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- page = html_page <<-BODY
9
- <form name="form1" method="post" action="/form_post">
10
- <select name="select" multiple>
11
- <option value="1">Option 1</option>
12
- <option value="2" selected>Option 2</option>
13
- <option value="3">Option 3</option>
14
- <option value="4">Option 4</option>
15
- <option value="5">Option 5</option>
16
- <option value="6">Option 6</option>
17
- </select>
18
- </form>
19
- BODY
20
-
21
- form = page.forms.first
22
- @select = form.fields.first
23
- end
24
-
25
- def test_option_with
26
- option = @select.option_with :value => '1'
27
-
28
- assert_equal '1', option.value
29
- end
30
-
31
- def test_options_with
32
- options = @select.options_with :value => /[12]/
33
-
34
- assert_equal 2, options.length
35
- end
36
-
37
- def test_query_value
38
- assert_equal [%w[select 2]], @select.query_value
39
-
40
- @select.options.last.click
41
-
42
- assert_equal [%w[select 2], %w[select 6]], @select.query_value
43
- end
44
-
45
- def test_query_value_empty
46
- @select.options.last.click
47
- @select.options.last.instance_variable_set :@value, ''
48
-
49
- assert_equal [%w[select 2], ['select', '']], @select.query_value
50
- end
51
-
52
- def test_select_all
53
- @select.select_all
54
-
55
- assert_equal %w[1 2 3 4 5 6], @select.value
56
- end
57
-
58
- def test_select_none
59
- @select.select_none
60
-
61
- assert_empty @select.value
62
- end
63
-
64
- def test_selected_options
65
- assert_equal [@select.options[1]], @select.selected_options
66
-
67
- @select.options.last.click
68
-
69
- assert_equal [@select.options[1], @select.options.last],
70
- @select.selected_options
71
- end
72
-
73
- def test_value
74
- assert_equal %w[2], @select.value
75
- end
76
-
77
- def test_value_equals
78
- @select.value = %w[a 1 2]
79
-
80
- assert_equal %w[a 1 2], @select.value
81
- end
82
-
83
- end
84
-
@@ -1,55 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormOption < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- page = html_page <<-BODY
9
- <form name="form1" method="post" action="/form_post">
10
- <select name="select">
11
- <option value="1">Option 1</option>
12
- <option value="2" selected>Option 2</option>
13
- </select>
14
- </form>
15
- BODY
16
-
17
- form = page.forms.first
18
- @select = form.fields.first
19
- @option1 = @select.options.first
20
- @option2 = @select.options.last
21
- end
22
-
23
- def test_value_missing_value
24
- option = node 'option'
25
- option.inner_html = 'blah'
26
- option = Mechanize::Form::Option.new option, nil
27
-
28
- assert_equal 'blah', option.value
29
- end
30
-
31
- def test_click
32
- @option1.click
33
-
34
- assert @option1.selected?
35
- end
36
-
37
- def test_select
38
- @option1.select
39
-
40
- assert @option1.selected?
41
- end
42
-
43
- def test_unselect
44
- @option2.unselect
45
-
46
- refute @option2.selected?
47
- end
48
-
49
- def test_selected_eh
50
- refute @option1.selected?
51
- assert @option2.selected?
52
- end
53
-
54
- end
55
-
@@ -1,78 +0,0 @@
1
- require 'mechanize/test_case'
2
-
3
- class TestMechanizeFormRadioButton < Mechanize::TestCase
4
-
5
- def setup
6
- super
7
-
8
- @page = html_page <<-BODY
9
- <form name="form1" method="post" action="/form_post">
10
- <label for="blue">Blue</label>
11
- <input type="radio" name="color" value="blue" id="blue">
12
- <input type="radio" name="color" value="brown">
13
- <input type="radio" name="color" value="green">
14
- <input type="radio" name="color" value="red">
15
- <input type="radio" name="color" value="yellow">
16
-
17
- <input type="submit" value="Submit">
18
- </form>
19
- BODY
20
-
21
- @form = @page.forms.first
22
-
23
- @blue = @form.radiobutton_with :value => 'blue'
24
- @brown = @form.radiobutton_with :value => 'brown'
25
- @green = @form.radiobutton_with :value => 'green'
26
- @red = @form.radiobutton_with :value => 'red'
27
- @yellow = @form.radiobutton_with :value => 'yellow'
28
- end
29
-
30
- def test_check
31
- @blue.check
32
-
33
- assert @blue.checked?
34
- refute @brown.checked?
35
- refute @green.checked?
36
- refute @red.checked?
37
- refute @yellow.checked?
38
- end
39
-
40
- def test_check_multiple
41
- @blue.check
42
- @brown.check
43
-
44
- refute @blue.checked?
45
- assert @brown.checked?
46
- refute @green.checked?
47
- refute @red.checked?
48
- refute @yellow.checked?
49
- end
50
-
51
- def test_click
52
- @blue.click
53
-
54
- assert @blue.checked?
55
-
56
- @blue.click
57
-
58
- refute @blue.checked?
59
- end
60
-
61
- def test_label
62
- assert_equal 'Blue', @blue.label.text
63
- end
64
-
65
- def test_uncheck
66
- @blue.check
67
-
68
- @blue.uncheck
69
-
70
- refute @blue.checked?
71
- refute @brown.checked?
72
- refute @green.checked?
73
- refute @red.checked?
74
- refute @yellow.checked?
75
- end
76
-
77
- end
78
-