canvas-lms/spec/initializers/ruby_version_compat_spec.rb

87 lines
3.3 KiB
Ruby

# encoding: utf-8
#
# Copyright (C) 2013 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
require File.expand_path('../spec_helper', File.dirname( __FILE__ ))
describe 'ruby_version_compat' do
# from minitest, MIT licensed
def capture_io
orig_stdout, orig_stderr = $stdout, $stderr
$stdout, $stderr = StringIO.new, StringIO.new
yield
return $stdout.string, $stderr.string
ensure
$stdout, $stderr = orig_stdout, orig_stderr
end
describe 'backport of ruby #7278' do
it "should not output to stdout/stderr" do
output = capture_io do
# this file is marked utf-8 for one of the specs below, so we need to force these string literals to be binary
sio = StringIO.new("".force_encoding('binary'))
imio = Net::InternetMessageIO.new(sio)
expect(imio.write_message("\u3042\r\u3044\n\u3046\r\n\u3048")).to eq 23
expect(sio.string.force_encoding('binary')).to eq "\u3042\r\n\u3044\r\n\u3046\r\n\u3048\r\n.\r\n".force_encoding('binary')
sio = StringIO.new("".force_encoding('binary'))
imio = Net::InternetMessageIO.new(sio)
expect(imio.write_message("\u3042\r")).to eq 8
expect(sio.string.force_encoding('binary')).to eq "\u3042\r\n.\r\n".force_encoding('binary')
end
expect(output).to eq ['', '']
end
end
describe "force_utf8_params" do
it "should allow null filenames through" do
testfile = fixture_file_upload("scribd_docs/txt.txt", "text/plain", true)
testfile.instance_variable_set(:@original_filename, nil)
controller = ApplicationController.new
allow(controller).to receive(:params).and_return({ :upload => { :file1 => testfile } })
allow(controller).to receive(:request).and_return(double(:path => "/upload"))
expect { controller.force_utf8_params() }.to_not raise_error
expect(testfile.original_filename).to be_nil
end
end
describe "ERB::Util.html_escape" do
it "should be silent and escape properly with the regexp utf-8 monkey patch" do
stdout, stderr = capture_io do
escaped = ERB::Util.html_escape("åß∂åß∂<>")
expect(escaped.encoding).to eq Encoding::UTF_8
expect(escaped).to eq "åß∂åß∂&lt;&gt;"
end
expect(stdout).to eq ''
expect(stderr).to eq ''
end
end
describe "ActiveSupport::Inflector#transliterate" do
it "should be silent and return equivalent strings" do
stdout, stderr = capture_io do
expect(ActiveSupport::Inflector.transliterate("a string")).to eq "a string"
complex = ERB::Util.html_escape("test ßå")
expect(ActiveSupport::Inflector.transliterate(complex)).to eq "test ssa"
end
expect(stdout).to eq ''
expect(stderr).to eq ''
end
end
end