diff --git a/pkgs/ruby/.rubocop.yml b/pkgs/ruby/.rubocop.yml index d04acb6..faf698b 100644 --- a/pkgs/ruby/.rubocop.yml +++ b/pkgs/ruby/.rubocop.yml @@ -42,6 +42,10 @@ RSpec/FilePath: RSpec/ExampleLength: CountAsOne: ['array', 'hash', 'heredoc'] +Security/Eval: + Exclude: + - 'spec/**/*_spec.rb' + Style/AndOr: EnforcedStyle: conditionals diff --git a/pkgs/ruby/spec/lib/kernaux/cmdline_spec.rb b/pkgs/ruby/spec/lib/kernaux/cmdline_spec.rb index 2577f6d..edf0063 100644 --- a/pkgs/ruby/spec/lib/kernaux/cmdline_spec.rb +++ b/pkgs/ruby/spec/lib/kernaux/cmdline_spec.rb @@ -90,4 +90,23 @@ KernAux::Version.supports_cmdline? and RSpec.describe KernAux, '.cmdline' do raise_error described_class::CmdlineError, 'buffer overflow' end end + + context 'using common tests' do + cmdline_yml = File.expand_path('../../../../../common/cmdline.yml', __dir__) + + YAML.safe_load_file(cmdline_yml).each do |test| + next unless test['argv_count_max'].nil? && test['buffer_size'].nil? + + escape_str = lambda do |str| + eval "\"#{str}\"", binding, __FILE__, __LINE__ # "str" + end + + cmdline = escape_str.call test['cmdline'] + result = test['result'].map(&escape_str) + + it "transforms #{cmdline.inspect} to #{result.inspect}" do + expect(described_class.cmdline(cmdline)).to eq result + end + end + end end