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 134 135 136 137 138 139 140 141 142 143 144 145
|
require "helper"
class PluggableParserTest < Test::Unit::TestCase
def setup
@agent = Mechanize.new
end
def test_content_type_error
page = @agent.get("http://localhost/bad_content_type")
assert_raise(Mechanize::ContentTypeError) {
page = Mechanize::Page.new(
page.uri,
page.response,
page.body,
page.code
)
}
begin
page = Mechanize::Page.new(
page.uri,
page.response,
page.body,
page.code
)
rescue Mechanize::ContentTypeError => ex
assert_equal('text/xml', ex.content_type)
end
end
def test_content_type
page = @agent.get("http://localhost/content_type_test")
assert_kind_of(Mechanize::Page, page)
end
class Filter < Mechanize::Page
def initialize(uri=nil, response=nil, body=nil, code=nil)
super( uri,
response,
body.gsub(/<body>/, '<body><a href="http://daapclient.rubyforge.org">Net::DAAP::Client</a>'),
code
)
end
end
class FileFilter < Mechanize::File
def initialize(uri=nil, response=nil, body=nil, code=nil)
super( uri,
response,
body.gsub(/<body>/, '<body><a href="http://daapclient.rubyforge.org">Net::DAAP::Client</a>'),
code
)
end
end
def test_filter
@agent.pluggable_parser.html = Filter
page = @agent.get("http://localhost/find_link.html")
assert_kind_of(Filter, page)
assert_equal(19, page.links.length)
assert_not_nil(page.link_with(:text => 'Net::DAAP::Client'))
assert_equal(1, page.links_with(:text => 'Net::DAAP::Client').length)
end
def test_filter_hash
@agent.pluggable_parser['text/html'] = Filter
page = @agent.get("http://localhost/find_link.html")
assert_kind_of(Class, @agent.pluggable_parser['text/html'])
assert_equal(Filter, @agent.pluggable_parser['text/html'])
assert_kind_of(Filter, page)
assert_equal(19, page.links.length)
assert_not_nil(page.link_with(:text => 'Net::DAAP::Client'))
assert_equal(1, page.links_with(:text => 'Net::DAAP::Client').length)
end
def test_file_saver
@agent.pluggable_parser.html = Mechanize::FileSaver
page = @agent.get('http://localhost:2000/form_no_action.html')
length = page.response['Content-Length']
file_length = nil
File.open("localhost/form_no_action.html", "r") { |f|
file_length = f.read.length
}
FileUtils.rm_rf("localhost")
assert_equal(length.to_i, file_length)
end
def test_content_type_pdf
@agent.pluggable_parser.pdf = FileFilter
page = @agent.get("http://localhost/content_type_test?ct=application/pdf")
assert_kind_of(Class, @agent.pluggable_parser['application/pdf'])
assert_equal(FileFilter, @agent.pluggable_parser['application/pdf'])
assert_kind_of(FileFilter, page)
end
def test_content_type_csv
@agent.pluggable_parser.csv = FileFilter
page = @agent.get("http://localhost/content_type_test?ct=text/csv")
assert_kind_of(Class, @agent.pluggable_parser['text/csv'])
assert_equal(FileFilter, @agent.pluggable_parser['text/csv'])
assert_kind_of(FileFilter, page)
end
def test_content_type_xml
@agent.pluggable_parser.xml = FileFilter
page = @agent.get("http://localhost/content_type_test?ct=text/xml")
assert_kind_of(Class, @agent.pluggable_parser['text/xml'])
assert_equal(FileFilter, @agent.pluggable_parser['text/xml'])
assert_kind_of(FileFilter, page)
end
def test_file_saver_no_path
url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '', nil, nil, nil)
fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
assert_equal('example.com/index.html', fs.filename)
FileUtils.rm_rf('example.com')
end
def test_file_saver_slash
url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/', nil, nil, nil)
fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
assert_equal('example.com/index.html', fs.filename)
FileUtils.rm_rf('example.com')
end
def test_file_saver_slash_file
url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/foo.html', nil, nil, nil)
fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
assert_equal('example.com/foo.html', fs.filename)
FileUtils.rm_rf('example.com')
end
def test_file_saver_long_path_no_file
url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/one/two/', nil, nil, nil)
fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
assert_equal('example.com/one/two/index.html', fs.filename)
FileUtils.rm_rf('example.com')
end
def test_file_saver_long_path
url = URI::HTTP.new('http', nil, 'example.com', nil, nil, '/one/two/foo.html', nil, nil, nil)
fs = Mechanize::FileSaver.new(url, nil, 'hello world', 200)
assert_equal('example.com/one/two/foo.html', fs.filename)
FileUtils.rm_rf('example.com')
end
end
|