mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	At the moment, there are some problems with regard to bundler + did_you_mean because of did_you_mean being a bundled gem. Since the vendored version of thor inside bundler and ruby itself explicitly requires did_you_mean, it can become difficult to load it when using Bundler.setup. See this issue: https://github.com/yuki24/did_you_mean/issues/117#issuecomment-482733159 for more details.
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require_relative './helper'
 | 
						|
 | 
						|
class SpellCheckerTest < Test::Unit::TestCase
 | 
						|
  def test_spell_checker_corrects_mistypes
 | 
						|
    assert_spell 'foo',   input: 'doo',   dictionary: ['foo', 'fork']
 | 
						|
    assert_spell 'email', input: 'meail', dictionary: ['email', 'fail', 'eval']
 | 
						|
    assert_spell 'fail',  input: 'fial',  dictionary: ['email', 'fail', 'eval']
 | 
						|
    assert_spell 'fail',  input: 'afil',  dictionary: ['email', 'fail', 'eval']
 | 
						|
    assert_spell 'eval',  input: 'eavl',  dictionary: ['email', 'fail', 'eval']
 | 
						|
    assert_spell 'eval',  input: 'veal',  dictionary: ['email', 'fail', 'eval']
 | 
						|
    assert_spell 'sub!',  input: 'suv!',  dictionary: ['sub', 'gsub', 'sub!']
 | 
						|
    assert_spell 'sub',   input: 'suv',   dictionary: ['sub', 'gsub', 'sub!']
 | 
						|
 | 
						|
    assert_spell %w(gsub! gsub),     input: 'gsuv!', dictionary: %w(sub gsub gsub!)
 | 
						|
    assert_spell %w(sub! sub gsub!), input: 'ssub!', dictionary: %w(sub sub! gsub gsub!)
 | 
						|
 | 
						|
    group_methods = %w(groups group_url groups_url group_path)
 | 
						|
    assert_spell 'groups', input: 'group',  dictionary: group_methods
 | 
						|
 | 
						|
    group_classes = %w(
 | 
						|
      GroupMembership
 | 
						|
      GroupMembershipPolicy
 | 
						|
      GroupMembershipDecorator
 | 
						|
      GroupMembershipSerializer
 | 
						|
      GroupHelper
 | 
						|
      Group
 | 
						|
      GroupMailer
 | 
						|
      NullGroupMembership
 | 
						|
    )
 | 
						|
 | 
						|
    assert_spell 'GroupMembership',          dictionary: group_classes, input: 'GroupMemberhip'
 | 
						|
    assert_spell 'GroupMembershipDecorator', dictionary: group_classes, input: 'GroupMemberhipDecorator'
 | 
						|
 | 
						|
    names = %w(first_name_change first_name_changed? first_name_will_change!)
 | 
						|
    assert_spell names, input: 'first_name_change!', dictionary: names
 | 
						|
 | 
						|
    assert_empty DidYouMean::SpellChecker.new(dictionary: ['proc']).correct('product_path')
 | 
						|
    assert_empty DidYouMean::SpellChecker.new(dictionary: ['fork']).correct('fooo')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_spell_checker_corrects_misspells
 | 
						|
    assert_spell 'descendants',      input: 'dependents', dictionary: ['descendants']
 | 
						|
    assert_spell 'drag_to',          input: 'drag',       dictionary: ['drag_to']
 | 
						|
    assert_spell 'set_result_count', input: 'set_result', dictionary: ['set_result_count']
 | 
						|
  end
 | 
						|
 | 
						|
  def test_spell_checker_sorts_results_by_simiarity
 | 
						|
    expected = %w(
 | 
						|
      name12345
 | 
						|
      name1234
 | 
						|
      name123
 | 
						|
    )
 | 
						|
 | 
						|
    actual = DidYouMean::SpellChecker.new(dictionary: %w(
 | 
						|
      name12
 | 
						|
      name123
 | 
						|
      name1234
 | 
						|
      name12345
 | 
						|
      name123456
 | 
						|
    )).correct('name123456')
 | 
						|
 | 
						|
    assert_equal expected, actual
 | 
						|
  end
 | 
						|
 | 
						|
  def test_spell_checker_excludes_input_from_dictionary
 | 
						|
    assert_empty DidYouMean::SpellChecker.new(dictionary: ['input']).correct('input')
 | 
						|
    assert_empty DidYouMean::SpellChecker.new(dictionary: [:input]).correct('input')
 | 
						|
    assert_empty DidYouMean::SpellChecker.new(dictionary: ['input']).correct(:input)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def assert_spell(expected, input: , dictionary: )
 | 
						|
    corrections = DidYouMean::SpellChecker.new(dictionary: dictionary).correct(input)
 | 
						|
    assert_equal Array(expected), corrections, "Expected to suggest #{expected}, but got #{corrections.inspect}"
 | 
						|
  end
 | 
						|
end
 |