Skip to content

Commit

Permalink
Consider the multibyte value in the method name of system test
Browse files Browse the repository at this point in the history
`String#[]` returns a value that considers multibyte value. But some
file systems use byte for maximum filename length. So if applications
use that file system and multibyte value to a method name, currently
check doesn't work expected.

This PR fixes to use `String#byteslice` instead of `String#[]`. Also,
added `String#scrub` to avoid generating an invalid byte sequence.
  • Loading branch information
y-yagi committed Nov 28, 2020
1 parent 934276b commit 863a722
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/rspec/rails/example/system_example_group.rb
Expand Up @@ -41,7 +41,7 @@ def method_name
@method_name ||= [
self.class.name.underscore,
RSpec.current_example.description.underscore
].join("_").tr(CHARS_TO_TRANSLATE.join, "_")[0...200] + "_#{rand(1000)}"
].join("_").tr(CHARS_TO_TRANSLATE.join, "_").byteslice(0...200).scrub("") + "_#{rand(1000)}"
end

# Delegates to `Rails.application`.
Expand Down
9 changes: 9 additions & 0 deletions spec/rspec/rails/example/system_example_group_spec.rb
Expand Up @@ -16,6 +16,15 @@ module RSpec::Rails
expect(example.send(:method_name)).to start_with('method_name')
end
end

it "slices long method name - #{'あ'*100}" do
group = RSpec::Core::ExampleGroup.describe do
include SystemExampleGroup
end
example = group.new
group.hooks.run(:before, :example, example)
expect(example.send(:method_name).bytesize).to be <= 210
end
end

describe '#driver' do
Expand Down

0 comments on commit 863a722

Please sign in to comment.