You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

step_match_spec.rb 3.5 kB

2 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # frozen_string_literal: true
  2. require 'spec_helper'
  3. require 'cucumber/glue/step_definition'
  4. require 'cucumber/glue/registry_and_more'
  5. module Cucumber
  6. describe StepMatch do
  7. let(:word) { '[[:word:]]' }
  8. before do
  9. @registry = Glue::RegistryAndMore.new(nil, Configuration.new)
  10. end
  11. def stepdef(string_or_regexp)
  12. Glue::StepDefinition.new('some-id', @registry, string_or_regexp, -> {}, {})
  13. end
  14. def step_match(regexp, name)
  15. stepdef = stepdef(regexp)
  16. StepMatch.new(stepdef, name, stepdef.arguments_from(name))
  17. end
  18. it 'formats step names' do
  19. m = step_match(/it (.*) in (.*)/, 'it snows in april')
  20. format = m.format_args('[%s]')
  21. expect(format).to eq 'it [snows] in [april]'
  22. end
  23. it 'formats one group when we use Unicode' do
  24. m = step_match(/I (#{word}+) ok/, 'I æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ ok')
  25. expect(m.format_args('<span>%s</span>')).to eq 'I <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> ok'
  26. end
  27. it 'formats several groups when we use Unicode' do
  28. m = step_match(/I (#{word}+) (#{word}+) (#{word}+) this (#{word}+)/, 'I ate æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ egg this morning')
  29. expect(m.format_args('<span>%s</span>')).to eq 'I <span>ate</span> <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> <span>egg</span> this <span>morning</span>'
  30. end
  31. it 'deals with Unicode both inside and outside arguments' do
  32. expect('Jæ vø ålsker døtte løndet').to match(/Jæ (.+) ålsker (.+) løndet/)
  33. m = step_match(/Jæ (#{word}+) ålsker (#{word}+) løndet/, 'Jæ vø ålsker døtte løndet')
  34. expect(m.format_args('<span>%s</span>')).to eq 'Jæ <span>vø</span> ålsker <span>døtte</span> løndet'
  35. end
  36. it 'formats groups with format string' do
  37. m = step_match(/I (#{word}+) (\d+) (#{word}+) this (#{word}+)/, 'I ate 1 egg this morning')
  38. expect(m.format_args('<span>%s</span>')).to eq 'I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>'
  39. end
  40. it 'formats groups with format string when there are dupes' do
  41. m = step_match(/I (#{word}+) (\d+) (#{word}+) this (#{word}+)/, 'I bob 1 bo this bobs')
  42. expect(m.format_args('<span>%s</span>')).to eq 'I <span>bob</span> <span>1</span> <span>bo</span> this <span>bobs</span>'
  43. end
  44. it 'formats groups with block' do
  45. m = step_match(/I (#{word}+) (\d+) (#{word}+) this (#{word}+)/, 'I ate 1 egg this morning')
  46. expect(m.format_args(&->(msg) { "<span>#{msg}</span>" })).to eq 'I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>'
  47. end
  48. it 'formats groups with proc object' do
  49. m = step_match(/I (#{word}+) (\d+) (#{word}+) this (#{word}+)/, 'I ate 1 egg this morning')
  50. expect(m.format_args(->(msg) { "<span>#{msg}</span>" })).to eq 'I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>'
  51. end
  52. it 'formats groups even when first group is optional and not matched' do
  53. m = step_match(/should( not)? be flashed '([^']*?)'$/, "I should be flashed 'Login failed.'")
  54. expect(m.format_args('<span>%s</span>')).to eq "I should be flashed '<span>Login failed.</span>'"
  55. end
  56. it 'formats embedded groups' do
  57. m = step_match(/running( (\d+) times)? (\d+) meters/, 'running 5 times 10 meters')
  58. expect(m.format_args('<span>%s</span>')).to eq 'running<span> 5 times</span> <span>10</span> meters'
  59. end
  60. end
  61. end

No Description

Contributors (1)