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
|
require 'test/unit'
require "multipart_parser/reader"
require File.dirname(__FILE__) + "/../fixtures/multipart"
module MultipartParser
class ReaderTest < Test::Unit::TestCase
def test_extract_boundary_value
assert_raise(NotMultipartError) do
not_multipart = "text/plain"
Reader.extract_boundary_value(not_multipart)
end
assert_raise(NotMultipartError) do
no_boundary = "multipart/form-data"
Reader.extract_boundary_value(no_boundary)
end
valid_content_type = "multipart/form-data; boundary=9asdadsdfv"
boundary = Reader.extract_boundary_value(valid_content_type)
assert_equal "9asdadsdfv", boundary
end
def test_error_callback
on_error_called = false
reader = Reader.new("boundary")
reader.on_error do |err|
on_error_called = true
end
reader.write("not boundary atleast")
assert on_error_called
end
def test_success_scenario
fixture = Fixtures::Rfc1867.new
reader = Reader.new(fixture.boundary)
on_error_called = false
parts = {}
reader.on_error do |err|
on_error_called = true
end
reader.on_part do |part|
part_entry = {:part => part, :data => '', :ended => false}
parts[part.name] = part_entry
part.on_data do |data|
part_entry[:data] << data
end
part.on_end do
part_entry[:ended] = true
end
end
reader.write(fixture.raw)
assert !on_error_called
assert reader.ended?
assert_equal parts.size, fixture.parts.size
assert parts.all? {|k, v| v[:ended]}
field = parts['field1']
assert !field.nil?
assert_equal 'field1', field[:part].name
assert_equal fixture.parts.first[:data], field[:data]
file = parts['pics']
assert !file.nil?
assert_equal 'pics', file[:part].name
assert_equal 'file1.txt', file[:part].filename
assert_equal fixture.parts.last[:data], file[:data]
end
<<-FAILING_TEST
The following test is failing since it has been introduced
in upstream commit fa18f46d7. It should be fixed, but for
now it'll do.
def test_long
fixture = Fixtures::LongBoundary.new
reader = Reader.new(fixture.boundary)
on_error_called = false
parts = {}
reader.on_error do |err|
on_error_called = true
end
reader.on_part do |part|
part_entry = {:part => part, :data => '', :ended => false}
parts[part.name] = part_entry
part.on_data do |data|
part_entry[:data] << data
end
part.on_end do
part_entry[:ended] = true
end
end
reader.write(fixture.raw)
assert !on_error_called
assert reader.ended?
assert_equal parts.size, fixture.parts.size
assert parts.all? {|k, v| v[:ended]}
field = parts['field1']
assert !field.nil?
assert_equal 'field1', field[:part].name
assert_equal fixture.parts.first[:data], field[:data]
end
FAILING_TEST
end
end
|